"O que é `Binary Search` e como ele difere do `Linear Search`?"
Pesquisar em uma lista de itens é uma ocorrência comum em ciência da computação. Existem dois algoritmos principais que você deve conhecer quando se trata de busca:
linear search e binary search.
A busca linear começa no início de uma lista e itera por cada item até encontrar o valor alvo que está procurando.
Se o valor alvo for encontrado, o índice onde ele está localizado na lista é retornado. Se o valor alvo não for encontrado, -1 é retornado. Retornamos -1 porque não é um índice válido na maioria das linguagens de programação.
Aqui está como o código fica para a busca linear:
def linear_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
Se a lista que vamos pesquisar for [13, 4, 7, 9, 10] e o valor alvo for 9, a função retornaria 3 porque 9 está no índice 3.
Se alterarmos o valor alvo para 5, a função retornaria -1 porque 5 não está na lista.
Embora este seja um algoritmo relativamente simples, ele não é o mais eficiente. Se você tem uma lista grande de itens, a busca linear pode levar muito tempo para encontrar o valor alvo.
A complexidade de tempo da busca linear é O(n) porque o tempo que leva para pesquisar na lista cresce linearmente com o tamanho da lista.
A complexidade de espaço da busca linear é O(1) porque não requer espaço adicional para percorrer a lista.
A busca binária é um algoritmo mais eficiente para pesquisar em uma grande lista de itens. A condição aqui é que a lista deve estar ordenada em ordem crescente.
A busca binária funciona dividindo a lista ao meio e verificando se o valor alvo está no meio da lista. Se o valor alvo estiver no meio da lista, o índice do valor alvo será retornado. Caso contrário, o algoritmo verifica se o valor alvo está na metade esquerda ou direita da lista.
Ele continua a dividir as partes restantes da lista em metades até que o valor alvo seja encontrado. Se o valor alvo não estiver na lista, ele retorna -1
Aqui está como o código fica para busca binária:
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
Começamos identificando um índice low e high. Isto representa o intervalo da lista que estamos pesquisando.
Em seguida, verificamos a condição de low ser menor ou igual a high. Se low for maior que high, já pesquisamos por toda a lista e o valor alvo não foi encontrado. Nesse caso, paramos a busca e retornamos -1.
Se o índice low for menor ou igual ao índice high, calculamos o índice do meio da lista, mid. Em seguida, verificamos se o valor alvo está no índice do meio. Se for, retornamos o índice do meio.
Caso contrário, verificamos se o valor no ponto médio é menor que o alvo. Se for, atualizamos o índice baixo para ser o índice do meio mais um. Isso significa que vamos buscar a metade direita da lista.
Por fim, se nenhuma das outras condições for True, atualizamos o índice high para ser o índice do meio menos um. Isso significa que iremos buscar na metade esquerda da lista.
Continuamos a repetir esse processo até encontrarmos o alvo ou determinarmos que o alvo não está na lista.
A complexidade de tempo da busca binária é O(log n) porque o tempo que leva para buscar na lista cresce logaritmicamente com o tamanho da lista.
A complexidade de espaço da busca binária é O(1) porque não requer espaço adicional para percorrer a lista.
A busca binária e a busca linear podem ser usadas para uma variedade de problemas que você encontrará em ciência da computação. É importante entender as diferenças entre os dois algoritmos e quando usar cada um.Este módulo não possui perguntas. Marque como concluído.