Algoritma pencarian digunakan untuk mencari item dengan sifat tertentu pada suatu kumpulan item. Terdapat dua metode utama yaitu pencarian secara linear dan biner. Pencarian secara linear memeriksa setiap item secara berurutan, sedangkan pencarian biner memecah kumpulan menjadi bagian-bagian untuk mempercepat proses pencarian.
2. METODE PENCARIAN (SEARCH METHODS)
LINEAR SEARCH
Sering dikenal dengan “pencarian berurutan” / “sequential searching”
Metode pencarian yang paling sederhana, pencarian dalam kumpulan data yang
masih acak.
BINARY SEARCH
atau “pencarian interval sebagian” / “half-interval searching”
Metode pencarian dalam kumpulan data yang telah diurutkan (tidak acak).
3. LINEAR SEARCH
PRINSIP DAN METODE
Data yang ada dibandingkan satu per satu secara
berurutan dengan data yang dicari.
Pada saat data yang dicari ditemukan, maka proses
pencarian selesai.
Jika belum ditemukan, maka pencarian diteruskan
sampai seluruh data dibandingkan.
CONTOH
Diketahui : nilai_dicari = 5
var_array = [10, 8, 15, 9, 5, 6, 2, 3]
Pertanyaan : Dimanakah posisi 5 pada var_array ?
4. LINEAR SEARCH
10 8 15 9 5 6 2 3
Apakah var_array[indeks] == nilai_dicari …..?
0 1 2 3 4 5 6 7
indek
s
Start
End
Tidak
Ya Posisi 5 =
4
6. LINEAR SEARCH : CONTOH <LINEAR_CARIPOSISI.CPP>
# I N C L U D E < I O S T R E A M . H >
# I N C L U D E < C O N I O . H >
I N T C A R I ( I N T D A T A [ ] , I N T
N , I N T N I L A I )
{
I N T P O S , I ;
P O S = - 1 ;
I = 0 ;
W H I L E ( I < N - 1 )
{
I F ( D A T A [ I ] = = N I L A I )
{
P O S = I ;
B R E A K ;
}
I + + ;
}
void main()
{
int data_array[8] = {10,8,15,9,5,6,2,3} ;
int nilai_dicari = 5 ;
int posisi ;
posisi = cari(data_array, 8, nilai_dicari);
if(posisi == -1)
cout <<"Nilai " <<nilai_dicari
<<" tidak ditemukan" ;
else
cout <<"Nilai " <<nilai_dicari
<<" ada di posisi ke-" <<posisi ;
getch();
}
Page
1
Page
2
7. BINARY SEARCH
PRINSIP DAN METODE
1. Data dibagi menjadi 2 bagian (dengan jumlah yang sama
atau berbeda 1, jika jumlah semua datanya ganjil).
2. Pencarian selalu dimulai pada bagian pertama.
3. Data yang dicari dibandingkan dengan elemen
terakhir pada bagian pertama.
Ada 3 kemungkinan :
Data yang dicari == elemen terakhir, maka data telah
ditemukan
Data yang dicari < elemen terakhir, maka pencarian
diteruskan pada bagian pertama (dengan cara membuat bagian
pertama menjadi 2 bagian lagi, dan langkah selanjutnya sama seperti mengulangi
langkah no 3)
Data yang dicari > elemen terakhir, maka pencarian
diteruskan pada bagian kedua (selanjutnya sama seperti mengulangi
langkah no 3, hanya saja dimulai pada bagian kedua)
8. BINARY SEARCH
CONTOH
Diketahui : nilai_dicari = 5
data = [3, 5, 7, 9, 10, 11, 15, 18, 20]
Pertanyaan : Dimanakah posisi 5 pada data ?
9. 5 =
5
BINARY SEARCH
3 5 7 9 10 11 15 18 20
11 15 18 203 5 7 9 10
5
3 5 7 9 10
3 5 7
5 < 10
Nilai yang
dicari
5 < 7
0 1 2 3 4 5 6 7 8
indek
s
Ditemukan nilai 5 di posisi
10. BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>
# I N C L U D E < I O S T R E A M . H >
# I N C L U D E < C O N I O . H >
I N T C A R I ( I N T D A T A [ ] , I N T
N , I N T N I L A I )
{
I N T P O S I S I ;
I N T K I R I _ A K H I R ,
K A N A N _ A K H I R , B A G I A N ,
I N D E K S _ A K H I R ;
P O S I S I = - 1 ;
K I R I _ A K H I R = ( N / 2 ) ;
K A N A N _ A K H I R = N - 1 ;
B A G I A N = 1 ;
W H I L E ( B A G I A N < = 2 )
{
I F ( B A G I A N = = 1 )
I N D E K S _ A K H I R =
K I R I _ A K H I R ;
E L S E I F ( B A G I A N = = 2 )
if(nilai == data[indeks_akhir])
{
posisi = indeks_akhir;
break;
}
else if(nilai < data[indeks_akhir])
{
if(bagian==1)
{
n=kiri_akhir;
kiri_akhir = (n / 2) ;
kanan_akhir = n ;
}
else
{
n=kanan_akhir;
kiri_akhir =
n-(((n - (kiri_akhir+2))+2)/2) ;
kanan_akhir = n ;
}
bagian = 1;
}
else if(nilai > data[indeks_akhir])
bagian = 2;
}
return posisi;
}
Page
1
Page
2
11. BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>
void main()
{
int data[] = {3,5,7,9,10,11,15,18,20} ;
int dicari, posisi ;
cout <<"Masukkan nilai : ";
cin >>dicari;
posisi = cari(data, 9, dicari);
if(posisi == -1)
cout <<"Nilai " <<dicari
<<" tidak ditemukan" ;
else
cout << "Nilai " << dicari
<<" ada di posisi ke-" <<posisi ;
getch();
}
Page
3
12. T U G A S
Tulis beberapa program dari slide Chapter 2 (Part 2) ini dan coba
jalankan, program tersebut dapat ditemukan pada slide yang judulnya
terdapat kata Contoh dan atau Latihan.
Setelah semua program sukses dijalankan, copy file .cpp dan .exe ke
satu folder yang bernamakan [C2P2-KELAS-NAMA-NIM], contoh
KELAS : 1X
NIM : 2011050505
NAMA : EMAN SURYAMAN JUNAEDI
C2P2-1X-EMAN SURYAMAN JUNAEDI-2011050505
Kumpulkan ke Ketua Kelas, Folder yang berisi file .cpp dan .exe anda.
Ketua Kelas mengumpulkan semua latihan mahasiswa pada
pertemuan/perkuliahan selanjutnya dalam 1 Folder untuk kelasnya tersebut.
Namakan Foldernya dengan [C2P2-KELAS].
C2P2-1X
13. T A N T A N G A N
Dari contoh program “binary_cariposisi.cpp” diatas, coba
buat dengan logika dan algoritma versi sendiri:
Program dapat dijalankan dengan baik (tidak ada error), dan kode
program lebih sedikit dibandingkan dengan kode program yang ada
pada contoh diatas “binary_cariposisi.cpp”. Mendapatkan 100 untuk
nilai UTS.
Program dapat dijalankan dengan baik (tidak ada error), dengan
menggunakan algoritma yang beda pada contoh program diatas
“binary_cariposisi.cpp”. Mendapatkan 90 untuk nilai UTS.
Kumpulkan langsung pada pertemuan selanjutnya (KALAU
BISA LANGSUNG DIBAHAS).
14. BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>
# I N C L U D E < I O S T R E A M . H >
# I N C L U D E < C O N I O . H >
I N T C A R I ( I N T D A T A [ ] , I N T
N , I N T N I L A I )
{
I N T P O S I S I ;
I N T K I R I _ A K H I R ,
K A N A N _ A K H I R , B A G I A N ,
I N D E K S _ A K H I R ;
P O S I S I = - 1 ;
K I R I _ A K H I R = ( N / 2 ) ;
K A N A N _ A K H I R = N - 1 ;
B A G I A N = 1 ;
W H I L E ( B A G I A N < = 2 )
{
I F ( B A G I A N = = 1 )
I N D E K S _ A K H I R =
K I R I _ A K H I R ;
E L S E I F ( B A G I A N = = 2 )
if(nilai == data[indeks_akhir])
{
posisi = indeks_akhir;
break;
}
else if(nilai < data[indeks_akhir])
{
if(bagian==1)
{
n=kiri_akhir;
kiri_akhir = (n / 2) ;
kanan_akhir = n ;
}
else
{
n=kanan_akhir;
kiri_akhir =
n-(((n - (kiri_akhir+2))+2)/2) ;
kanan_akhir = n ;
}
bagian = 1;
}
else if(nilai > data[indeks_akhir])
bagian = 2;
}
return posisi;
}
Page
1
Page
2
15. BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>
void main()
{
int data[] = {3,5,7,9,10,11,15,18,20} ;
int dicari, posisi ;
cout <<"Masukkan nilai : ";
cin >>dicari;
posisi = cari(data, 9, dicari);
if(posisi == -1)
cout <<"Nilai " <<dicari
<<" tidak ditemukan" ;
else
cout << "Nilai " << dicari
<<" ada di posisi ke-" <<posisi ;
getch();
}
Page
3