Não consigo descubrir o erro...alguem pode-me ajudar

4 respostas
T

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_type

    public 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+"]=<a>ID:"+nos[i].ID+",Info:"+nos[i].info+"</a> ");
    
    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));      	
     	}      	
     }
    

    }

4 Respostas

Dieval_Guizelini

Primeiramente seja bem vindo ao GUJ,

acho que você não é brasileiro,

bom se consegui entender os nomes dos métodos…

o primeiro erro é divisão por zero no método:

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; }

observe o divisor: (nos[l].ID - nos[l].ID) ==> x -x == 0

certo?
:lol:

Dieval_Guizelini

Acho que para nós, os termos:

  1. pesquisa_digital equivale a pesquisa_direta ou acesso_direto, objeto por tabelas hash, em que a chave indica a posição do conteúdo;
  2. pesquisa_seq_exaustiva e pesquisa_seq_esfomeada, eu não tenho certeza, mas para nós é sempre pesquisa seqüêncial, existe uma variante em que o elemento pesquisado é adicionado no final da matriz (ou vertor ou coleção), desta forma não é mais necessário a cada iteração verificar se o final do vetor foi ou não alcançado.
  3. pesquisa_binaria - termo e conceitos iguais, chamamos de pesquisa binária.
  4. pesquisa_interpolativa, não tenho certeza se para nós seria pesquisa por aproximação, também conhecido como soundex, para buscas de palavras que são escritas diferentes e possuem o mesmo som.

Não sei qual foi o enunciado desse exercício, mas ele me pareceu interessante.

até mais.

T

não sou brasileiro, sou portuguesa do arquipelago dos Açores!

Percebi o erro k cometi!!
(nos[l].ID - nos[l].ID) ==> x -x == 0

mas que alteração devo fazer, para que a pesquisa_interpolativa ficar correcta??

ViniGodoy

Por favor, antes de postar códigos novamente, dá uma lida nesse artigo, ok?
http://www.guj.com.br/posts/list/50115.java

Criado 29 de fevereiro de 2008
Ultima resposta 1 de mar. de 2008
Respostas 4
Participantes 3