0% menganggap dokumen ini bermanfaat (0 suara)
170 tayangan36 halaman

Algoritma Dan Pemrograman - Searching (Pencarian)

Dokumen tersebut membahas tentang konsep searching pada array dengan menggunakan metode sequential search dan binary search. Secara khusus dijelaskan tentang sequential search pada array tidak terurut dan terurut, serta penggunaan sentinel pada sequential search untuk mempermudah proses pencarian.

Diunggah oleh

fadilah humairi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
170 tayangan36 halaman

Algoritma Dan Pemrograman - Searching (Pencarian)

Dokumen tersebut membahas tentang konsep searching pada array dengan menggunakan metode sequential search dan binary search. Secara khusus dijelaskan tentang sequential search pada array tidak terurut dan terurut, serta penggunaan sentinel pada sequential search untuk mempermudah proses pencarian.

Diunggah oleh

fadilah humairi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 36

Searching

“Only the curious have something to find.”


Materi
• Konsep searching
• Sequential /Linear Search
• Sequential search pada array tidak berurut
• Sequential search pada array berurut
• Sequential search menggunakan sentinel
• Binary Search
• Sequential Search vs Binary Search
• Latihan

2
Konsep searching
• Pencarian (searching) adalah proses yang fundamental dalam
pemrograman
• Proses pencarian adalah menemukan data tertentu di dalam
sekumpulan data yang bertipe sama
• Pada kuliah ini akan dikhususkan pada data yang berstruktur
array

3
Tinjauan Singkat Array
• Array merupakan tipe data terstruktur.
• Setiap elemen array dapat dirujuk melalui indeksnya
• Karena elemen disimpan secara berurutan, indeks array harus
berupa tipe yang juga memiliki keterurutan (ada successor dan
predecessor) misalnya integer, character, atau enumeration
• Jika indeks array adalah integer maka keterurutan indeks sesuai
dengan urutan integer
• Jika indeks array adalah character maka keterurutan indeks sesuai
dengan urutan character
• Jika indeks array berupa enumeration, maka keterurutan indeks
sesuai dengan urutan elemen dalam enumeration

4
Tinjauan Singkat Array
KAMUS
D: array [1..11] of integer
Kar: array [1..8] of character
Const N : integer = 5 {jumlah siswa}
Type Data = record <Nama: string, Usia: integer>
DataSiswa : array[1..N] of Data

21 36 8 7 10 36 68 32 12 10 36
Array Integer 1 2 3 4 5 6 7 8 9 10 11

k m t a f m * #
Array Character 1 2 3 4 5 6 7 8

1 Ali 18
2 Tono 24
Array Record 3 Amir 30 5
4 Tuti 21
5 Yani 22
Persoalan Pencarian 1
• Misal terdapat suatu Array A yang sudah terdefinisi elemen-
elemennya. X adalah suatu elemen yang bertipe sama dengan
elemen Array A. Tentukan apakah X terdapat di dalam Array A.
Jika ditemukan, tulis pesan “X ditemukan”, sebaliknya jika
tidak ditemukan,tulis pesan “X tidak ditemukan”.
• Contoh:

21 36 8 7 10 36 68 32 12 10 36
1 2 3 4 5 6 7 8 9 10 11

• Misal X = 68, maka output yang dihasilkan adalah “68


ditemukan”
• Bila X = 100, maka output yang dihasilkan adalah “100 6
tidak ditemukan”.
Persoalan Pencarian 2
• Misal terdapat suatu Array A, yang sudah terdefinisi elemen-
elemennya. X adalah suatu elemen yang bertipe sama dengan
elemen Array A. Tentukan indeks Array A yang elemennya
sama dengan X. Simpan indeks tersebut dalam variabel Y. Jika
X tidak terdapat di dalam Array A, isikan Y dengan nilai 0.
• Contoh:

21 36 8 7 10 36 68 32 12 10 36
1 2 3 4 5 6 7 8 9 10 11

