Algoritmo de pesquisa binária: função, benefícios, complexidade de tempo e espaço

Publicados: 2020-09-17

Índice

Introdução

Em qualquer sistema computacional, a busca é uma das funcionalidades mais críticas a serem desenvolvidas. As técnicas de pesquisa são usadas em recuperações de arquivos, indexação e muitas outras aplicações. Existem muitas técnicas de pesquisa disponíveis. Uma delas é a técnica de busca binária.

Um algoritmo de busca binária funciona com a ideia de negligenciar metade da lista em cada iteração. Ele continua dividindo a lista até encontrar o valor que está procurando em uma determinada lista. Um algoritmo de pesquisa binária é uma atualização rápida para um algoritmo de pesquisa linear simples.

Nenhuma experiência de codificação necessária. Suporte de carreira 360°. Diploma PG em Machine Learning & AI do IIIT-B e upGrad.

Funcionamento de um algoritmo de busca binária

A primeira coisa a notar é que um algoritmo de busca binária sempre funciona em uma lista ordenada. Portanto, o primeiro passo lógico é classificar a lista fornecida. Após a ordenação, a mediana da lista é verificada com o valor desejado.

  • Se o valor desejado for igual ao valor do índice central, o índice será retornado como resposta.
  • Se o valor de destino for menor que o índice central da lista, o lado direito da lista será ignorado.
  • Se o valor desejado for maior que o valor do índice central, a metade esquerda é descartada.
  • O processo é então repetido em listas reduzidas até que o valor alvo seja encontrado.

Exemplo 1

Vejamos o algoritmo com um exemplo. Suponha que haja uma lista com os seguintes números:

1, 15, 23, 7, 6, 14, 8, 3, 27

Vamos tomar o valor desejado como 27. O número total de elementos na lista é 9.

O primeiro passo é ordenar a lista. Após a classificação, a lista ficaria mais ou menos assim:

1, 3, 6, 7, 8, 14, 15, 23, 27

Como o número de elementos da lista é nove, o índice central seria cinco. O valor no índice cinco é 8. O valor desejado, 27, é comparado com o valor 8. Primeiro, verifique se o valor é igual a 8 ou não. Se sim, retorne o índice e saia.

Como 27 é maior que 8, ignoramos a parte esquerda e percorremos apenas o lado direito da lista. A nova lista a percorrer é:

14, 15, 23, 27

Nota: Na prática, a lista não é truncada. Apenas a observação é estreitada. Portanto, a “nova lista” não deve ser confundida com fazer uma nova lista ou encurtar a original. Embora possa ser implementado com uma nova lista, existem dois problemas. Primeiro, haverá uma sobrecarga de memória. Cada nova lista aumentará a complexidade do espaço. E segundo, os índices originais precisam ser rastreados em cada iteração.

O novo índice central pode ser considerado como o segundo ou terceiro elemento, dependendo da implementação. Aqui, vamos considerar o terceiro elemento como central. O valor 23 é comparado com o valor 27. Como o valor é maior que o valor central, descartaremos a metade esquerda.

A lista a percorrer é:

27

Como a lista contém apenas um único elemento, ele é considerado o elemento central. Assim, comparamos o valor desejado com 27. Conforme eles correspondem, retornamos o valor de índice de 27 na lista original.

Exemplo #2

Na mesma lista, vamos supor que o valor desejado seja 2.

Primeiro, o valor central oito é comparado com 2. Como o valor desejado é menor que o valor central, reduzimos nosso foco para o lado esquerdo da lista.

A nova travessia consistirá em:

1, 3, 6, 7

Tomemos o elemento central como o segundo elemento. O valor desejado dois é comparado com 3. Como o valor ainda é menor, novamente reduzimos o foco para o lado esquerdo da lista.

A nova travessia consistirá em:

1

Como a lista de deslocamento possui apenas um elemento, o valor é comparado diretamente com o elemento restante. Vemos que os valores não coincidem. Portanto, saímos do loop com uma mensagem de erro: v alor não encontrado .

