Pesquisa
 Algoritmos de pesquisa recebem um alvo etentam encontrá-lo dentro de um conjunto deelementos.
 Recuperação (ou hit): quando o algoritmoencontra o alvo.
 Dicionário: conjunto de dados e chaves. Apesquisa é feita pela chave com o objetivo derecuperar os dados associados.
 Índice: conjunto de chaves onde é realiza apesquisa.
Pesquisa - Algoritmos
 Pesquisa sequencial ou linear
 Pesquisa binária
 Pesquisa por interpolação
 Pesquisa por cálculo de endereço
Pesquisa Sequencial
 Procurar sequencialmente o alvo entre todos oselementos do índice.
 Implementação é simples.
 Sem necessidade de ordenar o conjunto dedados.
 Número médio de comparações: (n+1)/2.
 Implementação simples, mas o desempenho ésofrível: O(n).
PesquisaSequencial (vet, n, alvo)
i: numérico
início
para i  0 até n-1 passo 1 faça
   se (vet[i] = alvo)
     retorne i
      fim se
fim para
retorne -1
fim
 
Pesquisa Sequencial - Algoritmo
Pesquisa Binária
 O índice deve estar ordenado.
 O algoritmo tenta encontrar o alvo no meio doíndice.
 Se o alvo não for encontrado, repete-se a buscana metade do índice onde ele pode estar.
 Implementação utilizando recursividade ésimples.
 Número médio de comparações: log2n + 1.
 Desempenho ótimo: O(logn).
PesquisaBinaria (vet, ini, fim, alvo)
i: numérico
início
   i  (ini + fim) /2
   se (v[i] = alvo) returne i
   senão se (ini = fim) retorne -1
   senão
      se (alvo < v[i])
         retorne pesquisa(vet, ini, i-1, alvo)
      senão
      retorne pesquisa(vet, i+1, fim, alvo)
      fim se
   fim se
fim
 
Pesquisa Binária - Algoritmo
Pesquisa por Interpolação
 O índice deve estar ordenado.
 Variação de pesquisa binária, que tenta dividir oíndice ponderando-se os valores limite.
 Adequada para conjuntos de dados com chavesuniformemente distribuídas.
 Número médio de comparações: log2(log2n).
 Desempenho excelente: O(log(logn)).
 Entretanto, deve-se ter cuidado com dados nãouniformes.
PesquisaInterpolacao (vet, n, alvo)
max, min, i: numérico
início
   min  0
   max  n -1
   enquanto (vet[max] >= alvo) e (alvo > vet[min])
      i  (alvo – vet[min]) / (vet[max] – vet[min])
      i  i * (max – min) + min
      se (alvo > v[j])
         min  i + 1
      senão se (alvo < vet[j])
         max  i – 1
      senão
         min  i
      fim se
   fim enquanto
Pesquisa por Interpolação - Algoritmo
 se (vet[min] = alvo)
   retorne min
 senão
   retorne -1
 fim se
fim.
Pesquisa por Cálculo de Endereço
 O índice não precisa estar ordenado.
 É realizado um cálculo com o valor a serarmazenado que resulta no índice.
 Dependendo da função, o desempenho pode sersofrível O(n) ou excelente O(1).
 A escolha da função de cálculo é fundamental.