download

Matakuliah
Tahun
: T0456 / Algoritma dan Metode Object
Oriented Programming
: 2007
Algoritma Searching
Pertemuan 13
Learning Outcomes
Pada akhir pertemuan ini, diharapkan:
Mahasiswa dapat menjelaskan algoritma searching (squential, binary
dan interpolation)
Buku Referensi:
Algorithms in C++, Addison Wesley, 1992.
Websites:
http://www.deitel.com
3
Bina Nusantara
Outline Materi
•
•
•
•
•
Sequential search
Binary search
Interpolation search
Simulasi searching
Contoh progam searching
4
Bina Nusantara
Searching
Adalah proses mendapatkan (retrieve) information
berdasarkan kunci (key) tertentu dari sejumlah informasi
yang telah disimpan
Kunci (key) digunakan untuk melakukan pencarian
record yang diinginkan didalam suatu list
Bina Nusantara
Searching
 Single match
Siapa mahasiswa dengan Nim 0800123456
 Multiple match
Siapa saja yang mendapat nilai Algoritma >= 85
Bina Nusantara
Metode Searching
• Sequential Search
• Binary Search
• Interpolation Search
Bina Nusantara
Sequential Search
Merupakan teknik yang sederhana dan langsung dapat
digunakan pada struktur data baik array maupun linked-list.
Pencarian data secara urut mulai dari data pertama sampai
kunci yang dicari ditemukan atau sampai seluruh data telah
dicari dan tidak ditemukan
Dilakukan pada data yang tidak terurut
Bina Nusantara
Contoh Sequential Search
Nim
[0]2207023006
[1]2207023004
[2]2207023003
[3]2207023007
[4]2207023005
[5]2207023001
[6]2207023008
[7]2207023002
Bina Nusantara
Nama
Mulyadi
Willy Johan
Anthony Liberty
Ferry Santoso
Jaya Mulya
Budi Santoso
Indra Gunawan
M. Rudito W 3.44
IPK
2.94
3.15
2.78
3.37
2.93
3.01
3.56
Contoh Sequential Search
Kunci pencarian? 2207023007
NIM[0] == kunci?  tidak
NIM[1] == kunci?  tidak
NIM[2] == kunci?  tidak
NIM[3] == kunci?  ya  Ferry Santoso, 3.37
Bina Nusantara
Contoh Sequential Search
Kunci pencarian? 2207023010
NIM[0] == kunci?  tidak
NIM[1] == kunci?  tidak
NIM[2] == kunci?  tidak
NIM[3] == kunci?  tidak
NIM[4] == kunci?  tidak
NIM[5] == kunci?  tidak
NIM[6] == kunci?  tidak
NIM[7] == kunci?  tidak
Semua data telah di cari, kunci tidak ditemukan
Bina Nusantara
Algoritma Sequential search
int SequentialSearch(int *data, int N, int Key)
{
for(int i=0; i<N; i++)
{
if(key == data[i])
return(i)
}
return(-1);
}
Bina Nusantara
Binary Search
Pencarian data dimulai dari pertengahan data yang telah
terurut
Jika kunci pencarian lebih kecil daripada kunci posisi
tengah, maka kurangi lingkup pencarian pada separuh data
pertama
Begitu juga sebaliknya jika kunci pencarian lebih besar
daripada kunci tengah, maka pencarian ke separuh data
kedua
Bina Nusantara
Binary Search
Teknik Binary Search hanya dapat digunakan pada sorted
array, yaitu array yang elemen-elemennya telah terurut.
Bina Nusantara
Contoh Simulasi Binary search
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
Nim
2207023010
2207023020
2207023030
2207023040
2207023050
2207023060
2207023070
2207023080
Nama
Mulyadi
Willy Johan
Anthony Liberty
Ferry Santoso
Jaya Mulya
Budi Santoso
Indra Gunawan
M. Rudito W
IPK
2.94
3.15
2.78
3.37
2.93
3.01
3.56
3.44
Key = 2207023060
No
low
high
1
2
0
4
7
7
Bina Nusantara
mid
(0+7)/2=3
(4+7)/2=5
Keterangan
Data[3]= 2207023040 <Key, maka low=mid+1
Data[5]= 2207023060 == Key, ketemu pada index = 5
Contoh Simulasi Binary search
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
Nim
2207023010
2207023020
2207023030
2207023040
2207023050
2207023060
2207023070
2207023080
Nama
Mulyadi
Willy Johan
Anthony Liberty
Ferry Santoso
Jaya Mulya
Budi Santoso
Indra Gunawan
M. Rudito W
IPK
2.94
3.15
2.78
3.37
2.93
3.01
3.56
3.44
Key = 2207023022
No
low
high
1
2
3
4
0
0
2
2
7
2
2
1
Bina Nusantara
mid
(0+7)/2=3
(0+2)/2=1
(2+2)/2=2
Keterangan
Data[3]= 2207023040 > Key, maka high=mid-1
Data[1]= 2207023020 < Key, maka low=mid+1
Data[2]= 2207023030 > Key, maka high=mid-1
Karena low > high, maka data Key tidak ada
Algoritma Binary search
int BinarySearch(int *data, int N, int Key)
{
int low, high, mid;
low = 0;
high = N-1;
while(low <= high )
{
mid =(low + high)/2;
if( data[mid] == Key )
return(mid);
else if( data[mid] < Key )
low = mid + 1;
else
high = mid - 1;
}
return(-1);
}
Bina Nusantara
Interpolation Search
Pencarian dilakukan pada posisi relatif kunci terhadap data
yang terurut
metode ini didasari pada proses pencarian nomor telepon
pada buku telepon
Bina Nusantara
Interpolation Search
Rumus:
kunci – data[low]
posisi = -------------------------- x (high – low) + low
data[high] – data[low]
Bina Nusantara
Contoh Interpolation Search
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
Bina Nusantara
Kd
025
034
041
056
063
072
088
096
Judul
The C++ programing
Mastering Delphi 6
Professionl C#
Pure Corba
Advanced JSP
Duration Calculus
Algebra Mastering
Visual Basic Prof 6
Penulis
Bjarne Strous
Marco Cantu
Simon Robin
Fintan Balron
David Geary
Zhou Cao Zen
Zohar Manna
F. P. Brooz
Contoh Interpolation Search
Kunci pencarian? 088
Low = 0, high = 7
Posisi = (088-025)/(096-025)x(7-0)+0 = 6
Buku[6]==kunci?
 ya
 Algebra Mastering
 Zohar Manna
Bina Nusantara
Contoh Interpolation Search
Kunci pencarian? 060
Low = 0, high = 7
Posisi = (060-025)/(096-025)x(7-0)+0 = 3
Buku[3]==kunci?
 tidak
Low = 4, high = 7
Kode tidak ada dalam data
Bina Nusantara
Latihan Interpolation Search
List k terdiri dari 100 record.
Kunci terrendah 220 dan tertinggi 980.
Target 743.
Dimanakah perkiraan posisi target?
Bina Nusantara
Algoritma Interpolation Search
int InterPolSearch(int *data, int N, int Key)
{
int low, high, pos;
float tmp;
low = 0;
high = N-1;
while(data[low] <= data[high] )
{
tmp = (Key-data[low])/(data[high]-data[low])
pos = tmp*(high-low) + low;
if( data[pos] == Key )
return(pos);
else if( data[pos] < Key )
low = pos + 1;
else
high = pos - 1;
}
return(-1);
}
Bina Nusantara
Diskusi dan Tanya Jawab
Latihan soal
25
Bina Nusantara