Certificação avançada em ciência de dados, mais de 250 parceiros de contratação, mais de 300 horas de aprendizado, 0% EMI

Complexidade de tempo e espaço

A complexidade de tempo do algoritmo de busca binária é O(log n). A complexidade de tempo do melhor caso seria O(1) quando o índice central correspondesse diretamente ao valor desejado. O pior cenário pode ser os valores em qualquer extremidade da lista ou valores que não estão na lista.

A complexidade do espaço do algoritmo de busca binária depende da implementação do algoritmo. Existem duas formas de implementá-lo:

  1. Método iterativo
  2. Método recursivo

Ambos os métodos são praticamente os mesmos, com duas diferenças na implementação. Primeiro, não há loop no método recursivo. Segundo, em vez de passar os novos valores para a próxima iteração do loop, ele os passa para a próxima recursão. No método iterativo, as iterações podem ser controladas através das condições de loop, enquanto no método recursivo, o máximo e o mínimo são usados ​​como condição de contorno.

No método iterativo, a complexidade do espaço seria O(1). Já no método recursivo, a complexidade do espaço seria O(log n).

Benefícios

  • Um algoritmo de busca binária é um algoritmo de busca bastante simples de implementar.
  • É uma melhoria significativa em relação à pesquisa linear e executa quase o mesmo em comparação com alguns dos algoritmos de pesquisa mais difíceis de implementar.
  • O algoritmo de busca binária divide a lista pela metade em cada iteração, em vez de vasculhar sequencialmente a lista. Em listas grandes, esse método pode ser muito útil.

Checkout: Classificação da árvore de decisão: tudo o que você precisa saber

Conclusão

Um algoritmo de busca binária é um algoritmo amplamente utilizado no domínio computacional. É um algoritmo de pesquisa gordo e preciso que pode funcionar bem em conjuntos de dados grandes e pequenos. Um algoritmo de busca binária é um algoritmo simples e confiável de implementar. Com a análise de tempo e espaço, os benefícios do uso dessa técnica específica são evidentes.

Se você está curioso para aprender sobre ciência de dados, confira o PG Diploma in Data Science do IIIT-B & upGrad, que é criado para profissionais que trabalham e oferece mais de 10 estudos de caso e projetos, workshops práticos práticos, orientação com especialistas do setor, 1- on-1 com mentores do setor, mais de 400 horas de aprendizado e assistência de trabalho com as principais empresas.

É verdade que a busca linear é superior à busca binária?

Se você precisar pesquisar apenas uma vez, a pesquisa linear certamente será mais rápida do que a classificação seguida pela pesquisa binária se os dados estiverem originalmente não classificados. A busca binária, por outro lado, é reconhecida como um método de busca consideravelmente mais rápido do que a busca linear. A pesquisa binária permite remover metade dos itens restantes de cada vez, enquanto a pesquisa linear passaria por cada elemento um por um.

O que distingue a pesquisa por interpolação da pesquisa binária?

A pesquisa por interpolação é uma técnica semelhante à pesquisa binária para encontrar um valor de destino especificado em uma matriz classificada. É semelhante a como as pessoas pesquisam um determinado nome em uma lista telefônica, com o valor de destino usado para classificar o conteúdo do livro. Para verificar, a pesquisa binária sempre viaja para o elemento central. A pesquisa por interpolação, por outro lado, pode levar a vários lugares, dependendo do valor da chave que está sendo pesquisada. Se o valor da chave estiver mais próximo do elemento final, por exemplo, é mais provável que a pesquisa de interpolação comece no final.

É melhor fazer uma pesquisa binária recursiva ou uma pesquisa binária iterativa?

A versão recursiva do Binary Search tem uma complexidade de espaço de O(log N), mas a versão iterativa tem uma complexidade de espaço de O(log N) (1). Como resultado, enquanto a versão recursiva é simples de construir, a forma iterativa é mais eficiente.