A. Pengetahuan yang diperlukan dalam menerapkan teknik dasar algoritma umum 33
2. Algoritma Pencarian Data (searching)
Pencarian (searching) merupakan proses yang fundamental dalam pemrograman. Proses pencarian adalah menemukan data atau nilai tertentu di dalam sekumpulan nilai yang bertipe sama (tipe dasar atau tipe bentukan). Terdapat beberapa macam metoda algoritma pencarian di antaranya adalah :
1. Pencarian berurutan (sequenctial search) 2. Pencarian bagidua (binary search)
Dalam proses pencarian biasanya data tersimpan dalam suatu variable array atau larik. Sebelum kegiatan proses pencarian, terlebih dahulu dilakukan definisi terhadap persoalan pencarian dalam larik. Di bawah ini diberikan contoh pendefinisian persoalan pencarian dalam array.
Suatu variable array L yang sudah terdefinisi elemen-elemennya. X adalah elemen yang bertipe sama dengan array L. Carilah apakah X terdapat didalam larik L. Hasil atau keluaran dari persoalan pencarian dapat bermacam-macam tergantung dari kebutuhan yang diinginkan : misalnya.
1. Memberikan pesan bahwa x ditemukan didalam larik L. Misalnya : Write( X, ‘ditemukan.. !’) atau
Write( X, ‘Tidak ditemukan… !’) 2. Menggunakan Indeks elemen larik.
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 40 dari 71
Jika X ditemukan maka simpan indeks larik tempat X ditemukan ke dalam variable IDX. Jika X tidak terdapat didalamlarik L maka IDX diisi dengan harga nol (0)
Contoh :
Misalkan X =68, maka IDX = 7 dan bila X = 100 maka IDX = 0 Untuk keputusan hasil pencarian kita dapat menuliskan :
If IDX 0 then
Write( X, ‘tidak ditemukan.. !’) Else
Write( X, ‘ditemukan.. pada elemen ke-’, IDX) Endif
3. Menggunakan Variable Boolean
Jika X ditemukan maka sebuah variable bertipe Boolean, misalnya : “ketemu” diisi dengan true, sebaliknya “ketemu” diisi dengan false jika X tidak ditemukan
Contoh ;
Misalkan X = 69 maka ketemu = true dan bila X = 100 maka ketemu = false
Untuk keputusan hasil pencarian kita dapat menuliskan : If ketemu the { ketemu = true }
Write( X, ‘ditemukan.. !’) Else
Write( X, ‘tidak ditemukan.. !’) Endif
a. Pencarian beruntun
Pada dasarnya pencarian beruntun adalah proses membandingkan setiap eleman larik satu persatu secara berurutan. Pencarian dimulai dari elemen pertama sampai seluruh elemen sudah diperiksa atau ditemukan.
Contoh berikut menjelaskan proses pencarian data untuk mendapatkan hasil dengan menggunakan referensi indeks larik tempat x berada.
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 41 dari 71
Algoritma berikut menjelaskan pencarian data beruntun dimana untuk mendapatkan hasil menggunakan referensi indeks larik tempat x berada dan variable Boolean (true) yang menyatakan data ditemukan dan false untuk data tidak ditemukan
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 42 dari 71
b. Pencarian Bagi dua (Binary search)
Pencarian bagidua ataupencarian binary search adalah metode pencarian yang diterapkan pada sekumpulan data yang sudah terurut baik terurut naik atau turun. Metoda ini digunakan untuk kebutuhan pencarian dengan waktu yang cepat. Prinsip pencarian bagidua ialah dengan membagi data menjadi dua bagian kiri dan kanan. Jika data ada disebelah kiri maka tidak memerlukan pencarian disebelah kanan. Kalau data masih banyak maka dapat dilakukan pembelahan lagi begitu seterusnya sampai data ditemukan.
Misalnya untuk data yang telah terurut menurun, selama proses pencarian memerlukan dua buah indexs larik yaitu indeks terkecil (ujung kiri larik) dan indeks terbesar (ujung kanan larik). Kanan dan kiri dinyatakan dengan membayangkan elemen terlentang secara horizontal. Algoritma pencarian data menggunakan metodebagi dua adalah sebagai berikut :
1. Misalkan indeks kiri adalah i dan indeks kanan adalah j, mulamula i=0, j=N. 2. Langkah1 : bagi dua elemen larik pada elemen tengah. Elemen tengah
adalah elemen dengan indeks k =(i+j) div 2. Elemen tengah L[k],membagi larik menjadi dua bagian yaitu bagian kiri L[i … j] dan bagian kanan L[k+1 … j]
3. Langkah 2 : periksa apakah L[k]= X. jika sama maka pencarian dihentikan berarti data X yang dicari sudah ditemukan. Jika L[k] tidak sama dengan X makaharus ditentukan apakah pencarian akan dilakukan dilarik bagian kiri atau bagian kanan. Jika L[k] < X maka pencarian disebelah kiri. Sebaliknya jika L[k] > X maka pencarian disebelah kanan.
4. Langkah 3. ulangi langkah 1 sampai X ditemukan atau i > j (ukuran larik sudah nol)
Contoh :
Diketahui sebuah larik L dengan 8 buah data seperti berikut:
81 76 21 18 16 13 10 7
I=1 2 3 4 5 6 7 J=8 Misalkan data yang dicari adalah x = 18
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 43 dari 71
Langkah 1 : I =1, j=8
Indeks elemen tengah k = (1 + 8) div 2 = 4 diarsir
81 76 21 18 16 13 10 7
I=1 2 3 4 5 6 7 J=8
Kiri Kanan
Langkah 2 :
Apakah L[4] = 18 ya ( x ditemukan maka pencarian dihentikan)
Misalkan elemen yang dicari x = 16 Langkah 1
I =1, j=8
Indeks elemen tengah k = (1 + 8) div 2 = 4 diarsir
81 76 21 18 16 13 10 7
I=1 2 3 4 5 6 7 J=8
Kiri Kanan
Langkah 2 :
Apakah L[4] = 16 tidak ? harus diputuskan apakah pencarian akan dilakukan disebelah kiri atau dibagian kanan dengan pemeriksaan sebagai berikut :
L[4] > 16 ? ya, maka lakukan pencarian pada larik sebelah kanan dengan I = k + 1=5 dan j =8 (tetap)
16 13 10 7
5 6 7 J=8 Kanan
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 44 dari 71
Langkah 1’ I=5, j =8
Indeks elemen tengah k = (5 + 8) DIV 2 = 6 (diarsir)
16 13 10 7
5 6 7 J=8 kiri kanan Langkah 2’:
L[6] = 16 ? tidak . harus diputuskan pencarian disebelah kanan atau kiri
L[6] > 16 ? tidak ,lakukan pencarian disebelah kiri dengan I = 5 (tetap) dan j = k -1 = 5
Langkah 1’’ : dengan I = 5, j =5 maka
Indeks elemen tengah = k = 5 + 5 DIV 2 = 5
16
5 kiri Langkah 2’’ :
L[5] = 16 ? ya ( x ditemukan pencarian dihentikan)
Misalnya elemen yang akan dicari adalah 100 Langkah 1
I =1, j=8
Indeks elemen tengah k = (1 + 8) div 2 = 4 diarsir
81 76 21 18 16 13 10 7
I=1 2 3 4 5 6 7 J=8
kiri Kanan
Langkah 2 :
Apakah L[4] = 100 tidak ? harus diputuskan apakah pencarian akan dilakukan disebelah kiri atau dibagian kanan dengan pemeriksaan sebagai berikut :
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 45 dari 71
L[4] > 100 ? tidak,
lakukan pencarian pada larik sebelah kiri dengan i=1 (tetap) dan j= k-1=3
81 76 21
I=1 2 3=j Kiri
Langkah 1’: i=1 j=3
indeks elemen tengah k = (1+3) DIV 2 = 2 (diarsir)
81 76 21
I=1 2 3=j Kiri
Langkah 2’
L[2] = 100 ? tidak . harus diputuskan pencarian disebelah kanan atau kiri
L[6] > 100 ? tidak ,lakukan pencarian disebelah kiri dengan I = 1 (tetap) dan j = k -1 = 2 – 1 = 1
81
I=1
Langkah 1’’ i=1, j=1
indeks elemen tengah k = 1 + 1 DIV 2 = 2 DIV 2 = 1
81
I=1
Langkah 2’’
L[1] = 100 ? tidak
Harus diputuskan apakah pencarian akan dilakukan disebelah kiri atau kanandengan pemeriksaan sebagai berikut :
L[1] > 100 ? tidak
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 46 dari 71
Karena I > j maka tidakada bagian larik yang tersisa, dengan demikian x tidak ditemukan didalam larik dan proses pencarian dihentikan.
Algoritma pencarian menggunakan indexs larik DEKLARASI
const Nmaks 100
type larik : array [1..Nmaks] of integer x, Jumdata , i, ,j,IDX : integer
A : larik
Ketemu : boolean DISKRIPSI
Write(‘Masukkan jumlah data : ‘, Jumdata); Read(Jumdata); For i 1 to Jumdata do
Write(‘masukkan data ke-‘, i); read(A[i]); Endfor
Write(‘masukkan data yang akan dicari = ‘); read(x) i=1;
j=jumdata; ketemu=false;
While (not ketemu) and (i<=j)) do k(i+j) div 2 if (L[k] = x) then ketemu true else if ( L[k] > x ) then ik+1 else jk-1 endif endif endwhile If ketemu then IDX = k Else IDX = 0 endif If IDX 0 then
Write(‘data tidak ditemukan ... !’); Else
Write(‘data yang dicari = %d, tidak ditemukan.. !’, A[k]); endif
Judul Modul: Instruksi Dasar Pemrograman Berorientasi Obyek
Buku Informasi – Versi 2018 Halaman: 47 dari 71
B. Keterampilan yang diperlukan dalam Menerapkan hasil pemodelan ke