Pencarian pada Array Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang
Latar Belakang Merupakan proses yang penting karena sering dilakukan terhadap sekumpulan data yang disimpan dalam array Ada beberapa variasi pencarian Metoda mana yang dipakai menentukan kecepatan pencarian Metoda yang paling sering digunakan adalah sequential search/ pencarian berurutan.
Sequential Search Merupakan metode pencarian yang paling banyak digunakan. Pencarian dilakukan dari elemen awal array, terurut hingga elemen akhir array. Algoritma sequential search dapat bervariasi, yang bergantung dapat pada data. Berikut akan dibahas beberapa algoritma sequential search, seperti: Pencarian pada data yang random atau acak Pencarian pada data yang urut Pencarian dengan sentinel
Permasalahan 1 (Pada Array dengan data acak/random) Diketahui array bertipe integer A[N], yang sudah terisi. Tuliskanlah algoritma program dengan masukan X bernilai integer dan mencari apakah X ada dalam array A secara sekuensial (berturutan) Jika data ditemukan program akan menghasilkan teks “Ketemu pada index …” Jika data tidak ditemukan maka akan ditampilkan teks “Tidak ketemu” Pencarian segera dihentikan begitu harga pertama diketemukan Contoh-1: N = 10, A berisi : { 1, 3, -7, 5, -8, 12, 7 ,90, 3, 5 }, X = 5 Pemeriksaan dilakukan terhadap {1,3, -7, 5} Output : Ketemu pada index 3 Contoh-2: N = 5, A berisi : { 18, 6, 90, 85, 55 }, X = 100 Pemeriksaan dilakukan terhadap {18, 6, 90, 85, 55 } Output : Tidak ketemu
Jawab Permasalahan 1 Dari permasalahan 1 didapatkan kesimpulan sebagai berikut: Terdapat 2 macam output, yaitu: Ketemu, pada index … Tidak ketemu Data tidak ketemu jika telah dilakukan pemeriksaan terhadap semua elemen array dari awal sampai akhir
Algoritma untuk Permasalahan 1 (Skema Pencarian Tanpa Boolean) KAMUS i : integer {indeks untuk pencarian} N : integer {jumlah index} A : array [0…N-1] of integer X : integer {data yang akan dicari} ALGORITMA i ← 0 N ← sizeof(A) input(X) while (i < N) and (Ai ≠ X) do i ← i + 1 { i = N or Ai = X } if (Ai = X) then Output (“Ketemu pada indeks ”, i) else { Ti ≠ X } Output (“Tidak Ketemu”)
Algoritma untuk Permasalahan 1 (Skema Pencarian Dengan Boolean) KAMUS i : integer {indeks untuk pencarian} N : integer {jumlah index} A : array [0…N-1] of integer X : integer {data yang akan dicari} ALGORITMA i ← 0 N ← sizeof(A) Found ← false { awal pencarian, belum ketemu } input(X) while (i ≤ N) and (not Found) do if (Ti = X) then Found ← true else i ← i + 1 { i > N or Found } if (Found) then Output (“Ketemu pada indeks ”, i) Output (“Tidak Ketemu”)
Diskusikan Buatlah algoritma untuk permasalahan 1 dengan menggunakan perulangan transversal dan kondisi, dimana menggunakan kata kunci break
Permasalahan 2 (Pada Array dengan data terurut) Diketahui sebuah array bertipe integer A[N], dengan isi yang terurut membesar Tuliskanlah algoritma untuk mencari X bernilai integer, apakah harga X ada dalam A secara sekuensial mulai dari elemen pertama Jika data ditemukan program akan menghasilkan teks “Ketemu pada index …” Jika tidak data tidak ditemukan maka akan ditampilkan teks “Tidak ketemu” Pencarian segera dihentikan begitu harga pertama diketemukan Dengan memanfaatkan keterurutan, kondisi berhenti bisa lebih efisien (dimana x lebih besar dari nilai index maka data tidak ketemu)
Permasalahan 2 lanjutan (Pada Array dengan data terurut) Contoh 1: N = 8, A berisi : { 10, 30, 50, 70, 120, 190, 311, 500}, X = 70 Pemeriksaan dilakukan terhadap {10,30,50,70} Output : Ketemu pada index 3 Contoh 2: N = 6, A berisi : { 18, 35, 55, 101, 123, 456}, X = 100 Pemeriksaan dilakukan terhadap {18, 35, 55, 101} Output : Tidak ketemu
Algoritma untuk Permasalahan 2 KAMUS i : integer {indeks untuk pencarian} N : integer {jumlah index} A : array [0…N-1] of integer X : integer {data yang akan dicari} ALGORITMA i ← 0 N ← sizeof(A) input(X) while (i < N) and (Ai < X) i ← i + 1 { i = N or Ti >= X } if (Ti = X ) then Output (“Ketemu pada indeks ”, i) else { Ti ≠ X Ti > X } Output (“Tidak ketemu”)
(Pencarian berurutan dengan SENTINEL) Permasalahan 3 (Pencarian berurutan dengan SENTINEL) Teknik ini menggunakan elemen fiktif yang diletakan pada elemen terakhir array, yang disebut SENTINEL. Harga elemen fiktif = elemen yang dicari Pencarian pasti ketemu maka harus dicek lagi posisi ketemu, apakah diakhir atau tidak Penempatan sentinel disesuaikan dengan arah pencarian(depan ke belakang atau blakang ke depan) Teknik sentinel sangat efisien, terutama jika pencarian dilakukan sebelum penyisipan sebuah elemen yang belum terdapat di dalam array
(Pencarian berurutan dengan SENTINEL) Permasalahan 3 lanjut (Pencarian berurutan dengan SENTINEL) Contoh 1: N = 7, A berisi : { 2, 4, 5, 8, 95, 30, 5}, X = 5 A dijadikan { 2, 4, 5, 8, 95, 30, 5, 5} Pemeriksaan dilakukan terhadap {2,4,5} Output : Ketemu pada index 2 Contoh 2: N = 4, A berisi : { 11, 3, 5, 8}, X = 100 A dijadikan { 11, 3, 5, 8, 100} Pemeriksaan dilakukan terhadap {11,3,5,8,100} Output : Tidak ketemu
Algoritma untuk Permasalahan 3 KAMUS i : integer {indeks untuk pencarian} N : integer {jumlah index} A : array [0…N-1] of integer X : integer {data yang akan dicari} ALGORITMA i ← 0 N ← sizeof(A) input(X) TN+1 ← X {pasang sentinel } while (Ti ≠ X)do i ← i + 1 {Ti = X; harus diperiksa apakah ketemunya di sentinel } if (i< N+1) then Output (“Ketemu pada indeks ”, i) else { i = N+1 } Output (“Tidak ketemu”)
Tugas Buatlah algoritma untuk pencarian pada data seperti berikut: N = 7, A berisi : { 2, 4, 5, 8, 5, 30, 5}, X = 5 N = 8, A berisi : { 2, 4, 5, 5, 9, 10, 15}, X = 5 Output dari data tersebut adalah: Jika ketemu: tampilkan teks “Ketemu”, tampilkan jumlah ketemu dan indeksnya Jika tidak ketemu: tampilkan teks tidak ketemu Catatan: Untuk masing-masing nomor pilihlah algoritma pencarian berurutan pada array dengan data acak, berurutan atau dengan sentinel, berikan alasan!
Referensi Inggriani Liem, IF-ITB, Diktat Pemrograman Prosedural (2007)
THANKS