Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Rahmady Liyantanto liyantanto.wordpress.com S1 Teknik Informatika Universitas Trunojoyo Struktur Data.

Presentasi serupa


Presentasi berjudul: "Rahmady Liyantanto liyantanto.wordpress.com S1 Teknik Informatika Universitas Trunojoyo Struktur Data."— Transcript presentasi:

1 Rahmady Liyantanto 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 kiritengahkanan kirikanan

14 kiritengahkanan 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;


Download ppt "Rahmady Liyantanto liyantanto.wordpress.com S1 Teknik Informatika Universitas Trunojoyo Struktur Data."

Presentasi serupa


Iklan oleh Google