• Misal X = 68, maka Y = 7.


• Bila X = 100, maka Y = 0.
7
Persoalan Pencarian 3
• Misal terdapat suatu Array A yang sudah terdefinisi elemen-
elemennya. X adalah suatu elemen yang bertipe sama dengan
elemen Array A. Tentukan apakah X terdapat di dalam Array A.
Jika X ditemukan, maka variabel boolean misalnya ketemu
diisi nilai true. Jika tidak, ketemu diisi nilai false.
• Contoh:

21 36 8 7 10 36 68 32 12 10 36
1 2 3 4 5 6 7 8 9 10 11

• Misal X = 68, maka ketemu = true


• Bila X = 100, maka ketemu = false
8
Penegasan Persoalan
• Apakah ada duplikasi data?
• Apabila X yang dicari jumlahnya lebih dari satu di dalam Array A,
maka hanya X yang pertama kali ditemukan yang dirujuk. Proses
pencarian dihentikan setelah X pertama ditemukan atau X yang
dicari tidak ada
• Contoh:
21 36 8 7 10 36 68 32 12 10 36
1 2 3 4 5 6 7 8 9 10 11

• Terdapat tiga buah nilai 36


• Bila X = 36, maka:
• Persoalan 1, hasilnya “36 ditemukan”
• Persoalan 2, hasilnya Y = 2 9
• Persoalan 3, hasilnya ketemu = true
Sequential /Linear Search
• Disebut juga Pencarian Beruntun
• Sequential Search membandingkan setiap elemen array satu
per satu secara beruntun, mulai dari elemen pertama, sampai
elemen yang dicari ditemukan atau sampai seluruh elemen
sudah diperiksa.
• Terdapat 2 macam sequential search:
• sequential search pada array tidak terurut
• sequential search pada array terurut

10
Sequential search pada array
tidak terurut
• Pencarian dilakukan dengan memeriksa setiap elemen Array
mulai dari elemen pertama sampai elemen yang dicari ketemu
atau sampai seluruh elemen telah diperiksa.
13 16 14 21 76 21
1 2 3 4 5 6

• Misal nilai yang dicari adalah: X = 21. maka elemen


yang diperiksa: 13, 16, 14, 21 (ditemukan!). Indeks
Array yang dikembalikan: Y = 4
• Misal nilai yang dicari adalah: X = 13. maka elemen
yang diperiksa: 13 (ditemukan!). Indeks Array yang
dikembalikan: Y = 1
• Misal nilai yang dicari adalah: X = 15. maka elemen
yang diperiksa: 13, 16, 14, 21, 76, 21 (tidak 11
ditemukan!). Indeks Array yang dikembalikan: Y = 0
Sequential search pada array
tidak terurut
Type Larik = array [1..100] of integer;
Procedure SequentialSearch1(A:Larik; N:integer;
X:integer; var Y:integer);
Var
i:integer;
Begin
i:=1;
while (i<N) and (A[i] <> X) do i:= i + 1;
if (A[i] <> X) then Y:=0
else Y:=i;
End;

12
Sequential search pada array
tidak terurut versi Boolean
Type Larik = array [1..100] of integer;
Procedure SequentialSearch2(A:Larik; N:integer;
X:integer; var Y:integer);
Var
i:integer;
ketemu:boolean;
Begin
i:=1;
ketemu:=false;
while (i<=N) and (not ketemu) do
if A[i] = Y then ketemu:=true else i := i + 1;
if ketemu then Y:=i
else Y:=0;
End; 13
Sequential search pada array
terurut
• Apabila array sudah terurut, maka proses pencarian dapat
dibuat lebih efisien.
• terurut dari nilai terkecil ke nilai terbesar, yakni untuk setiap
I = 1..N, Nilai [I-1] < Nilai [I]
• terurut dari nilai terbesar ke nilai terkecil, yakni untuk setiap
I = 1..N, Nilai [I-1] > Nilai[I]
• Caranya yaitu dengan menghilangkan langkah pencarian yang
tidak perlu
• Yaitu bila nilai elemen array yang diperiksa sudah melewati nilai X
yang dicari

