A busca interpolada é uma variante da busca binária que calcula uma posição de sondagem levando em conta a distribuição dos itens, ao invés de apenas a quantidade de itens. Isso permite encontrar itens em tempo Ο(log(log(n))) quando os dados estiverem ordenados e uniformemente distribuídos. A busca interpolada é útil para buscar informações em listas como agendas e dicionários.
Resolução da Lista de exercícios - Conversão de bases e aritmética computacional
Busca interpolada - ED1 - UFS
1. Busca Interpolada
Grupo: Jaine Conceição, Caroline Cruz, Augusto
Cezar, Michael Roan, Fábio de Paula, Rafael
Sena, Luís Felipe, Janelson Luiz, Stênio e Marcel.
2. Definição:
• Pesquisa de interpolação é uma variante melhorada de busca
binária.
• São requisitos da busca interpolada: dados ordenados e
uniformemente distribuídos.
3. Na busca binária a chave é comparada sempre
com o elemento do meio
mas e se tivéssemos uma estimativa melhor da
localização da chave?
4. Por exemplo, no caso de uma lista telefônica,
se quisermos procurar o número de “João”.
Nesse situação a busca interpolada apresenta
melhor desempenho uma vez que podemos
pular diretamente para o espaço de memória
onde os nomes começam com ‘J’.
5. Implementação:
• A busca interpolada procura um item particular computando uma
posição de sondagem, levando em consideração não só a
quantidade de itens (binária), mas também a distribuição dos
itens.
• Se encontrar o item procurado então retorna o índice.
• Caso contrário divide a lista em duas partes através do método
seguinte:
mid = low + ((high - low) / (A[high] - A[low])) * (x - A[low])
6. mid = low + ((high - low) / (A[high] - A[low])) * (x - A[low])
• A = lista ou array
• Low = índice mais baixo da lista
• High = índice mais alto da lista
• A[n] = valor armazenado no índice ‘n’ da lista
• x = chave procurada
Índices: 0 1 2 3 4 5 6 7 8 9
mid = 0 + ((9 - 0) / (10 - 1)) * (2 – 1) = 9 / 9 * 1 = 1
8. Set mid = low + ((high - low) / (A[high]
- A[low])) * (X - A[low])
if A[mid] = X
EXIT: Success, Target found at
mid
else
if A[mid] < X
Set low to mid+1
else if A[mid] > X
Set high to mid-1
end if
end if
End While
End Procedure
Pseudo-códigoA → Array list
N → Tamanho de A
X → Chave procurada
Procedure Interpolation_Search()
Set low → 0
Set mid → -1
Set high → N-1
While X does not match
if low equals to high OR A[low]
equals to A[high]
EXIT: Failure, Target not found
end if
9. Custo:
• Índice de particionamento é calculado em tempo
constante, de acordo com uma distribuição de
probabilidade.
• Utilizando uma entrada com distribuição uniforme, é
obtido um tempo de execução Ω(1) com uma
quantidade média de log (log (n)) comparações.
• No pior caso é obtida a complexidade O(n) quando
uma distribuição uniforme não é aplicada .
10. Aplicação:
• Em geral tem as mesmas aplicações que a busca binária já
que são quase iguais, no entanto, a condição da
interpolada precisa ser levada em consideração.
• Esta técnica é geralmente utilizada por pessoas na
busca por informações com ordenação, como em
agendas, dicionários ou listas telefônicas.
11. Comparação com outras
buscas:
• Se as chaves estiverem uniformemente distribuídas:
• Complexidade da busca sequencial: O(n)
• Complexidade da busca binária: O(log(n))
• Complexidade da busca interpolada: O(log(log(n)))
12. Referências:
• ROSA, João Luís Garcia. Métodos de Busca, 2009. Disponível em:
<http://wiki.icmc.usp.br/images/d/df/ICC2_12.Busca.pdf>. Acesso em: 02 de
jan, 2017.
• MARKOV, Igor. What is interpolation search and what is it used for, 2014.
Disponível em: <https://www.quora.com/What-is-interpolation-search-and-
what-is-it-used-for>. Acesso em: 02 de jan, 2017.
• Estrutura de Dados - interpolação Pesquisa, 2014. Disponível em:
<http://www.w3ii.com/pt/data_structures_algorithms/interpolation_search_al
gorithm.html>. Acesso em: 02 de jan, 2017.
• ANAND, Shivam. What is interpolation search in data structures, 2014.
Disponível em: <https://www.quora.com/What-is-interpolation-search-in-
data-structures>. Acesso em: 02 de jan, 2017.