Lompat ke konten

Koleksi Data

AP Ilmu Komputer A · Topik 4

Pelajaran video untuk topik ini Buka halaman video
13:32

Koleksi Data

Ambil satu foto di ponsel Anda. Bagi komputer, itu bukanlah gambar sama sekali — itu adalah grid angka, satu untuk setiap piksel, sekitar dua belas juta darinya. Sekarang cobalah…

Narasi bahasa Inggris · Subtitle bahasa Inggris + 中文 disematkan langsung

4.1

Etika Pengumpulan Data

Silabus

Tujuan Pembelajaran 4.1.A: Menjelaskan risiko terhadap privasi dari pengumpulan dan penyimpanan data pribadi pada sistem komputer.

  • 4.1.A.1 Saat menggunakan komputer, privasi pribadi berisiko. Saat mengembangkan program baru, programmer harus berusaha melindungi privasi pribadi pengguna.

Tujuan Pembelajaran 4.1.B: Menjelaskan pentingnya mengenali kualitas data dan potensi masalah saat menggunakan himpunan data.

  • 4.1.B.1 Bias algoritma menggambarkan kesalahan sistematis dan berulang dalam program yang menciptakan hasil yang tidak adil bagi kelompok pengguna tertentu.
  • 4.1.B.2 Programmer harus menyadari metode pengumpulan himpunan data dan potensi bias ketika menggunakan metode tersebut sebelum menggunakan data untuk mengekstrapolasi informasi baru atau menarik kesimpulan.
  • 4.1.B.3 Beberapa himpunan data tidak lengkap atau berisi data yang tidak akurat. Menggunakan data seperti itu dalam pengembangan atau penggunaan program dapat menyebabkan program bekerja secara tidak benar atau tidak efisien.

Tujuan Pembelajaran 4.1.C: Mengidentifikasi himpunan data yang tepat untuk digunakan guna memecahkan masalah atau menjawab pertanyaan spesifik.

  • 4.1.C.1 Isi dari himpunan data mungkin berkaitan dengan pertanyaan atau topik tertentu dan mungkin tidak tepat untuk memberikan jawaban yang benar atau mengekstrapolasi informasi untuk pertanyaan atau topik lain.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Rak server di pusat data — kumpulan data yang besar menimbulkan pertanyaan etis mengenai pengumpulan dan penggunaannya
Rak server di pusat data — kumpulan data yang besar menimbulkan pertanyaan etis mengenai pengumpulan dan penggunaannya

Program yang mengumpulkan data menimbulkan pertanyaan tentang privasi dan persetujuan. Kumpulkan hanya yang diperlukan, lindungi data tersebut, dan jujur mengenai penggunaannya. Data dapat memiliki bias jika tidak mewakili semua orang secara adil, yang mengarah pada hasil yang tidak adil—sebuah tanggung jawab yang menyertai penyimpanan informasi.

Kosa kata Latih
English Bahasa Indonesia
privacy/ˈprɪvəsi/ privasi
consent/kənˈsent/ persetujuan
bias/ˈbaɪəs/ bias
data structure/ˈdeɪtə ˈstrʌktʃə/ struktur data
4.2

Mengapa Kita Membutuhkan Struktur Data

Silabus

Tujuan Pembelajaran 4.2.A: Merepresentasikan pola dan algoritma yang melibatkan set data yang ditemukan dalam kehidupan sehari-hari menggunakan bahasa tulisan atau diagram.

  • 4.2.A.1 Sebuah set data adalah kumpulan piece informasi spesifik atau data.
  • 4.2.A.2 Set data dapat dimanipulasi dan dianalisis untuk memecahkan masalah atau menjawab pertanyaan. Saat menganalisis set data, nilai-nilai di dalamnya diakses dan digunakan satu per satu lalu diproses sesuai dengan hasil yang diinginkan.
  • 4.2.A.3 Data dapat direpresentasikan dalam diagram menggunakan grafik atau tabel. Visual ini dapat digunakan untuk merancang algoritma yang akan digunakan untuk memanipulasi data.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Lemari arsip: koleksi menyimpan banyak nilai di bawah satu nama sehingga algoritma dapat memprosesnya
Kabinet arsip: koleksi menyimpan banyak nilai di bawah satu nama sehingga algoritma dapat memprosesnya

Satu variabel memegang satu nilai; masalah nyata memerlukan penyimpanan banyak nilai terkait—daftar siswa, piksel, pembacaan sensor. Sebuah struktur data mengorganisir koleksi agar kita dapat menyimpan, menemukan, dan memproses item dengan efisien. Kurikulum AP menggunakan tiga jenis: array, ArrayList, dan array 2D.

Kosa kata Latih
English Bahasa Indonesia
array/əˈreɪ/ array
ArrayList/əˈreɪ lɪst/ ArrayList
2D array/ˌtuː ˈdiː əˈreɪ/ array 2D
row-major order/rəʊ ˈmeɪdʒə ˈɔːdə/ urutan baris-utama
4.3

Membuat dan Membaca Array

Silabus

