SEARCHING ( PENCARIAN )

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

description

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). - PowerPoint PPT Presentation

Transcript of SEARCHING ( PENCARIAN )

Page 1: SEARCHING ( PENCARIAN )

SEARCHING ( PENCARIAN )

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

Page 2: SEARCHING ( PENCARIAN )

Pencarian Beruntun (Sekuensial Search)

Konsep : membandingkan setiap elemen                 larik satu per satu secara urut     

              (beruntun),  mulai  dari  elemen pertama                sampai dengan elemen yang terakhir. 

Page 3: SEARCHING ( PENCARIAN )

Algoritma pencarian beruntun

13 16 14 21 76 21

1 2 3 4 5 6

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

Page 4: SEARCHING ( PENCARIAN )

Contoh :#include <iostream.h>#include <conio.h>void main(){ int A[]={12,24,13,25,10,13,21,15,15,18}; int bil;

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 dicari berada di indeks ke-"<<i<<endl;}getch();}

Page 5: SEARCHING ( PENCARIAN )

Pencarian Beruntun Dengan 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:1. Di  antara  elemen-elemen  larik  yang  sesungguhnya(antara  L[1] 

sampai dengan L[N])2. Pada elemen fiktif [L[N+1]]

Page 6: SEARCHING ( PENCARIAN )

Algoritma pencarian Sentinel13 16 14 21 76 21

1 2 3 4 5 6

N = 6 jumlah elemen larik/array semula1. Misalkan elemen yang dicari adalah X=21Maka, tambahkan 21 sebagai elemen sentinel di L[N+1]:

13 16 14 21 76 21 21

1 2 3 4 5 6 7

Elemen yang diperiksa selama pencarian : 13, 16, 14, 21Elemen  larik  yang  dikembalikan  :  4,  karena  4  !=  N+1, berarti X =21 terdapat di dalam larik semula.

Page 7: SEARCHING ( PENCARIAN )

2. Misalkan elemen yang dicari adalah X=13Maka, tambahkan 13 sebagai elemen sentinel di L[N+1]:

13 16 14 21 76 21 13

1 2 3 4 5 6 7

Elemen yang diperiksa selama pencarian : 13Elemen  larik  yang  dikembalikan  :  1,  karena  1  !=  N+1, berarti X = 13 terdapat di dalam larik semula.

3. Misalkan elemen yang dicari adalah X=15Maka, tambahkan 15 sebagai elemen sentinel di L[N+1]:

13 16 14 21 76 21 15

1 2 3 4 5 6 7

Elemen yang diperiksa selama pencarian : 13,16,14,21,76,21,15Elemen larik yang dikembalikan : 7, ditemukan sebagai  elemen sentinel. Karena 7 = N+1, berarti X=15 tidak terdapat di dalam larik semula.

Page 8: SEARCHING ( PENCARIAN )

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();}

Page 9: SEARCHING ( PENCARIAN )

Pencarian Bagi Dua (Binary Search)

Syarat : Data harus terurutSalah  satu  keuntungan  data  yang  terurut  adalah  memudahkan pencarian,  yang  dalam  hal  ini  adalah  pencarian  bagi  dua. Sebenarnya  dalam kehidupan  sehari-hari  kita  sering menerapkan algoritma ini. Untuk mencari kata tertentu dalam kamus (misalnya kamus  bahasa  Inggris),  kita  tidak membuka  kamus  tersebut  dari halaman  awal  sampai  halaman  akhir  satu  persatu,  namun  kita mencarinya  dengan  cara  membelah  atau  membagi  halaman-halaman  buku  tersebut.  Begitu  seterusnya  sampai  kita menemukan kata yang dicari.

Page 10: SEARCHING ( PENCARIAN )

Algoritma pencarian bagidua81 76 21 18 16 13 10 7

Ia=1 2 3 4 5 6 7 8=ib

1. Misal elemen yang dicari adalah X = 18langkah 1:ia=1 dan ib=8elemen tengah K=(1+8)/2 = 4

kiri kanan

Langkah 2:L[4]=18? Ya! (X ditemukan, pencarian dihentikan)

81 76 21 18 16 13 10 7

1 2 3 4 5 6 7 8

Page 11: SEARCHING ( PENCARIAN )

2. Misal elemen yang dicari adalah X = 16langkah 1:ia=1 dan ib=8elemen tengah K=(1+8)/2 = 4

kiri kananLangkah 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)

81 76 21 18 16 13 10 7

1 2 3 4 5 6 7 8

Page 12: SEARCHING ( PENCARIAN )

16 13 10 7

5 6 7 8

Langkah 2.1:ia = 5 dan ib = 8elemen tengah K = (5+8)/2 = 6

16 13 10 7

5 6 7 8

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

Kiri   kanan

Page 13: SEARCHING ( PENCARIAN )

16

5

Langkah 2.1.1:ia = 5 dan ib = 5elemen tengah K = (5+5)/2 = 5 (diarsir)

16

5

Langkah 2.1.2:L[5] = 16? Ya ! (X ditemukan,pencarian dihentikan)

Page 14: SEARCHING ( PENCARIAN )

3. Misal elemen yang dicari adalah X = 100langkah 1:ia=1 dan ib=8elemen tengah K=(1+8)/2 = 4

kiri kananLangkah 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

81 76 21 18 16 13 10 7

1 2 3 4 5 6 7 8

Page 15: SEARCHING ( PENCARIAN )

81 76 21

Ia=1 2 3=ib

Langkah 1:ia = 1 dan ib = 3elemen tengah K = (1+3)/2 = 2

81 76 21

Ia=1 2 3=ib

  Kiri                 kananLangkah 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

81

1

Page 16: SEARCHING ( PENCARIAN )

Langkah 1.1:ia = 1 dan ib = 1elemen tengah K = (1+1)/2 = 1 

81

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.

Page 17: SEARCHING ( PENCARIAN )

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;

Page 18: SEARCHING ( PENCARIAN )

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(); }