14
Sequential search pada array
terurut (dari kecil ke besar)
Type Larik = array [1..100] of integer;
Procedure Sequentialsearch3(A:Larik; N:integer;
X:integer; var Y:integer);
Var
i:integer;
Begin
i:=1;
while (i<N) and (A[i] < X) do i:= i + 1;
if (A[i] = X) then Y:=i
else Y:=0;
End;

15
Latihan
• Buatlah prosedur pencarian beruntun pada array terurut dari
nilai terbesar ke nilai terkecil.

16
Sequential search
menggunakan sentinel
• Merupakan pengembangan dari sequential search
• Sentinel adalah elemen fiktif yang ditambahkan sesudah
elemen terakhir dari array
• Jadi jika elemen terakhir array adalah A[N], maka sentinel
dipasang pada elemen A[N+1]
• Sentinel nilainya sama dengan nilai data yang dicari
• Sehingga proses pencarian selalu menemukan data yang dicari
• Periksa kembali letak data tersebut ditemukan, apakah:
• Di antara elemen array sesungguhnya ( dari A[1] sampai A[N] )
• Pada elemen fiktif A[N+1] yang berarti sesungguhnya X tidak ada di
dalam array A

17
Sequential search
menggunakan sentinel
• Sangat efektif terutama bila pencarian dilakukan untuk
menyisipkan elemen (X) yang belum terdapat pada array
• Jika X tidak ditemukan, maka sentinel tersebut sekaligus sudah
ditambahkan
• Programmer harus waspada dengan pendefinisian batas indeks
array, tidak boleh menambahkan data melebihi rentang indeks

18
Sequential search
menggunakan sentinel
13 16 14 21 76 21
1 2 3 4 5 6

• Misal elemen yang dicari adalah X=21. maka, tambahkan 21


sebagai sentinel di A[N+1]:
13 16 14 21 76 21 21
1 2 3 4 5 6 7

• Elemen yang diperiksa selama pencarian: 13,


16, 14, 21. Indeks array yang dikembalikan: 4.
karena 4 ≠ N+1, berarti X = 21 terdapat pada
Array semula 19
Sequential search
menggunakan sentinel
13 16 14 21 76 21
1 2 3 4 5 6

• Misal elemen yang dicari adalah X=15. maka, tambahkan 15