Tujuan Pembelajaran 4.3.A: Mengembangkan kode yang digunakan untuk merepresentasikan koleksi data terkait menggunakan objek array satu dimensi (1D).

  • 4.3.A.1 Sebuah array menyimpan banyak nilai dari tipe yang sama. Nilainya bisa berupa nilai primitif atau referensi objek.
  • 4.3.A.2 Panjang array ditetapkan pada saat pembuatan dan tidak dapat diubah. Panjang array dapat diakses melalui atribut length.
  • 4.3.A.3 Ketika array dibuat menggunakan kata kunci new, semua elemennya diinisialisasi dengan nilai default untuk tipe data elemen. Nilai default untuk int adalah 0, untuk double adalah 0.0, untuk boolean adalah false, dan untuk tipe referensi adalah null.
  • 4.3.A.4 Daftar inisialisasi dapat digunakan untuk membuat dan menginisialisasi array.
  • 4.3.A.5 Kurung siku [ ] digunakan untuk mengakses dan memodifikasi elemen dalam array 1D menggunakan indeks.
  • 4.3.A.6 Nilai indeks yang valid untuk array adalah 0 hingga satu kurang dari panjang array, inklusif. Menggunakan nilai indeks di luar rentang ini akan menghasilkan ArrayIndexOutOfBoundsException.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Sebuah array adalah koleksi berurutan dengan ukuran tetap yang berisi nilai bertipe sama. Indeks berjalan dari 0 hingga length - 1:

Array satu dimensi (daftar) beserta indeks dan batas-batasnya
Array satu dimensi (sebuah daftar) beserta indeks dan batas-batasnya
int[] nums = new int[5];        // five zeros
int[] vals = {3, 1, 4, 1, 5};   // initialized
int first = vals[0];            // 3
int n = vals.length;            // 5 (a field, not a method)

Mengakses indeks di luar 0..length-1 akan menyebabkan error ArrayIndexOutOfBoundsException.

4.4

Mengunjungi Setiap Elemen Array

Silabus

Tujuan Pembelajaran 4.4.A: Mengembangkan kode yang digunakan untuk menelusuri elemen dalam array 1D dan menentukan hasil dari penelusuran tersebut.

  • 4.4.A.1 Menelusuri array adalah ketika pernyataan pengulangan digunakan untuk mengakses semua atau urutan elemen tertentu dalam array.
  • 4.4.A.2 Menelusuri array dengan loop for berbasis indeks atau loop while memerlukan elemen diakses menggunakan indeks mereka.
  • 4.4.A.3 Header loop enhanced for mencakup variabel, yang disebut sebagai variabel loop enhanced for. Untuk setiap iterasi loop enhanced for, variabel loop enhanced for diberikan salinan dari elemen tanpa menggunakan indeksnya.
  • 4.4.A.4 Memberikan nilai baru kepada variabel loop enhanced for tidak mengubah nilai yang disimpan dalam array.
  • 4.4.A.5 Ketika array menyimpan referensi objek, atribut dapat dimodifikasi dengan memanggil method pada variabel loop enhanced for. Ini tidak mengubah referensi objek yang disimpan dalam array.
  • 4.4.A.6 Kode yang ditulis menggunakan loop for yang ditingkatkan untuk menelusuri elemen dalam array dapat ditulis ulang menggunakan loop for terindeks atau loop while.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Traverse array menggunakan perulangan for (memberikan indeks) atau perulangan enhanced for / for-each (memberikan setiap nilai, bersifat read-only):

for (int i = 0; i < a.length; i++) { a[i] *= 2; }   // can modify
for (int v : a) { System.out.println(v); }          // read each value
Kosa kata Latih
English Bahasa Indonesia
Traverse/trəˈvɜːs/ Penelusuran
4.5

Algoritma Array Standar

Silabus

Tujuan Pembelajaran 4.5.A: Mengembangkan kode untuk algoritma standar dan asli untuk konteks atau spesifikasi tertentu yang melibatkan array dan menentukan hasil dari algoritma-algoritma tersebut.

  • 4.5.A.1 Terdapat algoritma standar yang menggunakan penelusuran array untuk:
    • menentukan nilai minimum atau maksimum
    • menghitung jumlah atau rata-rata
    • menentukan apakah setidaknya satu elemen memiliki sifat tertentu
    • menentukan apakah semua elemen memiliki sifat tertentu
    • menentukan jumlah elemen yang memiliki sifat tertentu
    • mengakses semua pasangan elemen berturut-turut
    • menentukan keberadaan atau ketiadaan elemen duplikat
    • menggeser atau memutar elemen ke kiri atau kanan
    • membalik urutan elemen

Sumber: Deskripsi Kursus dan Ujian College Board AP

Kuasai pola-pola berikut: hitung jumlah atau rata-rata, temukan maks/min, hitung item yang memenuhi kondisi, periksa adanya duplikat, dan balik atau geser elemen. Masing-masing merupakan traversal dengan hasil kumulatif:

int sum = 0;
for (int v : a) sum += v;
double avg = (double) sum / a.length;
4.6

Membaca Data dari File Teks

Silabus

