1 / 18

SEARCHING ( PENCARIAN )

SEARCHING ( PENCARIAN ). Ada 3 metode pencarian yang akan kita bahas disini : Pencarian Beruntun ( Sekuensial Search) Pencarian Beruntun dengan sentinel Pencarian Bagi dua (Binary Search). Pencarian Beruntun ( Sekuensial Search).

bendek
Download Presentation

SEARCHING ( PENCARIAN )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SEARCHING ( PENCARIAN ) Ada 3 metodepencarian yang akankitabahasdisini: PencarianBeruntun (Sekuensial Search) PencarianBeruntundengan sentinel PencarianBagidua (Binary Search)

  2. PencarianBeruntun (Sekuensial Search) Konsep : membandingkan setiap elemen larik satu per satu secara urut (beruntun), mulai dari elemen pertama sampai dengan elemen yang terakhir.

  3. Algoritma pencarian beruntun X = 14 Maka, elemen yang di cek adalah 13, 16, 14 (ditemukan) Berarti data ditemukan pada indeks ke 2 atau elemen ke 3

  4. Contoh : #include <iostream.h> #include <conio.h> void main(){ int A[]={12,24,13,25,10,13,21,15,15,18}; intbil; for(int i=0;i<10;i++){ cout<<A[i]<<" ";} cout<<endl; cout<<"Angka yang dicari = ";cin>>bil; cout<<endl; for(int i=0;i<10;i++){ if(A[i]==bil) cout<<"angka yang dicariberada di indekske-"<<i<<endl;} getch();}

  5. PencarianBeruntunDengan Sentinel Algoritma ini adalah pengembangan dari algoritma pencarian beruntun. Yang dimaksud dengan sentinel adalah elemen fiktif yang sengaja ditambahkan sesudah elemen terakhir dari larik tersebut. Jadi jika elemen terakhir dari larik adalah L[N], maka sentinel diletakkan pada elemen L[N+1]. Akibatnya proses pencarian akan selalu menemukan data yang dicari, akan tetapi harus selalu diperiksa letak data yang ditemukan, apakah: • Di antara elemen-elemen larik yang sesungguhnya(antara L[1] sampai dengan L[N]) • Pada elemen fiktif [L[N+1]]

  6. Algoritma pencarian Sentinel N = 6 jumlahelemenlarik/array semula 1. Misalkanelemen yang dicariadalah X=21 Maka, tambahkan 21 sebagaielemen sentinel di L[N+1]: Elemen yang diperiksaselamapencarian : 13, 16, 14, 21 Elemenlarik yang dikembalikan : 4, karena 4 != N+1, berarti X =21 terdapatdidalamlariksemula.

  7. 2. Misalkanelemen yang dicariadalah X=13 Maka, tambahkan 13 sebagaielemen sentinel di L[N+1]: Elemen yang diperiksaselamapencarian : 13 Elemenlarik yang dikembalikan : 1, karena 1 != N+1, berarti X = 13 terdapatdidalamlariksemula. 3. Misalkanelemen yang dicariadalah X=15 Maka, tambahkan 15 sebagaielemen sentinel di L[N+1]: Elemen yang diperiksaselamapencarian : 13,16,14,21,76,21,15 Elemenlarik yang dikembalikan : 7, ditemukansebagaielemen sentinel. Karena 7 = N+1, berarti X=15 tidakterdapatdidalamlariksemula.

  8. Contoh : # include <iostream.h> # include <conio.h> # include <stdio.h> # include <math.h> void main(){ int array[]={1,2,3,4,5}, i=0,x; cout<<"masukkan data yang akan dicari "; cin>>x; array[5]=x; i=0; while(array[i]!=x) i++; if (i<5) { cout<<"Data Ketemu”; } else cout<<"data tidak ditemukan"; getch();}

  9. PencarianBagiDua (Binary Search) Syarat : Data harusterurut Salahsatukeuntungan data yang terurutadalahmemudahkanpencarian, yang dalamhaliniadalahpencarianbagidua. Sebenarnyadalamkehidupansehari-harikitaseringmenerapkanalgoritmaini. Untukmencarikatatertentudalamkamus (misalnyakamusbahasaInggris), kitatidakmembukakamustersebutdarihalamanawalsampaihalamanakhirsatupersatu, namunkitamencarinyadengancaramembelahataumembagihalaman-halamanbukutersebut. Begituseterusnyasampaikitamenemukankata yang dicari.

  10. Algoritmapencarianbagidua Misal elemen yang dicari adalah X = 18 langkah 1: ia=1 dan ib=8 elemen tengah K=(1+8)/2 = 4 kiri kanan Langkah 2: L[4]=18? Ya! (X ditemukan, pencarian dihentikan)

  11. Misal elemen yang dicari adalah X = 16 langkah 1: ia=1 dan ib=8 elemen tengah K=(1+8)/2 = 4 kiri kanan Langkah 2: L[4]=18? Tidak ! harus diputuskan apakan pencarian akan dilakukan di bagian kiri atau kanan dengan pemeriksaan sbb: L[4] > 16 ? Ya ! Lakukan pencarian pada larik bagian kanan dengan ia=k+1 = 5 dan ib = 8 (tetap)

  12. Langkah 2.1: ia = 5 dan ib = 8 elemen tengah K = (5+8)/2 = 6 Kiri kanan Langkah 2.2: L[6] = 16? Tidak ! harus diputuskan apakan pencarian akan dilakukan di bagian kiri atau kanan dengan pemeriksaan sbb: L[6] > 16 ? Tidak ! Lakukan pencarian pada larik bagian kiri dengan ia= 5 dan ib = k-1 = 5

  13. Langkah 2.1.1: ia = 5 dan ib = 5 elemen tengah K = (5+5)/2 = 5 (diarsir) Langkah 2.1.2: L[5] = 16? Ya ! (X ditemukan,pencarian dihentikan)

  14. Misal elemen yang dicari adalah X = 100 langkah 1: ia=1 dan ib=8 elemen tengah K=(1+8)/2 = 4 kiri kanan Langkah 2: L[4]=100? Tidak ! harus diputuskan apakan pencarian akan dilakukan di bagian kiri atau kanan dengan pemeriksaan sbb: L[4] > 100 ? Tidak ! Lakukan pencarian pada larik bagian kiri dengan ia=1 dan ib = K-1 = 3

  15. Langkah 1: ia = 1 dan ib = 3 elemen tengah K = (1+3)/2 = 2 Kiri kanan Langkah 2: L[2]=100? Tidak ! harus diputuskan apakan pencarian akan dilakukan di bagian kiri atau kanan dengan pemeriksaan sbb: L[2] > 100 ? Tidak ! Lakukan pencarian pada larik bagian kiri dengan ia=1 dan ib = K-1 = 1

  16. Langkah 1.1: ia = 1 dan ib = 1 elemen tengah K = (1+1)/2 = 1 Langkah 1.2: L[1]=100? Tidak ! harus diputuskan apakan pencarian akan dilakukan di bagian kiri atau kanan dengan pemeriksaan sbb: L[1] > 100 ? Tidak ! Lakukan pencarian pada larik bagian kiri dengan ia=1 dan ib = K-1 = 0 Karena ia > ib, maka tidak ada lagi bagian larik yang tersisa. Dengan demikian, X tidak ditemukan di dalam larik maka pencarian dihentikan.

  17. Contoh : #include <iostream.h> #include <conio.h> void main() { const int arraySize = 5; int target; int array[arraySize] = {1, 2, 3, 4, 5}; int first, mid, last; cout <<"isi array : 1,2,3,4,5 "; cout<<"\n"; cout << "Masukkan angka yang dicari : ";cin >> target; first = 0; last = 4;

  18. while(first <= last) { mid = (first + last)/2; if(target > array[mid]) { first = mid + 1; } else if(target < array[mid]) { last = mid - 1; } else { first = last + 1; } } if(target == array[mid]) { cout << "Ditemukan." << endl; } else { cout << "Tidak ditemukan" << endl; } getch(); }

More Related