Dalam membuat program pencarian layaknya google ini, hal utama yang harus dibuat adalah membuat class RBT sebagai berikut,
public class RB_Tree {
static node root;
public RB_Tree(){
root=null;
}
public void insert(String n,File add){
node x=root;
node y=null;
while(x!=null){
y=x;
if(x.nilai.compareTo(n)>0)
x=x.kiri;
else if(x.nilai.equalsIgnoreCase(n)){
x.incJumlah(add);
x.sort();
return ;
}
else
x=x.kanan;
}
node baru=new node(n);
baru.incJumlah(add);
baru.parent=y;
if(y==null)
root=baru;
else if(baru.nilai.compareTo(y.nilai)<0 div="">
y.kiri=baru;
else
y.kanan=baru;
baru.kiri=null;
baru.kanan=null;
baru.warna=Color.red;
Fix_Insert(baru);
}
public void Fix_Insert(node baru){
while(baru!=root&&baru.parent.warna==Color.red){
if(baru.parent==baru.parent.parent.kiri){
node y=baru.parent.parent.kanan;
if(y!=null&&y.warna==Color.red){
baru.parent.warna=Color.black;
y.warna=Color.black;
baru.parent.parent.warna=Color.red;
baru=baru.parent.parent;
}
else {
if(baru==baru.parent.kanan){
baru=baru.parent;
L_Rotation(baru);
}
baru.parent.warna=Color.black;
baru.parent.parent.warna=Color.red;
R_Rotation(baru.parent.parent);
}
}
else{
node y=baru.parent.parent.kiri;
if(y!=null&&y.warna==Color.red){
baru.parent.warna=Color.black;
y.warna=Color.black;
baru.parent.parent.warna=Color.red;
baru=baru.parent.parent;
}
else{
if (baru == baru.parent.kiri) {
baru=baru.parent;
R_Rotation(baru);
}
baru.parent.warna=Color.black;
baru.parent.parent.warna=Color.red;
L_Rotation(baru.parent.parent);
}
}
}
root.warna=Color.black;
}
public void L_Rotation(node x){
node y=x.kanan;
x.kanan=y.kiri;
if(y.kiri!=null)
y.kiri.parent=x;
y.parent=x.parent;
if(x.parent==null)
root=y;
else if(x==x.parent.kiri)
x.parent.kiri=y;
else
x.parent.kanan=y;
y.kiri=x;
x.parent=y;
}
public void R_Rotation(node x){
node y=x.kiri;
x.kiri=y.kanan;
if(y.kanan!=null)
y.kanan.parent=x;
y.parent=x.parent;
if(x.parent==null)
root=y;
else if(x==x.parent.kanan)
x.parent.kanan=y;
else
x.parent.kiri=y;
y.kanan=x;
x.parent=y;
}
0>
Kemudian dibuatlah method pencarian seperti berikut ,
public ArrayList searchkata (String kata){
node temp=root;
ArrayList x = new ArrayList ();
while(temp!=null){
if(temp.nilai.equalsIgnoreCase(kata)){
return temp.alamat;
}
else if(temp.nilai.compareTo(kata)>0){
temp=temp.kiri;
}
else{
temp=temp.kanan;
}
}
return x;
}
public ArrayList searchkalimat (String kalimat){
ArrayList h_head = new ArrayList ();
ArrayList h_file = new ArrayList ();
ArrayList h_nilai = new ArrayList ();
String [] kata = kalimat.split(" ");
for(int i=0;i
ArrayList t = searchkata(kata[i]);
for(int j=0;j
if(h_file.contains(t.get(j).alamat)){
if(!kata[i].equalsIgnoreCase(h_head.get(h_file.indexOf(t.get(j).alamat)))){
h_nilai.set(h_file.indexOf(t.get(j).alamat), h_nilai.get((h_file.indexOf(t.get(j).alamat)))+1);
}
else
h_nilai.set(h_file.indexOf(t.get(j).alamat), h_nilai.get((h_file.indexOf(t.get(j).alamat)))+0.2);
}
else{
h_head.add(kata[i]);
h_file.add(t.get(j).alamat);
h_nilai.add(0.2);
}
//
}
}
for (int i = 1; i < h_file.size(); i++){
int j = i;
String tempH = h_head.get(i);
File tempF = h_file.get(i);
Double tempD = h_nilai.get(i);
while ((j > 0) && (h_nilai.get(j-1) < tempD)){
h_head.set(j,h_head.get(j-1));
h_file.set(j,h_file.get(j-1));
h_nilai.set(j,h_nilai.get(j-1));
j--;
}
h_head.set(j,tempH);
h_file.set(j,tempF);
h_nilai.set(j,tempD);
}
return h_file;
}
Penggabungan method ini dengan method pembacaan file (tidak ada disini) dan dengan GUI maka akan menghasilkan pencarian document layaknya google. Semoga bermanfaat!
boss itu caranya harus dengan 1 class atau lebih untuk script di atas