Busca binária em array - Python
Primeiro você precisa saber o que é uma busca binária. Uma busca binária seconsite, basicamente, em dividir o array por 2 várias vezes até achar o número que você deseja encontrar.
Vamos direto ao código e você entenderá durante a explicação:
Em um array, temos o primeiro índice e o último, por exemplo:
lista = [2, 4, 6, 8, 10]
Lembrando que a lista que será feita a busca deverá estar ordenada
Nosso primeiro índice é o 0, nesse caso lista[0] = 2
O nosso último índice é o 4, nesse caso lista[4] = 10
Dito isso, seguimos:
low = 0
high = len(lista) - 1
O método len nos retorna quantos elementos tem na lista, nesse caso, 5. Mas nós não queremos isso, queremos que high seja o último índice da nossa lista, por isso o -1 no final
Agora a gente precisa de um laço para percorrer nossa lista, vamos utilizar o laço while.
while(high >= low):
middle = (high + low) // 2
if z == lst[middle]:
return print('achou')
else:
if z < lst[middle]:
high = middle - 1
else:
low = middle + 1
Vamos lá, vou explicando linha a linha desse laço.
A condição que estamos passando no while é a seguinte: Enquanto nosso maior índice for maior que o nosso menor índice, execute o programa:
Se essa condição for verdadeira, a gente vai buscar a metade do array (lista) que declaramos logo no começo dessa explicação.
A metade do array vai receber a soma dos dois índices (maior e menor) dividida por 2, dizemos que high seja 4, teremos como metade
2.
middle = (high + low) // 2
페르페이토. 아고라, vamos às verificações.
Se o nosso número buscado (nesse caso seria o parâmetro 'z') for igual a metade da nossa lista (
lista[middle]
, que nesse caso é 2), então nós retornamos algo para nos mostrar que achamos o número buscado e acabamos o programa .if z == lst[middle]:
return print('achou')
Se o número buscado for diferente da metade da lista, vamos verificar se o número buscado é maior ou menor que a metade.
Se z (número buscado) <
lista[middle]
(metade), então gente sabe que z está entre o primeiro número (low) e metade (middle), 로고, sabemos que não precisamos mais dos números à direita da metade, não tendo porquê procurar por um número aonde ele não poderá estar .Se essa verificação for verdadeira, então a partir de agora, o último número será a nova metade - 1 (Porque -1? Porque a gente tem a informação que nosso número é menor que a metade, então ele nunca poderá ser a metade, Porém podendo ser um número a menos que ela)
if z < lst[middle]:
high = middle - 1
Agora, se essa condição for falsa, só teremos mais uma condição a ser verificada, que seria z >
lista[middle]
, já que já verificamos se z é == a metade ou z < metade.Se z > metade, ignoraremos tudo que seja menor que a metade, já que z não poderá estar ali. 예, 운이 좋은가요? Nosso primeiro número será a nova metade + 1 (Novamente, por que +1? Porquê a gente sabe que z não é a metade, mas pode ser metade + 1)
else:
low = middle + 1
Feito isso, ele fará isso quantas vezes for necessário até que a condição do while retorne false. (Achar o número, ou não)
Reference
이 문제에 관하여(Busca binária em array - Python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/boldodev_/busca-binaria-em-array-python-44n3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)