Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2009
Joo Lus G. Rosa c 2009 - SCC-201: V. Mtodos de Busca 1/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
2/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
3/121
Busca uma tarefa muito comum em computao? Vrios mtodos e estruturas de dados podem ser empregados para se fazer busca:
Quais estruturas de dados?
Certos mtodos de organizao/ordenao de dados podem tornar o processo de busca mais eciente.
4/121
O problema da busca (ou pesquisa): Dado um conjunto de elementos, onde cada um identicado por uma chave, o objetivo da busca localizar, nesse conjunto, o elemento que corresponde a uma chave especca.
5/121
Terminologia bsica
Tabela ou Arquivo: termos genricos, pode ser qualquer estrutura de dados usada para armazenamento interno e organizao dos dados:
Uma tabela um conjunto de elementos, chamados registros, Existe uma chave associada a cada registro, usada para diferenciar os registros entre si:
Chave interna: contida dentro do registro, em uma localizao especca, Chave externa: contida em uma tabela de chaves separada que inclui ponteiros para os registros, Chave primria: para todo arquivo existe pelo menos um conjunto exclusivo de chaves - dois registros no podem ter o mesmo valor de chave, Chave secundria: chaves no primrias, que no precisam ter seus valores exclusivos. Para que servem?
Joo Lus G. Rosa c 2009 - SCC-201: V. Mtodos de Busca 6/121
Terminologia bsica
Algoritmo de busca: formalmente, o algoritmo que aceita um argumento a e tenta encontrar o registro cuja chave seja a, Operaes:
Insero: adicionar um novo elemento tabela, Algoritmo de busca e insero: se no encontra o registro, insere um novo, Remoo: retirar um elemento da tabela, Recuperao: procurar um elemento na tabela e, se ach-lo, torn-lo disponvel.
7/121
Terminologia bsica
8/121
Tipos de busca
O objetivo encontrar um dado registro com o menor custo, Cada tcnica possui vantagens e desvantagens.
9/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
10/121
Busca sequencial
A busca sequencial a forma mais simples de busca, aplicvel a uma tabela organizada como um vetor ou como uma lista encadeada, Busca mais simples que h, Percorre-se registro por registro em busca da chave:
11/121
Busca sequencial
12/121
Busca sequencial
13/121
Busca sequencial
14/121
Busca sequencial
15/121
Busca sequencial
16/121
Busca sequencial
17/121
Busca sequencial
Algoritmo de busca sequencial em um vetor A, com n posies (0 at n 1), sendo x a chave procurada:
for (i=0; i<n; i++) if (A[i]==x) return(i); /*chave encontrada*/ return(-1); /*chave no encontrada*/
18/121
Busca sequencial
Uma maneira de tornar o algoritmo mais eciente usar um sentinela:
Sentinela: consiste em adicionar um elemento de valor x no nal da tabela.
O sentinela garante que o elemento procurado ser encontrado, o que elimina uma expresso condicional, melhorando a performance do algoritmo:
A[n]=x; for (i=0; x!=A[i]; i++); if (i < n) return(i); /*chave encontrada*/ else return(-1); /*chave no encontrada*/
19/121
Busca sequencial
Limitaes do vetor:
Tamanho xo:
Pode desperdiar ou faltar espao.
Alternativa:
Lista encadeada:
O que muda na busca sequencial?
Complexidade:
Se o registro for o primeiro: 1 comparao, Se o registro procurado for o ltimo: N comparaes, Se for igualmente provvel que o argumento aparea em qualquer posio da tabela, em mdia: (n+1) comparaes, 2 Se a busca for mal sucedida: N comparaes. Logo, a busca sequencial, no pior caso, O(n).
20/121
Busca sequencial
Arranjo no ordenado:
Insero no nal do arranjo, Remoo:
Realocao dos registros acima do registro removido.
Mtodo mover-para-frente: sempre que uma pesquisa obtiver xito, o registro recuperado colocado no incio da lista, Mtodo da transposio: um registro recuperado com sucesso trocado com o registro imediatamente anterior.
Busca sequencial
22/121
Busca sequencial
Diculdade do mtodo?
23/121
Busca sequencial
24/121
Busca sequencial
25/121
Busca sequencial
26/121
Busca sequencial
27/121
Busca sequencial
Vantagem:
Os itens na tabela podero ser examinados sequencialmente sem que todos os registros precisem ser acessados:
O tempo de busca diminui consideravelmente.
Desvantagens:
A tabela tem que estar ordenada, Exige espao adicional para armazenar a(s) tabela(s) de ndices.
Algo mais?
28/121
Busca sequencial
Remoo:
Remove-se o elemento e rearranja-se a tabela inteira e o(s) ndice(s), Marca-se a posio do elemento removido, indicando que ela pode ser ocupada por um outro elemento futuramente:
A posio da tabela ca vazia.
29/121
Busca sequencial
Insero:
Se houver espao vago na tabela, rearranjam-se os elementos localmente, Se no houver espao vago:
Rearranjar a tabela a partir do ponto apropriado e reconstruir o(s) ndice(s).
30/121
Busca sequencial
Insero do elemento 512 com espao vago:
567 e 583 descem, 512 inserido.
31/121
Busca sequencial
Insero do elemento 512 com espao vago:
567 e 583 descem, 512 inserido.
32/121
Busca sequencial
Insero do elemento 512 sem espao vago:
Elementos a partir de 567 descem, 512 inserido, ndice reconstrudo.
33/121
Busca sequencial
Insero do elemento 512 sem espao vago:
Elementos a partir de 567 descem, 512 inserido, ndice reconstrudo.
34/121
Busca sequencial
35/121
Busca sequencial
Exemplo:
Divide-se o nmero de elementos da tabela pelo tamanho do ndice desejado:
Se a tabela tem 1.000 elementos e deseja-se um ndice primrio de 10 elementos, faz-se 1.000/10=100.
36/121
Busca sequencial
Para montar um ndice secundrio, aplica-se raciocnio similar sobre o ndice primrio, Em geral, no so necessrios mais do que 2 ndices.
37/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
38/121
Busca binria
39/121
Busca binria
40/121
Busca binria
41/121
Busca binria
42/121
Busca binria
43/121
Busca binria
44/121
Busca binria
Complexidade:
O(log n), pois cada comparao reduz o nmero de possveis candidatos por um fator de 2.
Vantagens:
Ecincia da busca, Simplicidade da implementao.
Desvantagens:
Nem todo arranjo est ordenado, Exige o uso de um arranjo para armazenar os dados:
Faz uso do fato de que os ndices do vetor so inteiros consecutivos.
45/121
Busca binria
A busca binria pode ser usada com a organizao de tabela sequencial indexada:
Em vez de pesquisar o ndice sequencialmente, pode-se usar uma busca binria.
46/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
47/121
Se as chaves estiverem uniformemente distribudas, esse mtodo pode ser ainda mais eciente do que a busca binria, Com chaves uniformemente distribudas, pode-se esperar que x esteja aproximadamente na posio:
(xA[inf ]) meio = inf + (sup inf ) ( (A[sup]A[inf ]) )
48/121
Se as chaves no estiverem uniformemente distribudas, a busca por interpolao pode ser to ruim quanto uma busca sequencial.
Desvantagem:
Em situaes prticas, as chaves tendem a se aglomerar em torno de determinados valores e no so uniformemente distribudas:
Exemplo: h uma quantidade maior de nomes comeando com S do que com Q.
49/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
50/121
Busca em rvores
rvores:
rvores binrias:
rvores binrias de busca, AVLs: rvores binrias de busca balanceadas.
rvores multidirecionais:
rvores B.
51/121
Todo elemento tem uma chave e no h dois elementos com a mesma chave (i.e., as chaves so distintas), As chaves (se houver) na sub-rvore esquerda so menores do que a chave na raiz, As chaves (se houver) na sub-rvore direita so maiores do que a chave na raiz, As sub-rvores esquerda e direita so tambm rvores binrias.
52/121
Uma rvore binria de busca pode suportar as operaes de localizao, insero e excluso, Um algoritmo de busca aquele que aceita um argumento a e tenta encontrar o registro cuja chave a, O algoritmo pode retornar o registro inteiro ou, mais comum, um ponteiro para o registro, Uma tabela de registros na qual uma chave usada para recuperao chamada de tabela de busca ou dicionrio.
53/121
rvores AVL
rvores AVL
Seja a seguinte rvore AVL:
Fator de equilbrio = He - Hd
He = altura da sub-rvore esquerda, Hd = altura da sub-rvore direita.
Joo Lus G. Rosa c 2009 - SCC-201: V. Mtodos de Busca 55/121
As operaes bsicas com rvores AVL so as mesmas operaes com as rvores binrias de busca:
inserir um n na rvore, localizar um n na rvore (maior prioridade), remover um n da rvore.
O problema que com a insero e/ou remoo, a rvore pode deixar de ser AVL, Neste caso, deve-se transform-la.
56/121
rvores AVL
Vantagem: a rvore AVL uma rvore balanceada, ou seja, a distncia mdia dos ns at a raiz mnima. Isto contribui para que, na mdia, os ns sejam localizados mais rapidamente, Aplicao: tabelas dinmicas, onde elementos podem ser inseridos e removidos freqentemente.
57/121
58/121
todas as chaves em s0 sero menores ou iguais k0 , todas as chaves em s1 sero menores ou iguais k1 e maiores que k0 e assim por diante, uma ou mais sub-rvores de um n podem estar vazias.
Joo Lus G. Rosa c 2009 - SCC-201: V. Mtodos de Busca 59/121
60/121
rvores-B
Uma rvore-B de ordem m uma rvore de busca multidirecional balanceada que satisfaz as seguintes condies:
todo n possui m ou menos sub-rvores (mximo m), todo n, exceto o raiz, possui no mnimo m/2 sub-rvores (maior inteiro), o raiz possui no mnimo duas sub-rvores no vazias, todas as folhas esto no mesmo nvel, um n com k sub-rvores armazena k 1 registros, todos os ns pai (de derivao) possuem exclusivamente sub-rvores no vazias.
61/121
rvores-B
onde:
C1 < C2 < ... < Cj so chaves dos registros, Ei o endereo da sub-rvore que contm os registros com chaves compreendidas entre Ci e Ci+1 .
62/121
rvores-B
63/121
Ecincia
64/121
Ecincia
Resumo de algumas implementaes de dicionrios. Legenda: pc = pior caso, m = caso mdio. [2]
65/121
Reexo
66/121
Reexo
Endereamento direto:
Vantagem: Acesso direto e, portanto, rpido:
Via indexao do arranjo.
67/121
Reexo
Hashing:
Acesso direto, mas endereamento indireto:
Funo de mapeamento h(k ) = k , em geral, Resolve uso ineciente do espao de armazenamento.
Ideal: O(1), em mdia, independente do tamanho do arranjo, Hash signica (Websters New World Dictionary):
1 2
68/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
69/121
Tambm conhecido como tabela de espalhamento ou de disperso, Hashing uma tcnica que utiliza uma funo h para transformar uma chave k em um endereo:
O endereo usado para armazenar e recuperar registros.
70/121
Coliso: ocorre quando a funo hash produz o mesmo endereo para chaves diferentes:
As chaves com mesmo endereo so ditas sinnimos.
72/121
Existem alternativas melhores que a puramente aleatria, Segredos para um bom hashing:
Escolher uma boa funo hash (em funo dos dados):
Distribui uniformemente os dados, na medida do possvel: Hash uniforme. Evita colises, fcil/rpida de computar.
Para chaves tipo string, tratar cada caractere como um valor inteiro (ASCII), som-los e pegar o resto da diviso por B, B deve ser primo, preferencialmente.
74/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
75/121
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
76/121
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
1%7=1
77/121
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
5%7=5
78/121
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
10 % 7 = 3
79/121
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
20 % 7 = 6
80/121
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
25 % 7 = 4
81/121
24 % 7 = 3
82/121
83/121
Funes hash
84/121
Funes hash
Pergunta: supondo que se deseja armazenar n elementos em uma tabela de m posies, qual o nmero esperado de elementos por posio na tabela?
Fator de carga = n/m.
85/121
Sumrio
1
Busca Introduo Busca Sequencial Busca Binria Outros tipos de Busca Busca por interpolao Busca em rvores Hashing Conceitos Funes hash Tipos de hashing
86/121
Tipos de Hashing
Esttico:
Espao de endereamento no muda, Fechado: Permite armazenar um conjunto de informaes de tamanho limitado:
Tcnicas de rehash para tratamento de colises, Overow progressivo, 2a . funo hash.
Dinmico:
Espao de endereamento pode aumentar.
87/121
Hashing esttico
Hashing fechado:
Uma tabela de buckets utilizada para armazenar informaes:
Os elementos so armazenados na prpria tabela: Normalmente conhecido como endereamento aberto.
88/121
Hashing esttico
Tcnicas de rehash:
Se posio h(k ) est ocupada (lembre-se de que h(k ) um ndice da tabela), aplicar funo de rehash sobre h(k ), que deve retornar o prximo bucket livre: rh(h(k )), Caractersticas de uma boa funo de rehash:
Cobrir o mximo de ndices entre 0 e B 1, Evitar agrupamentos de dados.
Alm de utilizar o ndice resultante de h(k ) na funo de rehash, pode-se usar a prpria chave k e outras funes hash.
89/121
Hashing esttico
Overow progressivo:
rh(h(k )) = (h(k ) + i)%B, com i variando de 1 a B 1 (i incrementado a cada tentativa).
90/121
Hashing esttico
Overow progressivo:
rh(h(k )) = (h(k ) + i)%B, com i variando de 1 a B 1 (i incrementado a cada tentativa).
Hashing esttico
92/121
Hashing esttico
93/121
Hashing esttico
Exemplo de diculdade: busca pelo nome Smith:
Soluo para remoo de elementos: no eliminar elemento, mas indicar que a posio foi esvaziada e que a busca deve continuar.
94/121
Hashing esttico
Overow progressivo:
Exemplo anterior: rh(h(k )) = (h(k ) + i)%B, com i = 1...B 1:
Chamada sondagem linear, pois todas as posies da tabela so checadas, no pior caso.
95/121
Hashing esttico
Overow progressivo:
Vantagem:
Simplicidade.
Desvantagens: 1 2 3 Agrupamento de dados (causado por colises), Com estrutura cheia a busca ca lenta, Diculta inseres e remoes. overow progressivo
hashing fechado
96/121
Hashing esttico
Exemplo: rh(h(k )) = (h(k ) + i haux(k ))%B, com i = 1...B 1. Algumas boas funes:
h(k ) = k %B, haux(k ) = 1 + k %(B 1).
97/121
Hashing esttico
Desvantagens:
Difcil achar funes hash que, ao mesmo tempo, satisfaam os critrios de cobrir o mximo de ndices da tabela e evitem agrupamento de dados, Operaes de buscas, inseres e remoes so mais difceis.
98/121
Hashing esttico
Alternativamente, em vez de fazer o hashing utilizando uma funo hash e uma funo de rehash, podemos representar isso em uma nica funo dependente do nmero da tentativa (i), Por exemplo: h(k , i) = (k + i)%B, com i = 0...B 1:
A funo h depende agora de dois fatores: a chave k e a iterao i, Note que i = 0 na primeira execuo, resultando na funo hash tradicional de diviso que j conhecamos, Quando i = 1...B 1, j estamos aplicando a funo de rehash de sondagem linear.
99/121
Hashing esttico
Exerccio: implemente uma sub-rotina de insero utilizando funo hash anterior:
#define B 100 #define h(k,i) (k+i)%B int inserir(int T[], int k) { int i, j; for (i=0; i<B; i++) { j=h(k,i); if (T[j]==-1) { T[j]=k; return(j); } } return(-1) //tabela j est cheia }
Joo Lus G. Rosa c 2009 - SCC-201: V. Mtodos de Busca 100/121
Hashing esttico
Hashing aberto:
A tabela de buckets, indo de 0 a B 1, contm apenas ponteiros para uma lista de elementos, Quando h coliso, o sinnimo inserido no bucket como um novo n da lista, Busca deve percorrer a lista.
101/121
Hashing esttico
102/121
Hashing esttico
Vantagens:
A tabela pode receber mais itens mesmo quando um bucket j foi ocupado, Permite percorrer a tabela por ordem de valor hash.
Desvantagens:
Espao extra para as listas, Listas longas implicam em muito tempo gasto na busca:
Se as listas estiverem ordenadas, reduz-se o tempo de busca, Custo extra com a ordenao.
103/121
A tabela pode car cheia, Pode haver mais espao para a tabela, pois no so necessrios ponteiros e campos extras como no hashing aberto.
Hashing aberto:
Depende do tamanho das listas e da funo hash:
Listas longas degradam desempenho, Poucas colises implicam em listas pequenas.
104/121
Diviso:
h(k ) = k %m, com m tendo um tamanho primo, de preferncia.
Multiplicao:
h(k ) = (k A%1) m, com A sendo uma constante entre 0 e 1:
(k A%1) recupera a parte fracionria de k A, Knuth sugere A = 51 = 0, 6180 . . . 2
105/121
Hash universal:
A funo hash escolhida aleatoriamente no incio de cada execuo, de forma que minimize/evite tendncias das chaves, Por exemplo, h(k ) = ((A k + B)%P)%m:
P um nmero primo maior do que a maior chave k , A uma constante escolhida aleatoriamente de um conjunto de constantes {0, 1, 2, ..., P 1} no incio da execuo, B uma constante escolhida aleatoriamente de um conjunto de constantes {1, 2, ..., P 1} no incio da execuo.
106/121
Hashing
Hash perfeito:
Quando no h coliso:
Aplicvel em um cenrio em que o conjunto de chaves esttico, Exemplo de cenrio deste tipo?
107/121
Hashing dinmico
O tamanho do espao de endereamento (nmero de buckets) pode aumentar, Exemplo de hashing dinmico:
Hashing extensvel: Conforme os elementos so inseridos na tabela, o tamanho aumenta se necessrio:
Supondo que o nmero mximo de elementos por bucket N, sempre que o elemento N + 1 surgir, o bucket dividido juntamente com os elementos.
108/121
Hashing dinmico
Hashing extensvel:
Em geral, trabalha-se com bits, Aps h(k ) ser computada, uma segunda funo f transforma o ndice h(k ) em uma sequncia de bits:
Os bits so utilizados para indexar de fato a chave.
Alternativamente, h e f podem ser unicadas como uma nica funo hash nal. Funo hash computa sequncia de m bits para uma chave k , mas apenas os i primeiro bits (i m) do incio da sequncia so usados como endereo:
Se i o nmero de bits usados, a tabela de buckets ter 2i entradas, Portanto, tamanho da tabela de buckets cresce sempre como potncia de 2.
Hashing dinmico
110/121
Hashing dinmico
111/121
Hashing dinmico
112/121
Hashing dinmico
113/121
Hashing dinmico
114/121
Hashing dinmico
115/121
Hashing dinmico
Exemplo: Insira os elementos 0000, 0111 e 1000, nesta ordem:
Hashing extensvel: resultado das inseres:
116/121
Hashing dinmico
Vantagens:
Custo de acesso constante, determinado pelo tamanho de N, A tabela pode crescer.
Desvantagens:
Complexidade extra para gerenciar o aumento do arranjo e a diviso das listas, Podem existir sequncias de inseres que faam a tabela crescer rapidamente, tendo, contudo, um nmero pequeno de registros.
Busca sequencial, Busca sequencial indexada, Busca binria, Busca por interpolao, Busca em rvores:
AVLs.
Hashing.
118/121
Frequncia das operaes realizadas, Diculdade de implementao, Consumo de memria (interna), Tempo de acesso a memria externa, Outros?
119/121
Apndice
Bibliograa
Bibliograa I
[1] Cormen, T. H., Leiserson, C. E., Rivest, R. L., Stein, C. Algoritmos - Teoria e Prtica. Ed. Campus, Rio de Janeiro, Segunda Edio, 2002. [2] Horowitz, E., Sahni, S. Rajasekaran, S. Computer Algorithms. Computer Science Press, 1998. [3] Pardo, Thiago A. S. Mtodos de Busca. SCE-181 Introduo Cincia da Computao II. Slides. Cincia de Computao. ICMC/USP, 2008.
120/121
Apndice
Bibliograa
Bibliograa II
[4] Rosa, Joo Lus G. Estrutura de Dados II. Slides. Engenharia de Computao. PUC-Campinas, 2008. [5] Tenenbaum, A. M., Langsam, Y., Augestein, M. J. Estruturas de Dados Usando C. Makron Books, 1995. [6] Wirth, N. Algoritmos e Estruturas de Dados. LTC, 1989.
121/121