Tujuan Pembelajaran 4.6.A: Mengembangkan kode untuk membaca data dari file teks.

  • 4.6.A.1 File adalah penyimpanan data yang bertahan ketika program tidak berjalan. Data dalam file dapat diambil selama eksekusi program.
  • 4.6.A.2 File dapat dihubungkan ke program menggunakan kelas File dan Scanner.
  • 4.6.A.3 File dapat dibuka dengan membuat objek File, menggunakan nama file sebagai argumen konstruktor.
    • File(String str) adalah konstruktor File yang menerima nama file String untuk dibuka untuk pembacaan, di mana str adalah path nama untuk file tersebut.
  • 4.6.A.4 Saat menggunakan kelas File, diperlukan untuk menunjukkan apa yang harus dilakukan jika file dengan nama yang diberikan tidak dapat dibuka. Salah satu cara untuk mencapai hal ini adalah dengan menambahkan throws IOException ke header metode yang menggunakan file. Jika nama file tidak valid, program akan berhenti.
  • 4.6.A.5 Kelas File dan IOException merupakan bagian dari paket java.io. Pernyataan import harus digunakan agar kelas-kelas ini tersedia untuk digunakan dalam program.
  • 4.6.A.6 Metode Scanner dan konstruktor berikut—termasuk apa yang mereka lakukan dan kapan mereka digunakan—merupakan bagian dari Referensi Cepat Java:
    • Scanner(File f) adalah konstruktor Scanner yang menerima File untuk dibaca.
    • int nextInt() mengembalikan int berikutnya yang dibaca dari file atau sumber input jika tersedia. Jika int berikutnya tidak ada atau berada di luar jangkauan, hal itu akan menghasilkan InputMismatchException.
    • double nextDouble() mengembalikan double berikutnya yang dibaca dari file atau sumber input. Jika double berikutnya tidak ada, hal itu akan menghasilkan InputMismatchException.
    • boolean nextBoolean() mengembalikan boolean berikutnya yang dibaca dari file atau sumber input. Jika boolean berikutnya tidak ada, hal itu akan menghasilkan InputMismatchException.
    • String nextLine() mengembalikan baris teks berikutnya sebagai String yang dibaca dari file atau sumber input; dapat mengembalikan string kosong jika dipanggil segera setelah metode Scanner lain yang sedang membaca dari file atau sumber input.
    • String next() mengembalikan String berikutnya yang dibaca dari file atau sumber input.
    • boolean hasNext() mengembalikan true jika ada item berikutnya untuk dibaca di file atau sumber input; mengembalikan false jika tidak.
    • void close() menutup scanner ini.
    • Pengecualian: Menerima input dari keyboard berada di luar cakupan kursus AP Computer Science A dan ujian.
  • 4.6.A.7 Menggunakan nextLine dan metode Scanner lainnya bersama-sama pada sumber input yang sama terkadang memerlukan kode untuk menyesuaikan diri dengan cara berbeda dari metode-metode tersebut dalam menangani spasi putih.
    • Pengecualian: Menulis atau menganalisis kode yang menggunakan baik nextLine maupun metode Scanner lainnya pada sumber input yang sama berada di luar cakupan kursus AP Computer Science A dan ujian.
  • 4.6.A.8 Metode String tambahan berikut—termasuk apa yang ia lakukan dan kapan ia digunakan—merupakan bagian dari Referensi Cepat Java:
    • String[] split(String del) mengembalikan array String di mana setiap elemen adalah substring dari this String, yang telah dipisahkan berdasarkan kecocokan dari ekspresi yang diberikan del.
    • Pengecualian: Parameter del menggunakan format yang disebut ekspresi reguler. Menulis atau menganalisis kode yang menggunakan salah satu sifat khusus dari ekspresi reguler (mis., \\*, \\.) berada di luar cakupan kursus AP Computer Science A dan ujian.
  • 4.6.A.9 Loop while dapat digunakan untuk mendeteksi apakah file masih berisi elemen yang dapat dibaca dengan menggunakan metode hasNext sebagai kondisi loop.
  • 4.6.A.10 File harus ditutup ketika program selesai menggunakannya. Metode close dari Scanner dipanggil untuk menutup file.

Sumber: Deskripsi Kursus dan Ujian College Board AP

File dan IOException berada dalam java.io, sehingga program yang membaca file membutuhkan import java.io.*;. Membuka file bisa gagal (file mungkin tidak ada), dan Java mewajibkan Anda menangani hal itu—cara termudah adalah menambahkan throws IOException ke header method. Sebuah Scanner kemudian membaca file baris demi baris, menggunakan hasNext... untuk melakukan tes sebelum membaca:

import java.io.*;
...
public static void readFile() throws IOException {
    Scanner f = new Scanner(new File("data.txt"));
    while (f.hasNextLine()) {
        String line = f.nextLine();
    }
}

Membaca token ketik dengan nextInt(), nextDouble(), atau nextBoolean() akan memunculkan InputMismatchException jika token berikutnya memiliki tipe yang salah – misalnya memanggil nextInt() ketika hal berikutnya dalam file adalah kata cat.

4.7

Membungkus Angka dalam Objek

Silabus

