Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehIrvan Sang Telah diubah "9 tahun yang lalu
1
Rahmady Liyantanto liyantanto@gmail.com liyantanto.wordpress.com S1 Teknik Informatika Universitas Trunojoyo Struktur Data
2
Dalam ilmu komputer, sebuah algoritma pencarian dijelaskan secara luas adalah sebuah algoritma yang menerima masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi.ilmu komputermasukan Sebagian besar algoritma yang dipelajari oleh ilmuwan komputer adalah algoritma pencarian. Himpunan semua kemungkinan solusi dari sebuah masalah disebut ruang pencarian.ruang pencarian
3
Diketahui: ▪ larik l berisi data sebanyak n, apakah ada data x didalam larik l ; ▪ jika ada, catat indeks dimana x ditemukan
4
Func CariBerturutan (x, l, n) i := 1 while i l[i] do i := i + 1 ewhile if i > n then return (0) else return (i) eif efunc
5
Func CariBerturutan (x, l, n) i := 1 ketemu := false while not ketemu and i <= n do if x = l[i] then ketemu := true else i := i + 1 eif ewhile if ketemu then return (i) else return (0) eif efunc
6
Algoritma sebelumnya, jumlah pemeriksaan dilakukan sebanyak 2n (why?) Bagaimana agar pemeriksaan hanya dilakukan sebanyak n saja?
7
Sebelumnya setiap pemeriksaan apakah x=l[i], selalu didahului oleh pemeriksaan apakah i<=n Pemeriksaan i<=n dapat dihilangkan, asal dijamin bahwa pasti ditemukan data x didalam larik l. Untuk itu pada elemen larik ke n+1 dimasukkan x sebagai sentinel (sehingga i tidak melewati batas akhir larik)
8
Jika data x ditemukan pada indeks n+1, berarti bahwa x tidak ada didalam larik l, dan jika x ditemukan pada indeks selain n+1, berarti x ditemukan
9
Func CariSentinel (x, l, n) l[n+1] := x {pasang sentinel} i := 1 while x <> l[i] do i := i + 1 ewhile if i = n + 1 then return (0) {x tidak ditemukan} else return (i) eif efunc
10
Diterapkan pada data yang sudah terurut Ide: Periksa apakah x berada ditengah larik l. Jika ada maka berhenti. Jika x lebih kecil dari elemen tengah larik, maka pencarian bagi-dua dilakukan pada sebelah kiri elemen tengah. Dianggap bahwa data terkecil ada disebelah kiri dan data terbesar ada di sebelah kanan.
11
Jika x lebih besar dari elemen tengah larik, maka pencarian bagi-dua dilakukan pada sebelah kanan elemen tengah. Pencarian dilakukan terus sampai ditemukan x atau bagian larik yang akan dicari sudah habis.
12
Perhatikan ilustrasi berikut ini Mis. larik l terdiri dari 10 elemen dan data yang tersimpan telah terurut Titik tengah larik dihitung berdasarkan : tengah := (kiri+kanan) div 2
13
2525 x 10 15 20 25 30 35 40 45 50 55 1 2 3 4 5 6 7 8 9 10 kiritengahkanan 10 15 20 25 30 35 40 45 50 55 1 2 3 4 5 6 7 8 9 10 kirikanan
14
10 15 20 25 30 35 40 45 50 55 1 2 3 4 5 6 7 8 9 10 kiritengahkanan 10 15 20 25 30 35 40 45 50 55 1 2 3 4 5 6 7 8 9 10 kirikanan
15
Func CariBagiDua (x, l, n) kiri := 1 {batas kiri pencarian} kanan := n {batas kanan pencarian} ketemu := false while not ketemu and kiri <= kanan do tengah := (kiri+kanan) div 2 if x = l[tengah] then ketemu := true else if x < l[tengah] then kanan := tengah-1 else kiri := tengah + 1 eif ewhile If ketemu then return (tengah) else return (0) eif efunc
16
BINARY SEARCH BINARY SEARCH SEQUENTIAL SEARCH SEQUENTIAL SEARCH SENTINEL SEARCH SENTINEL SEARCH SEARCHING METHOD
17
Procedure Seqsearch( A[], X, N, IX) Var I : int; Begin I:=1 I:=1 While (I X) do While (I X) do I := I + 1; If (L[I] <> X) then IX := 0 If (L[I] <> X) then IX := 0 else IX := I; else IX := I;End;
18
Procedure Sentsearch( L[], X, N, IX) Var I : int; Begin L[N+1] := X; L[N+1] := X; I:=1 I:=1 While (L[I] <> X) do While (L[I] <> X) do I := I + 1; If (I < N+1) then IX := I If (I < N+1) then IX := I else IX := 0; else IX := 0;End;
19
Procedure Binsearch( L[], X, N, IX) Begin Ia:=1; Ib:=N; ketemu := False; Ia:=1; Ib:=N; ketemu := False; While (Not ketemu) and (Ia <= Ib) do While (Not ketemu) and (Ia <= Ib) do Begin Begin k := (Ia + Ib) div 2; k := (Ia + Ib) div 2; if (L[k] = X) then if (L[k] = X) then ketemu := true ketemu := true else else if (L[k] > X) then Ia := k + 1 if (L[k] > X) then Ia := k + 1 else Ib := k – 1; else Ib := k – 1; end; end; If (ketemu) then IX := k Else IX := 0; End;
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.