• Tidak ada hasil yang ditemukan

ALGORITMA PENCARIAN (SEARCHING)

Dalam dokumen Modul Logika_ Algoritma (Halaman 57-64)

PEMROSESAN TEKS

ALGORITMA PENCARIAN (SEARCHING)

Dalam kehidupan sehari-hari sebenarnya kita sering melakukan pencarian data. Sebagai contoh, jika kita menggunakan Kamus untuk mencari kata-kata dalam Bahasa Inggris yang belum diketahui terjemahannya dalam Bahasa Indonesia. Contoh lain saat kita menggunakan buku telepon untuk mencari nomor telepon teman atau kenalan dan masih banyak contoh yang lain. Pencarian data sering juga disebut table look-up atau storage and

retrieval information adalah suatu proses untuk mengumpulkan sejumlah informasi di dalam pengingat komputer dan kemudian mencari kembali informasi yang diperlukan secepat mungkin. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah argumen kunci dan dengan langkah-langkah tertentu akan mencari rekaman dengan kunci tersebut. Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful).

Metode pencarian data dapat dilakukan dengan dua cara yaitu pencarian internal (internal searching) dan pencarian eksternal (external searching). Pada pencarian internal, semua rekaman yang diketahui berada dalam pengingat komputer sedangakan pada pencarian eksternal, tidak semua rekaman yang diketahui berada dalam pengingat komputer, tetapi ada sejumlah rekaman yang tersimpan dalam penyimpan luar misalnya pita atau cakram magnetis. Selain itu metode pencarian data juga dapat dikelompokaN menjadi pencarian statis (static

searching) dan pencarian dinamis (dynamic searching). Pada pencarian statis, banyaknya rekaman yang diketahui dianggap tetap, pada pencarian dinamis, banyaknya rekaman yang diketahui bisa berubah-ubah yang disebabkan oleh penambahan atau penghapusan suatu rekaman. Ada dua macam teknik pencarian yaitu pencarian sekuensial dan pencarian biner. Perbedaan dari dua teknik ini terletak pada keadaan data. Pencarian sekuensial digunakan apabila data dalam keadaan acak atau tidak terurut. Sebaliknya, pencarian biner digunakan pada data yang sudah dalam keadaan urut.

 Pencarian Berurutan (Sequential Searching)

Pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana. Pencarian berurutan menggunakan prinsip sebagai berikut : data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan. Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data. Pada setiap pengulangan, dibandingkan data ke-i dengan

yang dicari. Apabila sama, berarti data telah ditemukan. Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak ada. Pada kasus yang paling buruk, untuk N elemen data harus dilakukan pencarian sebanyak N kali pula. Contoh:

13 16 14 21 76 21 Nilai yang dicari: 21

Maka elemen yang diperiksa : 13 16 14 21 Index ketemu : 4

Nilai yang dicari: 13

Maka elemen yang diperiksa : 13 Index ketemu : 1

Nilai yang dicari: 15

Maka elemen yang diperiksa : 13 16 14 21 76 21 Index ketemu : 0

Algoritma pencarian berurutan dapat dituliskan sebagai berikut :

1. i ← 0

2. ketemu ← false

3. Selama (tidak ketemu) dan (i <= N) kerjakan baris 4 4. Jika (Data[i] = x) maka ketemu ← true, jika tidak i ← i + 1

5. Jika (ketemu) maka i adalah indeks dari data yang dicari, jika tidak data tidak ditemukan Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian sekuensial.

int SequentialSearch(int x) {

int i = 0;

bool ketemu = false;

while ((!ketemu) && (i < Max)){ 81 if(Data[i] == x) ketemu = true; else i++; } if(ketemu) return i; else return -1; }

Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan maka fungsi diatas akan mengembalikan nilai –1.

 Pencarian Biner (Binary Search)

Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :

Konsep Pencarian Binary/Bagi Dua

• Pilih Indek Kiri (Low) dan Indek Kanan (High) • Langkah 1:

Bagi dua elemen larik pada elemen tengah.

Elemen tengah adalah elemen dengan indek middle=(low+high) div 2. Elemen tengah (middle), akan membagi array menjadi 2 bagian yaitu:

 Bagian kiri, dengan index LARIK[Low .. middle-1]  Bagian Kanan, dengan index LARIK[middle+1..High] • Langkah 2:

 Periksa apakah LARIK[middle] = X , pencarian akan dihentikan sebab X sudah ditemukan

 Jika LARIK[middle] <> X, maka kita tentukan pencarian akan dilakukan disebelah kiri atau kanan.

 Jika LARIK[middle] < X, maka pencarian dilakukan dibagian kiri LARIK  Jika LARIK[middle] > X, maka pencarian dilakukan di bagian kanan LARIK • Langkah 3:

Ulangi langkah 1 sampai dengan X ditemukan, atau low > high (menentukan ukuran larik sudah 0).