Tujuan Pembelajaran 4.7.A: Mengembangkan kode untuk menggunakan objek Integer dan Double dari tipe primitifnya dan menentukan hasil penggunaan objek-objek tersebut.

  • 4.7.A.1 Kelas Integer dan kelas Double merupakan bagian dari paket java.lang. Objek Integer bersifat tidak dapat diubah, artinya setelah objek Integer dibuat, atributnya tidak dapat diubah. Objek Double bersifat tidak dapat diubah, artinya setelah objek Double dibuat, atributnya tidak dapat diubah.
  • 4.7.A.2 Autoboxing adalah konversi otomatis yang dilakukan oleh compiler Java antara tipe primitif dan kelas pembungkus objek yang sesuai. Ini termasuk mengkonversi int menjadi Integer dan double menjadi Double. Compiler Java menerapkan autoboxing ketika nilai primitif:
    • dilewatkan sebagai parameter ke metode yang mengharapkan objek dari kelas pembungkus yang sesuai
    • ditugaskan ke variabel dari kelas pembungkus yang sesuai
  • 4.7.A.3 Unboxing adalah konversi otomatis yang dilakukan oleh compiler Java dari kelas pembungkus ke tipe primitif. Ini termasuk mengkonversi Integer menjadi int dan Double menjadi double. Compiler Java menerapkan unboxing ketika objek kelas pembungkus:
    • dilewatkan sebagai parameter ke metode yang mengharapkan nilai dari tipe primitif yang sesuai
    • ditugaskan ke variabel dari tipe primitif yang sesuai
  • 4.7.A.4 Metode Integer kelas berikut—termasuk apa yang ia lakukan dan kapan ia digunakan—merupakan bagian dari Referensi Cepat Java:
    • static int parseInt(String s) mengembalikan argumen String sebagai int.
  • 4.7.A.5 Metode Double kelas berikut—termasuk apa yang ia lakukan dan kapan ia digunakan—merupakan bagian dari Referensi Cepat Java:
    • static double parseDouble(String s) mengembalikan argumen String sebagai double.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Sebuah ArrayList menyimpan objek, bukan primitif, sehingga primitif harus dibungkus dalam objek: Integer membungkus int, Double membungkus double. Java melakukan ini secara otomatis melalui autoboxing (int ke Integer) dan unboxing (kembali lagi), sehingga Anda dapat menulis list.add(5) dan int x = list.get(0).

Kosa kata Latih
English Bahasa Indonesia
autoboxing/ˌɔːtəʊˈbɒksɪŋ/ autoboxing
4.8

Kotak Alat ArrayList

Silabus

Tujuan Pembelajaran 4.8.A: Mengembangkan kode untuk koleksi objek terkait menggunakan objek ArrayList dan menentukan hasil pemanggilan metode pada objek-objek tersebut.

  • 4.8.A.1 Objek ArrayList dapat diubah ukurannya dan berisi referensi objek.
  • 4.8.A.2 Konstruktor ArrayList ArrayList() membuat daftar kosong.
  • 4.8.A.3 Java mengizinkan tipe generik ArrayList<E>, di mana parameter tipe E menentukan tipe elemen. Ketika ArrayList<E> ditentukan, tipe dari parameter referensi dan tipe kembali saat menggunakan metode ArrayList adalah tipe E. ArrayList<E> lebih disukai daripada ArrayList. Sebagai contoh, ArrayList<String> names = new ArrayList<String>(); memungkinkan compiler untuk menemukan error yang akan ditemukan pada waktu run-time jika tidak ada.
  • 4.8.A.4 Kelas ArrayList merupakan bagian dari paket java.util. Pernyataan import import harus digunakan agar kelas ini tersedia untuk digunakan dalam program.
  • 4.8.A.5 Metode ArrayList berikut—termasuk fungsi dan penggunaannya—merupakan bagian dari Rujukan Cepat Java:
    • int size() mengembalikan jumlah elemen dalam daftar.
    • boolean add(E obj) menambahkan obj ke akhir daftar; mengembalikan true.
    • void add(int index, E obj) menyisipkan obj pada posisi index (0 <= index <= size), memindahkan elemen pada posisi index dan lebih tinggi ke kanan (menambahkan 1 ke indeks mereka) dan menambahkan 1 ke ukuran.
    • E get(int index) mengembalikan elemen pada posisi index dalam daftar.
    • E set(int index, E obj) mengganti elemen pada posisi index dengan obj; mengembalikan elemen yang sebelumnya berada di posisi index.
    • E remove(int index) menghapus elemen dari posisi index, memindahkan elemen pada posisi index + 1 dan lebih tinggi ke kiri (mengurangi 1 pada indeks mereka) dan mengurangi 1 pada ukuran; mengembalikan elemen yang sebelumnya berada di posisi index.
  • 4.8.A.6 Indeks untuk ArrayList dimulai dari 0 dan berakhir pada jumlah elemen - 1.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Apa itu ArrayList sebenarnya

Sebuah ArrayList akan bertambah dan berkurang ukurannya saat Anda menambahkan atau menghapus item. Deklarasikan dengan tipe elemen di <>:

ArrayList<String> names = new ArrayList<String>();
names.add("Amy");           // append
names.add(0, "Bob");        // insert at index
names.get(0);               // read
names.set(1, "Cara");       // replace
names.remove(0);            // delete, shifts the rest left
names.size();               // count (a method, unlike array.length)
4.9

Mengunjungi Setiap Elemen ArrayList

Silabus

Tujuan Pembelajaran 4.9.A: Mengembangkan kode yang digunakan untuk menelusuri elemen dari ArrayList dan menentukan hasil pelayaran tersebut.

  • 4.9.A.1 Menelusuri ArrayList adalah ketika pernyataan iterasi atau rekursif digunakan untuk mengakses semua atau urutan elemen tertentu dalam ArrayList.
  • 4.9.A.2 Menghapus elemen selama penelusuran ArrayList memerlukan penggunaan teknik khusus untuk menghindari melewatkan elemen.
  • 4.9.A.3 Mencoba mengakses nilai indeks di luar rentangnya akan menghasilkan IndexOutOfBoundsException.
  • 4.9.A.4 Mengubah ukuran ArrayList selama menelusurinya menggunakan loop for diperluas dapat menghasilkan ConcurrentModificationException. Oleh karena itu, ketika menggunakan loop for diperluas untuk menelusuri ArrayList, Anda tidak boleh menambahkan atau menghapus elemen.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Lakukan traversing menggunakan perulangan index atau perulangan for-each, sama seperti array (gunakan size() dan get(i)):

