Pesquisa Binária

Harshit Jindal 12 outubro 2023
  1. Algoritmo de pesquisa binária
  2. Exemplo de pesquisa binária
  3. Implementação de algoritmo de pesquisa binária
  4. Complexidade do algoritmo de pesquisa binária
Pesquisa Binária

A pesquisa binária é o algoritmo de pesquisa mais popular e eficiente. Na verdade, é o algoritmo de busca mais rápido. Assim como o jump sort, ele também precisa que o array seja classificado. É baseado na abordagem de dividir e conquistar, na qual dividimos o array em duas metades e, em seguida, comparamos o item que procuramos com o item do meio. Se o item do meio corresponder, retornamos o índice do elemento do meio; caso contrário, movemos para a metade esquerda e direita dependendo do valor do item.

Algoritmo de pesquisa binária

Vamos supor que temos um array não classificado A[] contendo n elementos, e queremos encontrar um elemento X.

  • Defina lo como 0 e hi como n - 1.
  • Enquanto lo <hi:
    • Defina mid = lo + (hi - lo) / 2.
    • se A[mid] == X retornar mid.
    • se A[mid] < X então lo = mid + 1.
    • senão, se A[mid]> X então hi = mid-1.
  • Elemento não encontrado, então retorne -1.

Exemplo de pesquisa binária

Suponha que temos a matriz: (1, 2, 3, 4, 5, 6, 7, 8, 9), e queremos encontrar X - 8.

  • Defina lo como 0 e hi como 8.
  • Calcule mid como 4. Como A[mid] < X, defina lo = 4 + 1 = 5.
  • Calcule mid como 6. Como A[mid] < X, defina lo = 6 + 1 = 7.
  • Calcule o meio como 7. Como A[mid] == 8, retorne 7.

Implementação de algoritmo de pesquisa binária

#include <bits/stdc++.h>
using namespace std;

int binarySearch(int arr[], int lo, int hi, int x) {
  while (lo <= hi) {
    int m = lo + (hi - lo) / 2;
    if (arr[m] == x) return m;
    if (arr[m] < x)
      lo = m + 1;
    else
      hi = m - 1;
  }
  return -1;
}

int main(void) {
  int n = 9;
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  int x = 8;
  int result = binarySearch(arr, 0, n - 1, x);
  if (result == -1) {
    cout << "Element not found !!";
  } else
    cout << "Element found at index " << result;
  return 0;
}

Complexidade do algoritmo de pesquisa binária

Complexidade de tempo

  • Caso Médio

Quando realizamos a pesquisa binária, pesquisamos em uma metade e descartamos a outra metade, reduzindo o tamanho do array pela metade a cada vez.

A expressão para complexidade de tempo é dada pela recorrência.

T(n) = T(n/2) + k , k is a constant.

Este resultado desta recorrência dá logn, e a complexidade do tempo é da ordem de O(logn). É mais rápido do que a pesquisa linear e a pesquisa de salto.

  • Melhor caso

O melhor caso ocorre quando o elemento do meio é o elemento que estamos procurando e é retornado na primeira iteração. O melhor caso de complexidade de tempo é O(1).

  • Pior caso

A complexidade de tempo do pior caso é igual à complexidade de tempo do caso médio. O pior caso de complexidade de tempo é O(logn).

Complexidade do Espaço

A complexidade de espaço deste algoritmo é O(1) no caso de implementação iterativa porque não requer nenhuma estrutura de dados além de variáveis ​​temporárias.

No caso de implementação recursiva, a complexidade do espaço é O(logn) devido ao espaço requerido pela pilha de chamadas recursivas.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn