Anda di halaman 1dari 17

SEARCHING

PENDAHULUAN
• Searching atau pencarian adalah sebuah proses
mencari atau menemukan sebuah nilai atau data
tertentu di dalam sekumpulan data yang bertipe
sama
• Pada pertemuan kali ini, proses searching akan
dilakukan pada sebuah larik.
• Artinya kita akan mencari apakah sebuah nilai
terdapat dalam kumpulan elemen larik.
• Jika ada, maka ditemukan pada indeks
keberapa?
PENDAHULUAN
Penggambaran dari proses searching:

Misal di ketahui larik L dibawah ini

34 22 37 32 29 16

0 1 2 3 4 5

Bila yang di cari nilai 29 : maka nilai 29 ditemukan


di larik L, dan berada pada indeks ke 4.

Bila yang dicari 22 : maka nilai tidak ditemukan pada


larik L dan indeks sama dengan -1
Algoritma searching
• Pada pertemuan kali ini akan dibahas dua
buah algoritma pencarian yaitu :
– Algoritma pencarian beruntun/sequential
– Algoritma pencarian bagi dua/binary
Pencarian beruntun
• Algoritma pencarian yang paling
sederhana adalah pencarian beruntun
atau sering disebut sequential atau
linear search.
• Prinsip dari algoritma ini adalah
membandingkan setiap elemen larik satu
persatu satu sampai ditemukan nilai yang
diinginkan
Pencarian beruntun
Sebagai contoh, dengan menggunakan
algoritma pencarian beruntun, hendak dicari
elemen 29 pada larik L.

54 48 37 32 29 16

0 1 2 3 4 5

Proses dilakukan dengan membandingkan satu


persatu elemen dari larik dengan nilai yang
dicari
54 48 37 32 29 16
Array L :
0 1 2 3 4 5

Nilai yang dicari : 29


Proses : Membandingkan 29 dengan indeks dari
0-5
1.29 == L[0] ??  false , maka di cek indeks 1
2.29 == L[1] ??  false , maka di cek indeks 2
3.29 == L[2] ??  false , maka di cek indeks 3
4.29 == L[3] ??  false , maka di cek indeks 4
5.29 == L[4] ??  TRUE : ditemukan pada
indeks ke 4
Kinerja algoritma pencarian
beruntun
• Kinerja algoritma pencarian ini bisa dikatakan
lambat karena harus membandingkan elemen
larik, satu persatu sampai nilai ditemukan atau
tidak ditemukan, terutama untuk larik yang
elemennya tidak terurut.
• Apabila nilai elemen di dalam larik terurut (dari
besar ke kecil atau sebaliknya) , kita bisa
melakukan modifikasi dari algoritma ini agar
proses pencarian tidak perlu mencari sampai
element terakhir bila nilai yang dicari tidak ada.
Diketahui larik L terurut menaik dengan jumlah data 6 buah

16 29 32 37 48 54

0 1 2 3 4 5

Contoh nilai yang dicari : 35


Kita bisa memodifikasi pencarian beruntun dengan menambahkan
pengecekan dengan tanda “kurang dari” (< )untuk mengurangi
proses perbandingan
Membandingkan 35 dengan indeks dari 0 - 5
1. L[0] <=35  true
L[0]==35  false.. next
2. L[1] <= 35  true
L[1]==35  false.. next
3. L[2] <= 35  true
L[2]==35  false.. next
4. L[3] <= 35  FALSE.. Proses pencarian selesai karena nilai 35
kurang dan tidak sama dengan nilai 37

Data tidak ditemukan...


PENCARIAN BAGI DUA
• Seperti ditunjukkan pada bagian
sebelumnya, kinerja pencarian pada larik
dengan element berurut selalu lebih baik
• Terdapat algoritma pencarian nilai dari larik
dengan element terurut yang memiliki
kinerja lebih baik dari pada algoritma
sequence yang di modifikasi
• Nama algoritma tersebut adalah pencarian
“bagi dua” atau “biner”
PENCARIAN BAGI DUA
• Pada pencarian indeks dibutuhkan dua buah
variabel untuk menyimpan indeks terbesar dan
terkecil
• Inti dari pencarian ini adalah membagi urutan
data kedalam dua bagian pencarian
• Pada contoh selanjutnya akan dibahas
pencarian menggunakan algoritma bagi dua
pada larik terurut menurun.
54 48 37 32 29 16

0 1 2 3 4 5
Pencarian bagi dua
Pencarian ini hanya bisa dilakukan pada data yang sudah
diurutkan (kecil  besar, atau besar  kecil)
Array L
54 48 37 32 29 16

0 1 2 3 4 5

Misal di cari nilai x = 16


Langkah 1 : i = 0 dan j = 5
Di cari indeks tengah (t) = (i+j) div 2 = (0 + 5) div 2 = 2

54 48 37 32 29 16

0 1 2 3 4 5
Bila L[2] ≠ 16

54 48 37 32 29 16

Di putuskan0apakah pencarian
1 dilakukan pada3bagian kiri atau
akan 2 4 kanan 5
Jika nilai pada indeks saat ini lebih besar dari yang dicari dilakukan pencarian pada bagian
kanan, sebaliknya pada bagian kiri.

Jika L[2] > 16 ?  true: 37 > 16


Maka pencarian akan dilakukan pada bagian kanan:
Sehingga : i = t + 1 = 3 dan j = 5 dan nilai t= (3 + 5) div 2 = 4

32 29 16

3 4 5
32 29 16

Apakah L[4] == 16 ?  false 3 4 5


Di putuskan apakah pencarian akan dilakukan pada bagian kiri
atau kanan
Jika nilai pada indeks saat ini lebih besar dari yang dicari
dilakukan pencarian pada bagian kanan, sebaliknya pada
bagian kiri.
L[4] > 16 = 29 > 16?  true
Maka pencarian dilakukan pada bagian kanan :

16

5
Apakah L[5] == 16 ?? TRUE.. Nilai ditemukan
Pencarian bagi dua : Contoh 2
Array L
54 48 37 32 29 16

0 1 2 3 4 5

Misal di cari nilai x = 54


Langkah 1 : i = 0 dan j = 5
Di cari indeks tengah (t) = (i+j) div 2 = 2

54 48 37 32 29 16

0 1 2 3 4 5
Bila L[2] ≠ 54

54 48 37 32 29 16

Di putuskan0apakah pencarian
1 dilakukan pada3bagian kiri atau
akan 2 4 kanan 5
Jika nilai pada indeks saat ini lebih besar dari yang dicari dilakukan pencarian pada bagian
kanan, sebaliknya pada bagian kiri.

Jika L[2] > 54 ?  false: 37 < 54


Maka pencarian akan dilakukan pada bagian kiri:
Sehingga : i = 0 dan j = t-1=1 dan nilai t= (1 + 0) div 2 = 0

54 48

0 1
Apakah L[1] == 54 ?  true
TRUE.. Nilai ditemukan

54

Anda mungkin juga menyukai