Explicando Busca Binária de Forma Simples
Sumário
Hoje vou tentar explicar a busca binária de forma simples. A busca binária é um algoritmo de busca que encontra a posição de um valor dentro de um array ordenado. O array ser ordenado é um ponto importante aqui.
Para explicar a busca binária, precisamos de um array como exemplo.
arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Neste array, temos 10 elementos, de 1 a 10. A busca binária funciona comparando o valor procurado com o elemento do meio do array.
Por exemplo, se quisermos encontrar o número 5 no array, começamos comparando 5 com o elemento do meio do array, que é 6.
O próximo passo é comparar 5 com 6. Se 5 for menor que 6, podemos descartar a metade direita do array. O novo array fica assim:
arr := []int{1, 2, 3, 4, 5}
Agora repetimos o processo, comparando 5 com o elemento do meio do novo array, que é 3.
O próximo passo é comparar 5 com 3. Se 5 for maior que 3, podemos descartar a metade esquerda do array. O novo array fica assim:
arr := []int{4, 5}
Agora repetimos o processo, comparando 5 com o elemento do meio do novo array, que é 5. E encontramos o número 5 no array.
Neste exemplo simples, encontramos o número 5 em 3 passos. Essa é minha explicação simples da busca binária.
Agora posso implementar o algoritmo de busca binária em Go.
package main
func search(arr []int, searchItem int) int {
minus := 0
max := len(arr) - 1
for minus <= max {
middle := (minus + max) / 2
tryFind := arr[middle]
if tryFind == searchItem {
return middle
}
if tryFind > searchItem {
max = middle - 1
} else {
minus = middle + 1
}
}
return -1
}
Agora posso usar a função search para encontrar o número 5 no array.
func main() {
arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
searchItem := 80
pos := search(arr, searchItem)
var message string
message = fmt.Sprintf("Find item %d in %d position", searchItem, searchItem)
if pos == -1 {
message = fmt.Sprintf("Item %d not found", searchItem)
}
fmt.Println(message)
}
Esta é a saída do programa:
Item 80 not found
Este algoritmo me lembra uma frase que ouço com frequência: dividir para conquistar! Espero que este post, junto com os outros, ajude você nos seus estudos e, mais importante, ajude você a entender que o melhor caminho é sempre o do conhecimento profundo!
Até a próxima! Obrigado por ler meu blog. Abraços!