fala pessoal, como o titulo ja diz, preciso de ajuda para desenvolver um algorítimo (em java) que faz um pesquisa binaria com múltiplos resultados (se houver claro) em um arquivo de acesso aleatório…
é um arquivo de Índice (ordenado por nome) para outro arquivo principal, nele contem o nome e o endereço que aponta para o arquivo principal.
ja consegui fazer o seguinte:
public long pesquisa_bin(String nome_arquivo,String nome_informado) throws FileNotFoundException, IOException{
RandomAccessFile arquivo = new RandomAccessFile(nome_arquivo,"r");
long numero_tuplas = (arquivo.length() / 68);// 68 bytes é o tamanho da tupla do indice...
long min = 0;
long max = numero_tuplas -1;
long mid;
final long not_find = -1;
while (min <= max){
mid = (max + min)/2;
long posicao_nome = mid * 68; // posição do nome no arquivo
arquivo.seek(posicao_nome);
String nome_temp = "";
for(int i = 0;i < 30; i++){
nome_temp += arquivo.readChar();
}
if (nome_temp.trim().compareTo(nome_informado) < 0)
min = mid+1;
else if (nome_temp.trim().compareTo(nome_informado) > 0)
max = mid-1;
else
return mid;// retorna o numero da linha
}
return not_find; // se não achou....
}
esse algorítimo esta funcionando certinho… o único problema é que se tiver 2 ou mais nomes repetidos ele só vai retornar 1… alguem tem uma dica?