tou com algumas dificuldades a descubrir onde está o erro…aqui vai o codigo…se alguem descobrir me diga!!!
obrigado
-
Dicionário com estrutura de um ARRAY para implementar:
-
- Pesquisa digital
-
- Pesquisa Sequencial exaustiva
-
- Pesquisa Sequencial esfomeada
-
- Pesquisa binária
-
- Pesquisa interpolativa
*/
public class DicionarioArray {
private no[] nos;
private int N;
private int contudo;private class no{
public int ID; //item_type
public int info; //info_typepublic no(int id,int data){
ID=id;
info=data;
}
}public DicionarioArray(int max){
N=max;
nos=new no[N];
contudo=0;
}public DicionarioArray(int max,int l,int r,int extensao){
N=max;nos=new no[N];
contudo=Math.min(N,r-l);
max=l+Math.min(N,r-l);for(int i=l,j=0;i<max;++i,++j) nos[j]=new no(i,(int)Math.round(Math.random()*extensao)); }
public void presentar(){
for (int i=0;i<contudo;++i)
System.out.print("["+i+"]=ID:"+nos[i].ID+",Info:"+nos[i].info+" ");
System.out.println();
}
private int pesquisa_digital(int id){
if (id>-1&&id<contudo)
return nos[id].info;
else return -1;
}private int pesquisa_seq_exaustiva(int id){
for(int i=0;i<contudo;i++)
if (nos[i].ID==id)
return nos[i].info;
return -1;
}private int pesquisa_seq_esfomeada(int id){
for(int i=0;i<contudo&&nos[i].ID<=id;i++)
if (nos[i].ID==id)
return nos[i].info;
return -1;
}private int pesquisa_binaria(int id){
int l=0,r=contudo-1,x;
while (r>=l){
x=(l+r)/2;
if (id==nos[x].ID)
return nos[x].info;
if (id<nos[x].ID)
r=x-1;
else l=x+1;
}
return -1;
}private int pesquisa_interpolativa(int id){
int l=0,r=contudo-1,x;
while (r>l){
x=(id-nos[l].ID)*(r-l)/(nos[l].ID-nos[l].ID);
if (id==nos[x].ID)
return nos[x].info;
if (id<nos[x].ID)
r=x-1;
else
l=x+1;
}
return -1;
}public static void main(String[] args){
int N=100,l=0,r=10,extensao=4;
DicionarioArray Dicionario=new DicionarioArray(N,l,r,extensao);
Dicionario.presentar();for (int i=0;i<Dicionario.contudo-1;++i){ int key=((int)Math.round(Math.random()*2*(r-l))); System.out.println("Procura da Informação attribuido ao Chave "+key+":"); System.out.println(" - De acordo com a Pesquisa digital:"+Dicionario.pesquisa_digital(key)); System.out.println(" - De acordo com a Pesquisa sequencial exaustiva:"+Dicionario.pesquisa_seq_exaustiva(key)); System.out.println(" - De acordo com a Pesquisa sequencial esfomeada:"+Dicionario.pesquisa_seq_esfomeada(key)); System.out.println(" - De acordo com a Pesquisa binária:"+Dicionario.pesquisa_binaria(key)); System.out.println(" - De acordo com a Pesquisa interpolativa:"+Dicionario.pesquisa_interpolativa(key)); } }
}
- Pesquisa interpolativa