sebagai sentinel di A[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, 15. Indeks array yang
dikembalikan: 7. karena 7 = N+1, berarti X =
15 tidak terdapat pada Array semula 20
Sequential search
menggunakan sentinel
Type Larik = array [1..100] of integer;
Procedure SequentialSearchSentinel(A:Larik;
N:integer; X:integer; var Y:integer);
Var
i:integer;
Begin
A[N+1]:=X;
i:=1;
while (A[i]<>X) do i:= i + 1;
if (i < N+1) then Y:=i
else Y:=0;
End;
21
Catatan tentang Sequential
search
• Seringkali algoritma Sequential search tidak dinyatakan sebagai
prosedur, namun direalisasikan sebagai fungsi boolean atau fungsi
integer yang mengembalikan indeks array.
• Latihan: Ubahlah prosedur pencarian sequential tersebut menjadi
fungsi boolean dan integer!
• Secara umum, Sequential search lambat. Waktu pencarian sebanding
dengan jumlah elemen array. Pada kasus X tidak terdapat dalam
Array, kita harus memeriksa seluruh elemen array.
• Bayangkan bila array berukuran 100.000 elemen
• Bila satu pemeriksaan elemen array membutuhkan waktu 0,01 detik, maka
untuk 100.000 kali pemeriksaan membutuhkan waktu 1000 detik atau 16,7
menit!
• Algoritma sequential search tidak praktis untuk data berukuran besar
• Algoritma yang lebih cepat dari sequential search adalah algoritma 22
binary search
Binary Search
• Disebut juga Pencarian Biner.
• Pencarian biner hanya bisa diterapkan pada sekumpulan data
yang sudah terurut (terurut menaik atau menurun).
• Contoh data yang sudah terurut banyak ditemukan pada
kehidupan sehari-hari:
• Data kontak telepon di HP terurut dari nama A sampai Z
• Data pegawai diurut berdasarkan nomor induk pegawai dari kecil
ke besar
• Data mahasiswa diurutkan berdasarkan NIM
• Kata-kata di dalam kamus diurut dari A sampai Z
• Keuntungan data yang terurut adalah memudahkan pencarian.
23
Analogi Binary Search
• Misal untuk mencari arti kata tertentu dalam kamus Bahasa
Inggris, kita tidak perlu membuka kamus itu dari halaman awal
sampai akhir satu per satu:
• Pertama Kamus tersebut kita bagi dua di tengah-tengah.
• Jika yang dicari tidak ada di pertengahan, kita cari lagi di belahan
kiri atau kanan dengan membagi dua lagi belahan tersebut.
• Begitu seterusnya sampai kata yang dicari ketemu.

24
Konsep Binary Search
• Kita memerlukan dua buah indeks array yaitu indeks terkecil
dan indeks terbesar (Misal A dan B). Umumnya A=1 dan B=N
• Langkah 1: bagi dua elemen array pada elemen tengah.
Elemen tengah adalah elemen dengan indeks K = (A+B) div 2
• Elemen tengah array L[K] membagi array membagi dua bagian,
yaitu bagian kiri Array L[A..K-1] dan bagian kanan Array L[K+1..B]
• Langkah 2: periksa apakah L[K] = X. Jika Ya, maka pencarian
dihentikan (data ditemukan).
• Jika tidak, jika L[K] < X maka pencarian dilakukan pada larik
bagian kiri.
• Jika L[K] > X maka pencarian dilakukan pada larik bagian kanan.
• Langkah 3: Ulangi langkah 1 sampai X ditemukan atau A > B
25
(ukuran array sudah nol!)
Ilustrasi Binary Search 1
• Misal ada array L dengan 8 elemen yang terurut menurun

81 76 21 18 16 13 10 7
A=1 2 3 4 5 6 7 B=8

• Misal yang dicari adalah X = 18


• Langkah 1: A=1 dan B=8. maka indeks elemen tengah
K = (1+8) div 2 = 4

81 76 21 18 16 13 10 7
kiri kanan
A=1 2 3 4 5 6 7 B=8

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


26
Ilustrasi Binary Search 2
• Misal ada array L dengan 8 elemen yang terurut menurun

81 76 21 18 16 13 10 7
A=1 2 3 4 5 6 7 B=8

• Misal yang dicari adalah X = 16


• Langkah 1: A=1 dan B=8. maka indeks elemen tengah
K = (1+8) div 2 = 4

81 76 21 18 16 13 10 7
kiri kanan
A=1 2 3 4 5 6 7 B=8

• Langkah 2: L[4] = 16? Tidak! Putuskan pencarian akan


27
dilakukan di bagian kiri atau kanan dengan pemeriksaan:
• L[4] > 16 ? Ya! Lakukan pencarian di larik bagian kanan
• A = K+1 = 5 dan B = 8
16 13 10 7
A=5 6 7 B=8
• Langkah 1: Indeks elemen tengah K = (5+8) div 2 = 6

16 13 10 7
kiri A=5 6 7 B=8 kanan

• Langkah 2: L[6] = 16? Tidak! Putuskan pencarian akan


dilakukan di bagian kiri atau kanan dengan pemeriksaan:
• L[6] > 16 ? Tidak! Lakukan pencarian di larik bagian kiri
28
• A = 5 (tetap) dan B = 5
16
5
• Langkah 1: Indeks elemen tengah K = (5+5) div 2 =5
16
5
• Langkah 2: L[5] = 16? Ya! (X ditemukan, pencarian dihentikan)

29
Ilustrasi Binary Search 3
• Misal ada array L dengan 8 elemen yang terurut menurun

81 76 21 18 16 13 10 7
A=1 2 3 4 5 6 7 B=8

• Misal yang dicari adalah X = 100


• Langkah 1: A=1 dan B=8. maka indeks elemen tengah
K = (1+8) div 2 = 4

81 76 21 18 16 13 10 7
kiri kanan
A=1 2 3 4 5 6 7 B=8

• Langkah 2: L[4] = 100? Tidak! Putuskan pencarian akan


30
dilakukan di bagian kiri atau kanan dengan pemeriksaan:
• L[4] > 100 ? Tidak! Lakukan pencarian di larik bagian kiri
• A = 1 dan B = K-1 = 3
81 76 21
A=1 2 B=3
• Langkah 1: Indeks elemen tengah K = (1+3) div 2 = 2

81 76 21
kiri kanan
A=1 2 B=3

• Langkah 2: L[2] = 100? Tidak! Putuskan pencarian akan


dilakukan di bagian kiri atau kanan dengan pemeriksaan:
• L[2] > 100 ? Tidak! Lakukan pencarian di larik bagian kiri

31
• A = 1 (tetap) dan B = K-1 =1
81
1
• Langkah 1: Indeks elemen tengah K = (1+1) div 2 = 1
81
1
• Langkah 2: L[1] = 100? Tidak! Putuskan pencarian akan
dilakukan di bagian kiri atau kanan dengan pemeriksaan:
• L[1] > 100 ? Tidak! Lakukan pencarian di larik bagian kiri dengan
A=1 dan B= K – 1 = 0
• Karena A > B maka tidak ada lagi bagian array yang tersisa,dengan
demikian, X tidak ditemukan di dalam array. Pencarian dihentikan 32
Latihan
• Buatlah prosedur/fungsi binary search dalam bahasa Pascal
berdasarkan konsep binary search yang sudah dijelaskan!

33
Catatan tentang Binary search
• Pada setiap kali pencarian, array dibagi dua menjadi dua
bagian yang berukuran sama (atau beda selisih 1 elemen)
• Pada setiap pembagian, elemen tengah K diperiksa apakah
sama dengan X.
• Pada worst case scenario, yaitu pada kasus X tidak terdapat di
dalam array, array dibagi sejumlah ²log(N) kali, sehingga jumlah
pemeriksaan yang dilakukan juga sebanyak ²log(N) kali.
• Pada contoh x=100, pembagian array yang dilakukan adalah
²log(8) =3 kali. Jumlah pemeriksaan elemen array juga 3 kali.
• Untuk data terurut, algoritma binary search lebih cepat
dibandingkan sequential search

34
Sequential Search vs Binary
Search
• Misal untuk kasus nilai X tidak ditemukan dalam array:
• Untuk array berukuran 256 elemen:
• sequential search melakukan pembandingan elemen array sebanyak 256 kali,
• binary search melakukkan pembandingan elemen array sebanyak ²log(256) = 8 kali.
• Untuk array berukuran 1024 elemen:
• sequential search melakukan pembandingan elemen array sebanyak 1024 kali,
• binary search melakukkan pembandingan elemen array sebanyak ²log(1024) = 10 kali.
• Untuk array berukuran N elemen:
• sequential search melakukan pembandingan elemen array sebanyak N kali,
• binary search melakukan pembandingan elemen array sebanyak ²log(N) kali.
• Karena ²log(N) < N untuk N yang besar, maka algoritma binary search lebih
cepat daripada algoritma sequential search
• Sehingga Algoritma binary search lebih disukai untuk mencari data pada array
terurut
• Namun untuk data yang tidak terurut, hanya dapat menggunakan algoritma
35
sequential search
Terima Kasih

36

Anda mungkin juga menyukai