for (int i = 0; i < list.size(); i++) { ... list.get(i) ... }
for (String s : list) { ... }

Keterampilan ujian: saat menghapus item dalam perulangan index, lakukan perulangan mundur atau jangan increment i setelah penghapusan –_page lain penghapusan akan menggeser elemen ke kiri dan Anda melewatkan satu. Dan jangan pernah tambahkan atau hapus elemen saat melakukan traversing pada ArrayList dengan perulangan for-each: mengubah ukurannya di tengah perulangan akan memunculkan ConcurrentModificationException, jadi gunakan perulangan index (mundur, seperti di atas) setiap kali Anda harus menghapus.

4.10

Algoritma ArrayList Standar

Silabus

Tujuan Pembelajaran 4.10.A: Mengembangkan kode untuk algoritma standar dan orisinal untuk konteks atau spesifikasi tertentu yang melibatkan objek ArrayList dan menentukan hasil dari algoritma-algoritma tersebut.

  • 4.10.A.1 Terdapat algoritma ArrayList standar yang memanfaatkan penelusuran untuk:
    • menentukan nilai minimum atau maksimum
    • menghitung jumlah atau rata-rata
    • menentukan apakah setidaknya satu elemen memiliki sifat tertentu
    • menentukan apakah semua elemen memiliki sifat tertentu
    • menentukan jumlah elemen yang memiliki sifat tertentu
    • mengakses semua pasangan elemen berturut-turut
    • menentukan keberadaan atau ketiadaan elemen duplikat
    • menggeser atau memutar elemen ke kiri atau kanan
    • membalik urutan elemen
    • menyisipkan elemen
    • menghapus elemen
  • 4.10.A.2 Beberapa algoritma memerlukan beberapa String, array, atau objek ArrayList ditelusuri secara bersamaan.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Algoritma yang sama seperti array – max/min, hitung, jumlah – ditambah sisip dan hapus yang tidak bisa dilakukan array dengan mudah. Tugas umum adalah menghapus semua elemen yang sesuai dengan suatu kondisi, menangani pergeseran index dengan hati-hati.

4.11

Grid: Array Dua Dimensi

Silabus

Tujuan Pembelajaran 4.11.A: Mengembangkan kode yang digunakan untuk merepresentasikan kumpulan data yang saling terkait menggunakan objek array dua dimensi (2D).

  • 4.11.A.1 Array 2D disimpan sebagai array dari array. Oleh karena itu, cara pembuatan dan pengindeksan array 2D mirip dengan objek array 1D. Ukuran array 2D ditetapkan saat pembuatan dan tidak dapat diubah. Array 2D dapat menyimpan data primitif atau data referensi objek.
    • Pernyataan pengecualian: Objek array 2D non-rectangular berada di luar cakupan mata kuliah dan ujian AP Computer Science A.
  • 4.11.A.2 Ketika array 2D dibuat menggunakan kata kunci new, semua elemennya diinisialisasi dengan nilai default untuk tipe data elemen. Nilai default untuk int adalah 0, untuk double adalah 0.0, untuk boolean adalah false, dan untuk tipe referensi adalah null.
  • 4.11.A.3 Daftar inisialisasi yang digunakan untuk membuat dan menginisialisasi array 2D terdiri dari daftar inisialisasi yang merepresentasikan array 1D; misalnya, int[][] arr2D = { {1, 2, 3}, {4, 5, 6} };.
  • 4.11.A.4 Tanda kurung siku [row][col] digunakan untuk mengakses dan memodifikasi elemen dalam array 2D. Untuk tujuan ujian, saat mengakses elemen pada arr[first][second], indeks pertama digunakan untuk baris, indeks kedua digunakan untuk kolom.
  • 4.11.A.5 Satu array tunggal yang merupakan baris dari array 2D dapat diakses menggunakan nama array 2D dan satu set tanda kurung siku yang berisi indeks baris.
  • 4.11.A.6 Jumlah baris yang terkandung dalam array 2D dapat diakses melalui atribut length. Nilai indeks baris yang valid untuk array 2D adalah 0 hingga satu kurang dari jumlah baris atau panjang array, termasuk. Jumlah kolom yang terkandung dalam array 2D dapat diakses melalui atribut length dari salah satu baris. Nilai indeks kolom yang valid untuk array 2D adalah 0 hingga satu kurang dari jumlah kolom atau panjang setiap baris tertentu dari array, termasuk. Sebagai contoh, diberikan array 2D bernama values, jumlah baris adalah values.length dan jumlah kolom adalah values[0].length. Menggunakan nilai indeks di luar rentang ini akan menghasilkan ArrayIndexOutOfBoundsException.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Sebuah array 2D adalah grid (baris dan kolom) – sebuah array dari array:

Array dua dimensi (tabel) beserta indeks baris dan kolom
Array dua dimensi (tabel) dengan indeks baris dan kolom
int[][] grid = new int[3][4];   // 3 rows, 4 columns
grid[r][c] = 7;                 // row r, column c
int rows = grid.length;         // 3
int cols = grid[0].length;      // 4
Jelajahi

Indeks array 2D berdasarkan baris dan kolom

Array 2D adalah grid yang dialamatkan oleh [row][col]. Gerakkan indeks dan lihat sel mana yang mereka pilih — baris dulu, lalu kolom, keduanya dihitung dari 0.

4.12

Menelusuri Grid

Silabus

