dúvida Busca Binária

7 respostas
J

Bom dia a todos do forum!

Tenho um algorítmo de busca binária, a qual toma 5 ms para 1000 elementos, preciso saber quanto tomaria para 1.000000
sabendo-se que esse agorítmo possui competitividade do tipo log N

eis o alg

1. public class TestBinnary{ 2. public static void main (String[] args){ 3. Nome_classe.DuplicatingArrays.print(a); 4. System.out.println ("busca (a,44):" +search (a,44)); 5. System.out.println ("busca (a,50):" +search (a,50)); 6. System.out.println ("busca (a,77):" +search (a,77)); 7. System.out.println ("busca (a,100):" +search (a,100)); 8. } 9. public static int search (int[] a, intx){ 10. int lo = 0; 11. int hi = a.length; 12. 13. while (lo<hi){ 14. int i = (lo+hi)/2; 15. if(a [i] == x){ 16. return i; 17. }else if (a [i] < x){ 18. lo = i+1; 19. }else{ 20. hi = i; 21. } 22. } 23. return -1; 24. } 25. }

alguem pode dar uma força…?

7 Respostas

T

Você não sabe usar uma regra de três?

5 ms está para log (1000) assim como x está para log (1000000).

J

e como usar isso no java…?
como implemento? O_o

T

Você não tem de implementar nada. Você já está com a implementação da busca binária pronta.
Você não sabe usar a calculadora do Windows?
Já lhe passei a regra de três; basta achar o valor de x.

J

certo… muito obrigado pela ajuda!
resolvi esse primeiro!

Pelo jeito vou queimar muitos neurônios, ainda tenho que escrever alguns métodos:

  • Método para arrays
    boolean isSorted(int[]a) //retorna verdadeiro se a[0] < = … < = a[a.length h-1]

  • Escrever e testar o seguinte:
    int mínimo (int [] a) //retonar o menor elemento de a[]

  • Método semelhante ao insert(), para inserir em um array ordenado, q delete elementos

void delete (int[] a, int n, int x) //pré-condicionado: 0<=n<a.length;

//pós-condicionado: a primeira ocorrência de x entre {a [0], … , a[n-1]} deve ser deletado;

Por exemplo, se a é {33,55,77,99,77,55,33,0} então deletar (a,6,55) produz: {33,77,99,77,55,33,0}

Pessoal, me ajude. Sou iniciante e nem faço ideia de como prosseguir.

T

isSorted é fácil.
A idéia é: em um array ordenado, cada elemento é menor ou igual ao seu sucessor.

mínimo é também fácil.
O jeito mais fácil é: pegue o primeiro elemento, e deixe-o em uma variável.
A partir do segundo elemento, compare-o com o valor dessa variável; se o valor do elemento for menor, então você troca o valor dessa variável com o valor do elemento.

insert e delete são relativamente fáceis se você tiver a busca binária implementada. Só ter cuidado na hora de testar.
Dica: você pode usar System.arraycopy para mover os elementos do array “para cima” ou “para baixo”, é só saber como fazer.

peczenyj

Em alguns desses métodos sera util vc pensar que, dentro de um for, se uma dada condição não foi cumprida, vc pode abortar TODO o laço com um break ou mesmo return :wink:

J

parece tão fácil pra vcs rsrsrs
mas to aqui tentando…

valeu pelas dicas!

*se alguem mais puder ajudar… agradeço!

Criado 14 de abril de 2008
Ultima resposta 14 de abr. de 2008
Respostas 7
Participantes 3