Enquanto fazia o segundo código kata (que solicita a implementação de um algoritmo de pesquisa binária cinco vezes, cada vez com um método diferente), criei uma solução ligeiramente diferente que funciona da seguinte maneira:
Se eu tiver uma matriz classificada com o comprimento 100 e vejo que o campo inicial contém o número 200 e o campo final contém o número 400, eu, como um matemático que estuda humano, provavelmente começaria a pesquisar no campo 35 se estivesse pesquisando o número 270, e não o campo 50 como em um algoritmo de pesquisa binária normal.
Então, se o número no campo 35 da matriz for 270, 35 é o índice que eu estava procurando.
Se esse não for o caso, posso comparar o número obtido (digamos 280) e repetir a operação na parte inferior da matriz (então, tenho 35 campos com o campo inicial contendo 200 e o final com 280) se o o número que encontrei é maior do que o que estou procurando, ou a parte superior da matriz (digamos que tenho 260: agora tenho 65 índices, o primeiro contendo 260 e o final contendo 400. Orientativamente, eu iria índice 4 dessa sub-matriz, que é o índice 39 de toda a matriz) se o número que eu obtiver for menor que o número que estou procurando.
A questão é: esse algoritmo pode ser considerado um algoritmo de pesquisa binária? Caso contrário, ele tem seu próprio nome?
fonte
Respostas:
Eu não chamaria isso de uma pesquisa binária.
É claramente semelhante à pesquisa binária e é natural vê-la como um refinamento da pesquisa binária. No entanto, possui características de complexidade de algoritmo significativamente diferentes, a Pesquisa de Interpolação espera o tempo de execução de O (log (log (n)) assumindo que os dados são distribuídos uniformemente, no entanto, compensa isso tendo O (n) pior caso de tempo de execução.
Prefiro dizer "O pior caso de tempo de execução da pesquisa binária é O (log (n))" em vez de "Dependendo da escolha dos elementos delimitadores, o pior caso de tempo de execução da pesquisa binária é O (log (n))". Isso significa que não consigo classificar a pesquisa de interpolação como um algoritmo de pesquisa binária.
fonte
fonte
Penso que a terminologia correta seria uma pesquisa ponderada dicotomial.
Você procura em uma matriz plana com a subsequente busca ponderada com base na suposta distribuição plana dos números contidos nela.
Isso corresponde a como uma pessoa pesquisaria uma palavra em um dicionário. Mas pode ser muito ineficiente se a distribuição dos dados for irregular.
fonte