• Tidak ada hasil yang ditemukan

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 ik+1 else jk-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

Dokumen terkait