SEARCHING
mengerti masalah :
mencari data yang di inginkan dari sekumpulan data dengan Binary Search yaitu dengan cara mencari data dari sekumpulan data yang di ingin kan dengan cara membagi sekumpulan data menjadi 2, di setiap pencarian data, sehingga di dapatkkan data yang di inginkan.
percobaan data :
disini data berupa data urut
misal,
data A => 2 3 4 5 6 7
-------------------
indek => 0 1 2 3 4 5
key = 4
maka data "4" di temukan pada posisi indek ke 2
analisis permasalahan :
1. syarat utama data adalah berupa data yang urut.
2. memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat besar ukurannya.
3. Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian secara berulang-ulang sampai data ditemukan atau sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan data tidak ditemukan).
cara mencari data :
1.Mula-mula diambil posisi awal = 1 dan posisi akhir = N
2.Cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2
3.Data yang dicari dibandingkan dengan data tengah.
4.Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah – 1.
5.Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
6.Demikian seterusnya sampai data tengah sama dengan yang dicari.
1.Mula-mula diambil posisi awal = 1 dan posisi akhir = N
2.Cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2
3.Data yang dicari dibandingkan dengan data tengah.
4.Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah – 1.
5.Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
6.Demikian seterusnya sampai data tengah sama dengan yang dicari.
algoritma :
function pencarianBiner(input aray : larik; kunci, low, high : integer) : integer
Deklarasi
ketemu : boolean
i, middle : integer
Deskripsi
ketemu <- false
while (low <= high) and (not ketemu) do
middle <- (low+high) div 2
if (kunci = aray[middle]) then ketemu <- true { data pencarian = data di tengah }
else if (kunci < aray[middle]) then high <- middle – 1 {data akan dicari lagi di sebelah kiri}
else low <- middle + 1 {data akan dicari lagi di sebelah kanan}
endif
endwhile
if ketemu then pencarianBiner := middle
else pencarianBiner := -1;
endif
C++
#include <iostream>
#define UKURAN 15
using namespace std;
void cetakBaris(int b[], int rendah, int mid, int tinggi)
{ int i;
for (i=0; i<=UKURAN-1; i++)
if (i<rendah || i>tinggi) cout << " ";
else if (i==mid) cout << "*" << b[i]<<" ";
else cout << b[i] << " ";
cout << "\n";
}
int pencarianBiner(int b[], int kunciPencarian, int rendah, int tinggi )
{ int i, middle;
while (rendah <= tinggi) {
middle = (rendah+tinggi) / 2;
cetakBaris(b, rendah, middle, tinggi);
if (kunciPencarian == b[middle])
return middle;
else if (kunciPencarian < b[middle])
tinggi = middle - 1;
else rendah = middle + 1;
}
return -1;
}
main() {
int a[UKURAN]={1, 2, 8, 25, 30, 49, 50, 55, 60, 61, 68, 70, 72, 84,
90}, i, kunci, hasil;
for (i=0; i<=UKURAN-1; i++){
cout<<a[i]<<" ";
}
cout<<endl<<endl;
cout << "Masukkan bilangan yg ingin dicari index nya : ";
cin >> kunci;
hasil=pencarianBiner(a,kunci,0,UKURAN-1);
if (hasil != -1) cout << kunci
<< " ditemukan pada index : "<< hasil;
else
cout << kunci << " tidak ditemukan";
return 0;
}
output
No comments:
Post a Comment