Pesquisa Binária
- Algoritmo de pesquisa binária
- Exemplo de pesquisa binária
- Implementação de algoritmo de pesquisa binária
- Complexidade do algoritmo de 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
locomo0ehicomon - 1. -
Enquanto
lo<hi:- Defina
mid=lo + (hi - lo) / 2. - se
A[mid]==Xretornarmid. - se
A[mid]<Xentãolo=mid + 1. - senão, se
A[mid]>Xentãohi=mid-1.
- Defina
-
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
locomo0ehicomo8. -
Calcule
midcomo4. ComoA[mid]<X, definalo=4 + 1=5. -
Calcule
midcomo6. ComoA[mid]<X, definalo=6 + 1=7. -
Calcule o meio como
7. ComoA[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 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