Tujuan Pembelajaran 4.12.A: Mengembangkan kode yang digunakan untuk menelusuri elemen dalam array 2D dan menentukan hasil penelusuran tersebut.

  • 4.12.A.1 Pernyataan iterasi bersarang digunakan untuk menelusuri dan mengakses semua atau urutan elemen tertentu dalam array 2D. Karena array 2D disimpan sebagai array dari array, cara array 2D ditelusuri menggunakan loop for dan loop enhanced for mirip dengan objek array 1D. Pernyataan iterasi bersarang dapat ditulis untuk menelusuri array 2D secara urutan baris (row-major order), urutan kolom (column-major order), atau urutan yang terdefinisi secara unik. Urutan baris merujuk pada pengurutan elemen array 2D di mana penelusuran terjadi melintasi setiap baris, sedangkan penelusuran urutan kolom terjadi ke bawah setiap kolom.
  • 4.12.A.2 Loop luar dari loop enhanced for bersarang yang digunakan untuk menelusuri array 2D menelusuri baris-barisnya. Oleh karena itu, variabel loop enhanced for harus bertipe seperti setiap baris, yaitu array 1D. Loop dalam menelusuri satu baris tunggal. Oleh karena itu, variabel loop enhanced for dalam harus memiliki tipe yang sama dengan elemen yang disimpan dalam array 1D. Menetapkan nilai baru pada variabel loop enhanced for tidak mengubah nilai yang tersimpan dalam array.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Menelusuri array 2-D

Kunjungi setiap sel dengan perulangan bersarang – luar untuk baris, dalam untuk kolom (urutan baris-utama):

for (int r = 0; r < grid.length; r++)
    for (int c = 0; c < grid[0].length; c++)
        System.out.print(grid[r][c]);
4.13

Algoritma Array 2D Standar

Silabus

Tujuan Pembelajaran 4.13.A: Mengembangkan kode untuk algoritma standar dan orisinal untuk konteks atau spesifikasi tertentu yang melibatkan array 2D dan menentukan hasil algoritma-algoritma tersebut.

  • 4.13.A.1 Terdapat algoritma standar yang menggunakan penelusuran array 2D untuk:
    • menentukan nilai minimum atau maksimum dari semua elemen atau untuk baris, kolom, atau subbagian yang ditentukan
    • menghitung jumlah atau rata-rata dari semua elemen atau untuk baris, kolom, atau subbagian yang ditentukan
    • menentukan apakah setidaknya satu elemen memiliki sifat tertentu di seluruh array 2D atau untuk baris, kolom, atau subbagian yang ditentukan
    • menentukan apakah semua elemen array 2D atau baris, kolom, atau subbagian yang ditentukan memiliki sifat tertentu
    • menentukan jumlah elemen dalam array 2D atau dalam baris, kolom, atau subbagian yang ditentukan yang memiliki sifat tertentu
    • mengakses semua pasangan elemen berturut-turut
    • menentukan keberadaan atau ketiadaan elemen duplikat dalam array 2D atau dalam baris, kolom, atau subbagian yang ditentukan
    • menggeser atau memutar elemen dalam sebuah baris ke kiri atau ke kanan atau dalam sebuah kolom ke atas atau ke bawah
    • membalik urutan elemen dalam sebuah baris atau kolom

Sumber: Deskripsi Kursus dan Ujian College Board AP

Tugas grid tipikal: menjumlahkan baris atau kolom, menemukan nilai max di seluruh grid, menghitung sel yang cocok, atau menjumlahkan diagonal (di mana r == c). Masing-masing merupakan traversing bersarang dengan hasil kumulatif.

4.14

Menemukan Nilai: Pencarian Linear dan Pencarian Biner

Silabus

Tujuan Pembelajaran 4.14.A: Mengembangkan kode yang digunakan untuk algoritma pencarian linear untuk mencari informasi spesifik dalam kumpulan data dan menentukan hasil eksekusi pencarian.

  • 4.14.A.1 Algoritma pencarian linear adalah algoritma standar yang memeriksa setiap elemen secara berurutan hingga nilai yang diinginkan ditemukan atau semua elemen dalam array atau ArrayList telah diperiksa. Algoritma pencarian linear dapat memulai proses pencarian dari salah satu ujung array atau ArrayList.
  • 4.14.A.2 Saat menerapkan algoritma pencarian linear pada array 2D, setiap baris harus diakses terlebih dahulu kemudian pencarian linear diterapkan pada setiap baris dari array 2D.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Pencarian biner: bagi dua dan taklukkan
  • Pencarian linear memeriksa setiap elemen secara berurutan – bekerja pada daftar apa pun, memakan waktu hingga $n$ langkah.
  • Pencarian biner hanya bekerja pada daftar yang terurut: periksa elemen tengah, lalu buang setengah yang tidak mungkin berisi target, ulangi. Memakan waktu sekitar $\log_2 n$ langkah – jauh lebih cepat pada data besar.
Pencarian biner membagi dua rentang pada setiap langkah
Pencarian biner membagi dua rentang pada setiap langkah
Pencarian linear memeriksa setiap elemen secara berurutan hingga target ditemukan
Pencarian linear memeriksa setiap elemen secara berurutan hingga target ditemukan
int lo = 0, hi = a.length - 1;
while (lo <= hi) {
    int mid = (lo + hi) / 2;
    if (a[mid] == target) return mid;
    else if (a[mid] < target) lo = mid + 1;
    else hi = mid - 1;
}

