image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Rodrigo Ferrreira
Rodrigo Ferrreira05/12/2022 14:02
Compartilhe

O poder da busca BINARIA

      ALGORITMO DE BUSCA BINARIA

    Em algoritmo, a pesquisa binária, também conhecida como pesquisa de vetores, pesquisa logarítmica ou divisão binária, é um algoritmo de pesquisa que encontra a posição de um valor alvo dentro de uma matriz. A pesquisa binária compara o valor de destino com o elemento do meio da matriz. Se não forem iguais, a metade em que o alvo não pode estar é eliminada e a busca continua na metade restante, novamente tomando o elemento do meio para comparar com o valor escolhido na busca, e repetindo isso até que o valor alvo seja encontrado. Se a pesquisa terminar com a metade restante vazia, o alvo não está na matriz/vetor.

    A pesquisa binária é mais rápida que a pesquisa linear, exceto para matrizes pequenas. No entanto, a matriz deve ser classificada primeiro para poder aplicar a pesquisa binária. Existem estruturas de dados especializadas projetadas para pesquisa rápida, como tabelas de hash, que podem ser pesquisadas com mais eficiência do que a pesquisa binária. No entanto, a pesquisa binária pode ser usada para resolver uma gama mais ampla de problemas.  

    ALGORITMO

    A pesquisa binária funciona em arrays/listas definidas. A pesquisa binária começa comparando um elemento no meio da lista com o valor escolhido. Se o valor de destino corresponder ao elemento, sua posição na matriz será retornada. Se o valor de destino for menor que o elemento, a pesquisa continua na metade inferior da matriz. Se o valor de destino for maior que o elemento, a pesquisa continua na metade superior da matriz. Ao fazer isso, o algoritmo elimina a metade em que o valor alvo não pode estar em cada iteração, tornando muito mais rápido.

    A seguir um exemplo em busca binaria em Kotlin:

    image

    A busca binaria diminui drasticamente o tempo de varredura de um elemento dentro de um vetor. Se hipoteticamente eu queira encontrar um número 100 dentro de um vetor com números de 1 a 100, se eu usar uma busca linear simples, eu teria que varrer um numero um por um até chegar ao número 100. A princípio poderia encontrar bem rápido o número em um vetor desse tamanho, agora imagina quanto tempo demoraria para encontrar um vetor de 1 milhão de números? Muito tempo, correto?

    A busca binaria usa o conceito de logaritmo na base 2 (LOG2), onde encontrando a sua potência seria o resultado de etapas que a busca binaria encontraria o número alvo do vetor. 

    Vamos a um exemplo:

    O tamanho do vetor são 100 números e precisamos encontrar o número 100 (último número), precisaremos encontrar o log da base 2 que levando a sua potência o resultado seja dentro de um raio de resultados igual ou superior a 100. 

    2⁷ = 2 elevado a 7 potência = 128

    Ou seja, o log 2 = 128. e igual a log 2⁷ = 128.

    O Resultado de etapas para encontrar o número 100 seria "7" na busca binaria. 

    Quantas etapas seriam necessárias para encontrar o número de 1.000.000 dentro do vetor com essa quantidade de números? 

    Encontrando a potência do log2 que de um resultado dentro do raio de 1 milhão de números. 

    O resultado para encontrar o elemento seria 20, porque 2 elevado a 20 = 1.048.576,00

    Se você optar pela busca linear simples, você precisaria de exatos 1 milhão de etapas para encontrar o resultado! 

    A busca binaria é um algoritmo poderoso para deixar a estrutura muito mais fluida e rápida, podendo ser usada em diferentes situações.

    Bibliografia:

    Aditya, Y. Bhargava. Título: Entendendo Algoritmos: Um guia ilustrado para programadores e outros curiosos. Primeira Edição. Brasil, publicação traduzida em português: Editora Novatec, abril 2017.

    Compartilhe
    Comentários (3)
    MICHAEL DIAS
    MICHAEL DIAS - 05/12/2022 18:13

    Sensacional, estou longe de chegar nesse nível, mas um dia chego lá. Parabéns, guerreiro.

    LC

    Lucas Costa - 05/12/2022 22:37

    Bom1


    Ricardo Gonçalves
    Ricardo Gonçalves - 05/12/2022 17:27

    Muito bom, Rodrigo!