Ilustrasi Pencarian Bagi Dua.

81 76 21 18 16 13 10 7 1 2 3 4 5 6 7 8

Low High

1. Misalkan elemen yang dicari adalah X=18. Langkah 1:

Low = 1 dan High = 8

81 76 21 18 16 13 10 7 1 2 3 4 5 6 7 8

Low Middle High

Langkah 2:

Larik[4] = X ? (18 = 18) true  X ditemukan, pencarian dihentikan. 2. Misalkan elemen yang dicari adalah X=16.

ITERASI 1

Langkah 1:

Low = 1 dan High = 8

Elemen tengah Middle = (1+8) div 2 = 9 div 2 = 4 81 76 21 18 16 13 10 7

1 2 3 4 5 6 7 8

Low Middle High

kiri kanan

Langkah 2:

Larik[4] = X ? (18 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan. Jika Larik[4] > 16 ?, (18 > 16) TRUE, lakukan pencarian disebelah kanan dengan Low = middle+1  4+1 = 5 dan High = 8, Tetap.

16 13 10 7 5 6 7 8 low High

ITERASI 2

Langkah 1:

Low = 5 dan High=8

Elemen tengah Middle = (5+8) div 2 = 13 div 2 = 6 16 13 10 7

5 6 7 8 low middle High

Langkah 2:

Larik[6] = X ? (13 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan. Jika Larik[6] > 16 ?, (13 > 16) FALSE, lakukan pencarian disebelah KIRI dengan Low = 5 (TETAP) dan High = middle-1 = 5

16 5 Low/high

ITERASI 3

Langkah 1:

Low = 5 dan High=5

Elemen tengah Middle = (5+5) div 2 = 10 div 2 = 5 16

5 middle Langkah 2:

Larik[5] = X ? (16 = 16) TRUE (X ditemukan , pencarian dihentikan) 3. Misalkan elemen yang dicari X=100.

Gambarkan langkah-langkah penyelesaiannya?

Dari ilustrasi diatas dapat dibuat algoritma sebagai berikut: (dengan data urut descending) 1. Masukan Bil yang dicari X

2. tentukan low=1 dan high = N

3. Tentukan nilai tengah : middle = (low + high) div 2

4. Cek, jika LARIK[middle] = X maka Nilai X yang dicari ditemukan, kelangkah 8 5. jika LARIK[middle] > X maka low=middle+1, kelangkah 7

6. jika LARIK[middle] < X maka high=middle-1, kelangkah 7

7. Jika low > high, “bil X tidak ditemukan” dan kelangkah 8, jika tidak kelangkah 3. 8. selesai.

Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian biner. int BinarySearch(int x)

{

int L = 0, R = Max-1, m; bool ketemu = false;

while((L <= R) && (!ketemu)) { m = (L + R) / 2; if(Data[m] == x) ketemu = true; else if (x < data[m]) R = m - 1; else L = m + 1; } if(ketemu) return m; else return -1; }

Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan maka fungsi diatas akan mengembalikan nilai –1. Jumlah pembandingan minimum pada pencarian biner adalah 1 kali, yaitu apabila data yang dicari tepat berada di tengah-tengah. Jumlah pembandingan maksimum yang dilakukan dengan pencarian biner dapat dicari menggunakan rumus logaritma, yaitu : C = 2log(N)

Tehnik Pencarian Nilai MAXMIN :

 Tehnik StaritMAXMIN

 Tehnik D and C

Teknik yangt digunakan untuk mencari nilai maksimum dan minimum dari sekumpulan nilai.

1. Tehnik Pencarian MAXMIN

Searching dengan Tehnik STRAITMAXMIN

Waktu tempuh yang digunakan untuk menyelesaikan pencarian hinggan mendapatkan solusi yang optimal terbagi atas :

a. Best Case b. Average Case c. worst Case

Algoritma dari Proses Pencarian adalah (ada pada slide): 1. Masukan N, tentukan i=1.

2. Tentukan max dan min = A[i] 3. i = 2

4. Jika i<= N maka kelangkah 5, jika tidak kelangkah 8 5. jika A[i] > max maka max=A[i] dan kelangkah 7 6. jika tidak maka (jika A[i] < min maka min = A[i]. 7. i = i+1, ulangi langkah 4.

8. cetak max dan min program straitmaxmin; var i,N:integer; max,min : integer; A : array[1..10] of integer; begin write('masukan N = '); readln(N); for i:=1 to N do readln(A[i]);

max := A[1]; min := A[1];

for i:=2 to N do

if A[i] > max then max:=A[i] else if A[i] < min then min := A[i];

writeln;

writeln('nilai max min= ',max:3, min:3); end. masukan N = 5 2 5 1 6 4

nilai max min = 6 1 --- masukan N = 6 7 5 3 9 6 2

nilai max min = 9 2

Dalam dokumen Modul Logika_ Algoritma (Halaman 57-64)

Dokumen terkait