Keterampilan ujian: pencarian biner memerlukan data terurut; tahu berapa banyak perbandingan yang dilakukan dan bagaimana lo, hi, mid diperbarui.

Contoh dikerjakan. Cari target = 40 dalam array terurut {3, 9, 14, 23, 31, 42, 55} (indeks 0–6). Mulai lo=0, hi=6:

  • mid = (0+6)/2 = 3, a[3]=23 < 40, jadi lo = 4;
  • mid = (4+6)/2 = 5, a[5]=42 > 40, jadi hi = 4;
  • mid = (4+4)/2 = 4, a[4]=31 < 40, jadi lo = 5;
  • sekarang lo (5) > hi (4), jadi loop berakhir – 40 tidak ada.

Setiap langkah membagi dua rentang, jadi bahkan kegagalan ini hanya memerlukan tiga perbandingan.

Jelajahi

Bandingkan pencarian linear dan biner

Pencarian linear memeriksa setiap elemen secara bergantian; pencarian biner membagi dua daftar terurut setiap langkah. Lihat pencarian biner mencapai target dalam jauh lebih sedikit perbandingan.

Kosa kata Latih
English Bahasa Indonesia
Linear search/ˈlɪnɪə sɜːtʃ/ Pencarian linear
Binary search/ˈbaɪnəri sɜːtʃ/ Pencarian biner
Selection sort/sɪˈlekʃn sɔːt/ Selection sort
4.15

Mengurutkan Data: Sortir Seleksi dan Sortir Penyisipan

Silabus

Tujuan Pembelajaran 4.15.A: Menentukan hasil eksekusi setiap langkah algoritma pengurutan untuk mengurutkan elemen dalam suatu kumpulan data.

  • 4.15.A.1 Selection sort dan insertion sort adalah algoritma pengurutan iteratif yang dapat digunakan untuk mengurutkan elemen dalam array atau ArrayList.
  • 4.15.A.2 Selection sort secara berulang memilih elemen terkecil (atau terbesar) dari bagian daftar yang belum terurut dan menukarnya ke posisi yang benar (dan akhir) di bagian daftar yang sudah terurut.
  • 4.15.A.3 Sortir sisipan menyisipkan elemen dari bagian yang belum terurut dalam daftar ke posisi yang benar (tetapi tidak necessarily final) di bagian yang sudah terurut dengan menggeser elemen-elemen dari bagian yang sudah terurut untuk memberi ruang bagi elemen baru.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Sortir penyisipan
Bubble sort, pass by pass
  • Sortir seleksi berulang kali menemukan elemen tersisa terkecil dan menukarnya ke posisi yang benar.
  • Sortir penyisipan memperluas bagian depan yang terurut, menyisipkan setiap elemen baru di tempatnya.
Pengurutan sisipan, menggeser setiap kunci ke tempatnya satu per satu
Sortir penyisipan, menggeser setiap kunci ke posisi yang tepat satu per satu lintasan

Keduanya sederhana dan memakan waktu sekitar $n^2$ langkah rata-rata – cukup untuk array kecil. Harus mampu melacak array setelah setiap lintasan.

Jelajahi

Lihat algoritma penyortiran mengurutkan daftar

Sortir menyusun ulang elemen menjadi tertib. Telusuri seleksi/insertion sort untuk melihat wilayah terurut bertambah satu elemen pada satu waktu.

Kosa kata Latih
English Bahasa Indonesia
Insertion sort/ɪnˈsɜːʃn sɔːt/ Insertion sort
4.16

Metode yang Memanggil Diri Sendiri: Rekursi

Silabus

Tujuan Pembelajaran 4.16.A: Menentukan hasil dari pemanggilan metode rekursif.

  • 4.16.A.1 Sebuah metode rekursif adalah metode yang memanggil dirinya sendiri. Metode rekursif mengandung setidaknya satu kasus dasar, yang menghentikan rekursi, dan setidaknya satu panggilan rekursif. Rekursi adalah bentuk pengulangan lain.
  • 4.16.A.2 Setiap panggilan rekursif memiliki set variabel lokal masing-masing, termasuk parameter. Nilai parameter menangkap kemajuan proses rekursif, mirip seperti nilai variabel kontrol perulangan menangkap kemajuan sebuah loop.
  • 4.16.A.3 Setiap solusi rekursif dapat direplikasi melalui penggunaan pendekatan iteratif dan sebaliknya.
    • Pernyataan Pengecualian: Penulisan kode rekursif berada di luar cakupan kursus dan ujian AP Computer Science A.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Rekursi & tumpukan pemanggilan

Rekursi adalah metode yang memanggil dirinya sendiri pada input yang lebih kecil. Membutuhkan kasus dasar yang menghentikan pemanggilan, dan kasus rekursif yang mengarah ke kasus dasar:

public static int factorial(int n) {
    if (n <= 1) return 1;          // base case
    return n * factorial(n - 1);   // recursive case
}

Tanpa kasus dasar yang dapat dicapai, rekursi tidak pernah berhenti (tumpukan penuh).

Rekursi dan iterasi saling dapat ditukar. Solusi rekursif mana pun dapat ditulis ulang dengan loop (pendekatan iteratif), dan loop mana pun dapat ditulis ulang dengan rekursi - mereka menyelesaikan masalah yang sama. factorial di atas memiliki efek yang sama dengan versi iteratif:

public static int factorial(int n) {
    int result = 1;
    for (int i = 2; i <= n; i++) result *= i;   // same answer, no self-call
    return result;
}

