Binary search
Proses pencarian Binary search hanya dapat dilakukan pada kumpulan data yang
sudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan diolah, data
yang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar dari data
yang dicari maka akan dilakukan pembagian data menjadi dua bagian. Pencarian
biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar daripada
posisi akhir.
Prinsip dari Binary search dapat dijelaskan sebagai berikut :
a. Mula-mula diambil posisi awal 0 dan posisi akhir = N-1, kemudian dicari posisi
data tengah dengan rumus (posisi awal + posisi akhir) / 2. Kemudian data yang
dicari dibandingkan dengan data tengah.
b. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama
dengan posisi tengah –1.
c. Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama
dengan posisi tengah +1.
d. Jika data sama, berarti data ditemukan.
Contoh:
Misalnya data yang dicari 17 (A=awal, T=tengah, R=akhir):
0 1 2 3 4 5 6 7 8
3 9 11 12 15 17 23 31 35
A T R
Karena 17 > 15 (data tengah), maka: awal = tengah + 1
0 1 2 3 4 5 6 7 8
3 9 11 12 15 17 23 31 35
A T R
Karena 17 < 23 (data tengah), maka: akhir = tengah – 1
0 1 2 3 4 5 6 7 8
3 9 11 12 15 17 23 31 35
A=T=R
Karena 17 = 17 (data tengah), maka KETEMU dan proses berhenti.
contoh program :
import java.io.*;
public class searchbin2 {
public int biner(int b[],int pencarian,int low,int high)
{
int i, middle;
while (low<=high)
{
middle=(low+high)/2;
if(pencarian==b[middle]) return middle;
else if(pencarian<b[middle]) high=middle-1;
else low=middle+1;
}
return -1;
}
private static Object Interger;
public static void main (String[] args)throws IOException{
BufferedReader bilangan=new BufferedReader (new InputStreamReader(System.in));
int tanda=0;
int[] angka=new int[5];
int hasil,x;
searchbin2 bin=new searchbin2 ();
System.out.println(" Masukkan Data : ");
System.out.println("=================");
for(int i = 0;i<angka.length;i++)
{
System.out.println(" Masukkan Data ke "+i+" = ");
angka[i]=Integer.parseInt(bilangan.readLine());
}
System.out.println("Angka Yang Dicari = ");
int cari=Integer.parseInt(bilangan.readLine());
hasil=bin.biner(angka,cari,0,angka.length-1);
if (hasil>=0)
System.out.println("Angka Yang Dicari di data ke : "+(hasil+1));
else
System.out.println("Angka yang di cari gak ada dalam daftar ");
}
}}
Proses pencarian Binary search hanya dapat dilakukan pada kumpulan data yang
sudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan diolah, data
yang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar dari data
yang dicari maka akan dilakukan pembagian data menjadi dua bagian. Pencarian
biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar daripada
posisi akhir.
Prinsip dari Binary search dapat dijelaskan sebagai berikut :
a. Mula-mula diambil posisi awal 0 dan posisi akhir = N-1, kemudian dicari posisi
data tengah dengan rumus (posisi awal + posisi akhir) / 2. Kemudian data yang
dicari dibandingkan dengan data tengah.
b. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama
dengan posisi tengah –1.
c. Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama
dengan posisi tengah +1.
d. Jika data sama, berarti data ditemukan.
Contoh:
Misalnya data yang dicari 17 (A=awal, T=tengah, R=akhir):
0 1 2 3 4 5 6 7 8
3 9 11 12 15 17 23 31 35
A T R
Karena 17 > 15 (data tengah), maka: awal = tengah + 1
0 1 2 3 4 5 6 7 8
3 9 11 12 15 17 23 31 35
A T R
Karena 17 < 23 (data tengah), maka: akhir = tengah – 1
0 1 2 3 4 5 6 7 8
3 9 11 12 15 17 23 31 35
A=T=R
Karena 17 = 17 (data tengah), maka KETEMU dan proses berhenti.
contoh program :
import java.io.*;
public class searchbin2 {
public int biner(int b[],int pencarian,int low,int high)
{
int i, middle;
while (low<=high)
{
middle=(low+high)/2;
if(pencarian==b[middle]) return middle;
else if(pencarian<b[middle]) high=middle-1;
else low=middle+1;
}
return -1;
}
private static Object Interger;
public static void main (String[] args)throws IOException{
BufferedReader bilangan=new BufferedReader (new InputStreamReader(System.in));
int tanda=0;
int[] angka=new int[5];
int hasil,x;
searchbin2 bin=new searchbin2 ();
System.out.println(" Masukkan Data : ");
System.out.println("=================");
for(int i = 0;i<angka.length;i++)
{
System.out.println(" Masukkan Data ke "+i+" = ");
angka[i]=Integer.parseInt(bilangan.readLine());
}
System.out.println("Angka Yang Dicari = ");
int cari=Integer.parseInt(bilangan.readLine());
hasil=bin.biner(angka,cari,0,angka.length-1);
if (hasil>=0)
System.out.println("Angka Yang Dicari di data ke : "+(hasil+1));
else
System.out.println("Angka yang di cari gak ada dalam daftar ");
}
}}
No comments:
Post a Comment