Jadi pilihannya tentang kejelasan, bukan kemampuan: rekursi terbaca alami untuk masalah dengan struktur mirip diri (pohon, sorting merge), sementara iterasi menghindari biaya memori dari menumpuk bingkai pemanggilan per langkah. Ujian mungkin meminta Anda untuk mengonversi satu ke yang lain.

Jelajahi

Buka pemanggilan rekursif

Metode rekursif memanggil dirinya sendiri pada input yang lebih kecil hingga mencapai kasus dasar, kemudian hasilnya melipat naik kembali. Telusuri untuk melihat tumpukan pemanggilan dan pembukaannya.

Kosa kata Latih
English Bahasa Indonesia
Recursion/rɪˈkɜːʃn/ Recursion
base case/beɪs keɪs/ kasus dasar
4.17

Pencarian Rekursif dan Sorting Merge

Silabus

Tujuan Pembelajaran 4.17.A: Menentukan hasil dari eksekusi algoritma rekursif yang menggunakan string atau koleksi.

  • 4.17.A.1 Rekursi dapat digunakan untuk menelusuri String objek, array, dan ArrayList objek.

Tujuan Pembelajaran 4.17.B: Menentukan hasil dari setiap iterasi algoritma pencarian biner yang digunakan untuk mencari informasi dalam sebuah koleksi.

  • 4.17.B.1 Data harus dalam urutan terurut untuk menggunakan algoritma pencarian biner. Pencarian biner dimulai dari tengah array terurut atau ArrayList dan menghilangkan separuh dari array atau ArrayList dalam setiap panggilan rekursif hingga nilai yang diinginkan ditemukan atau semua elemen telah dihilangkan.
  • 4.17.B.2 Pencarian biner biasanya lebih efisien daripada pencarian linear.
    • Pernyataan Pengecualian: Algoritma pencarian selain pencarian linear dan biner berada di luar cakupan kursus dan ujian AP Computer Science A.
  • 4.17.B.3 Algoritma pencarian biner dapat ditulis baik secara iteratif maupun rekursif.

Tujuan Pembelajaran 4.17.C: Menentukan hasil dari setiap iterasi algoritma merge sort ketika digunakan untuk mengurutkan sebuah koleksi.

  • 4.17.C.1 Merge sort adalah algoritma pengurutan rekursif yang dapat digunakan untuk mengurutkan elemen dalam array atau ArrayList.
    • Pernyataan Pengecualian: Algoritma pengurutan selain selection, insertion, dan merge sort berada di luar cakupan kursus dan ujian AP Computer Science A.
  • 4.17.C.2 Merge sort berulang kali membagi array menjadi subarray yang lebih kecil hingga setiap subarray berisi satu elemen dan kemudian secara rekursif menggabungkan subarray yang sudah terurut kembali bersama-sama dalam urutan terurut untuk membentuk array akhir yang terurut.

Sumber: Deskripsi Kursus dan Ujian College Board AP

Sortir gabungan: pisahkan, lalu gabungkan

Rekursi menggerakkan algoritma efisien. Pencarian biner dapat ditulis secara rekursif (cari setengah yang benar). Sorting merge membagi array menjadi dua, mengurutkan masing-masing setengah secara rekursif, lalu menggabungkan kedua setengah yang terurut – memakan waktu sekitar $n\log_2 n$ langkah, jauh lebih cepat daripada sortir seleksi atau sortir penyisipan pada data besar.

Pengurutan penggabungan memecah array menjadi elemen tunggal, lalu menggabungkan kembali setengah yang sudah diurutkan
Sorting merge memecah array menjadi elemen tunggal, lalu menggabungkan kembali setengah yang terurut naik

Contoh dikerjakan. Lacak factorial(4). Setiap panggilan menunda ke panggilan yang lebih kecil: factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * 2 * factorial(1). factorial(1) mencapai kasus dasar dan mengembalikan 1, sehingga panggilan membongkar ke dalam: 2 * 1 = 2, kemudian 3 * 2 = 6, kemudian 4 * 6 = 24. Menulis setiap panggilan di atas nilainya yang dikembalikan adalah cara yang andal untuk melacak rekursi.

Keterampilan ujian: lacak metode rekursif dengan menulis keluar setiap panggilan dan nilai pengembalian, dan tahu bahwa efisiensi sorting merge ($n\log n$) mengalahkan $n^2$ sortir sederhana.

Kosa kata Latih
English Bahasa Indonesia
Merge sort/mɜːdʒ sɔːt/ Sortir gabung
4.17

Tips ujian

  • Timbang manfaat dan kerugian pengumpulan data — unit ini diuji melalui justifikasi tulisan singkat, bukan kode.
  • Lindungi informasi yang dapat mengidentifikasi seseorang (PII) dan jelaskan risiko privasi dan keamanan dalam konteks.
  • Sebutkan kerugian nyata: pelanggaran data, pengawasan, dan bias algoritma dari data yang tidak representatif.
  • Hormati hak kekayaan intelektual dan lisensi saat Anda menggunakan kembali kode atau data.
  • Berikan jawaban spesifik dan beralasan – "bisa jadi buruk" yang samar tidak mendapat nilai.

Pelajaran interaktif untuk topik ini

Kerjakan langkah demi langkah, dengan latihan pengecekan instan.

Soal-Soil Masa Lalu

Topik lain dalam AP Ilmu Komputer A

Masuk atau buat akun

IGCSE, A-Level & AP