Você está na página 1de 78

Tabelas de hash

Diego de Freitas Aranha IC/UNICAMP

4 de setembro de 2007

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Tabelas de hash

Tabelas de hash so uteis para implementar a funcionalidade de a um dicionrio T . a Dicionrio T a Inserir(T , x): inserir elemento x no conjunto T ; Remover(T , x): remover elemento x do conjunto T ; Buscar(T , x): retornar elemento x no conjunto T , quando x T. Exemplo: tabela de s mbolos de um compilador; Objetivo: realizar operaes em tempo constante!(tempo esperado) co

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Tabelas de endereamento direto c


Cada elemento identicado por uma chave em N; e Quando o universo de chaves U = {0, 1, . . . , m 1} e pequeno, a tabela pode ser implementada como um vetor. Cada posio representa uma chave de U e armazena um ca elemento x ou um ponteiro para x.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Tabelas de endereamento direto - Algoritmos c

Inserir-Enderecamento-Direto(T , x) T [key [x]] x Remover-Enderecamento-Direto(T , x) T [key [x]] NIL Buscar-Enderecamento-Direto(T , k) return T [k] Complexidade: as operaes tomam tempo constante no pior caso. co
Diego de Freitas Aranha IC/UNICAMP Tabelas de hash

Tabelas de hash

Problema O universo de chaves pode ser muito grande ou esparso.

Soluo: Utilizar uma funo de hash h para mapear um ca ca elemento x ` sua chave k = h(x). a

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Tabelas de hash
A tabela implementada como um vetor de m posies em que e co cada posio armazena um subconjunto de U. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Tabelas de hash

Vantagem Se K o conjunto das chaves armazenadas, a tabela requer espao e c (|K |) ao invs de (|U|). e Desvantagens Coliso: duas chaves podem ser mapeadas para a mesma a posio! ca A busca na tabela requer O(1) no caso mdio, mas O(n) no e pior caso.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Como evitar colises? o


Problema O nmero de colises no pode ser muito grande. u o a O nmero de colises depende de como a funo de hash h espalha u o ca os elementos. Soluo: escolher uma funo h determin ca ca stica, mas com sa da aparentemente aleatria. o

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Como evitar colises? o


Problema O nmero de colises no pode ser muito grande. u o a O nmero de colises depende de como a funo de hash h espalha u o ca os elementos. Soluo: escolher uma funo h determin ca ca stica, mas com sa da aparentemente aleatria. o Problema Como |U| > m, a escolha de h apenas minimiza o nmero de u colises. o Soluo: tratar as colises restantes de forma algor ca o tmica, aplicando encademento ou endereamento aberto. c
Diego de Freitas Aranha IC/UNICAMP Tabelas de hash

Encadeamento
Em uma tabela de hash encadeada, todos os elementos mapeados para uma mesma posio so armazenados em uma lista ligada. ca a

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela de hash encadeada ca


Insero das chaves {5, 28, 19, 15, 20, 33} em uma tabela com 9 ca posies, utilizando h(k) = k mod 9. co

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela de hash encadeada ca


Insero da chave 5 para h(k) = k mod 9. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela de hash encadeada ca


Insero da chave 28 para h(k) = k mod 9. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela de hash encadeada ca


Insero da chave 19 para h(k) = k mod 9. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela de hash encadeada ca


Insero da chave 15 para h(k) = k mod 9. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela de hash encadeada ca


Insero da chave 20 para h(k) = k mod 9. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela de hash encadeada ca


Insero da chave 33 para h(k) = k mod 9. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Encadeamento - Algoritmos
Inserir-Hash-Encadeado(T , x) Inserir x no in da lista T [h(key [x])]; cio Remover-Hash-Encadeado(T , x) Remover x da lista T [h(key [x])]; Buscar-Hash-Encadeado(T , k) Buscar por um elemento com chave k na lista T [h(k)];

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Encadeamento - Algoritmos
Inserir-Hash-Encadeado(T , x) Inserir x no in da lista T [h(key [x])]; cio Remover-Hash-Encadeado(T , x) Remover x da lista T [h(key [x])]; Buscar-Hash-Encadeado(T , k) Buscar por um elemento com chave k na lista T [h(k)]; Complexidade Insero: O(1); ca Remoo: O(1) com lista duplamente ligada. ca Busca sem sucesso: depende do comprimento de T [h(k)]; Busca com sucesso: depende do nmero de elementos antes u de x em T [h(key [x])];
Diego de Freitas Aranha IC/UNICAMP Tabelas de hash

Encadeamento - Anlise a

No pior caso, todos os elementos so mapeados para a mesma a posio e a busca custa (n) mais o clculo de h. ca a Mapeamento uniforme simples No caso mdio, podemos assumir que um elemento pode ser e mapeado para qualquer posio igualmente e que dois elementos ca so mapeados independentemente: a Pr {h(ki ) = h(kj )} =
1 m.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Encadeamento - Anlise a
Denio ca Em uma tabela de hash com m posies que armazena n co n elementos, o fator de carga denido como m . e Seja nj o comprimento da lista T [j]. O valor esperado de nj . e Assume-se que calcular k = h(x) toma O(1).

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Encadeamento - Anlise a
Denio ca Em uma tabela de hash com m posies que armazena n co n elementos, o fator de carga denido como m . e Seja nj o comprimento da lista T [j]. O valor esperado de nj . e Assume-se que calcular k = h(x) toma O(1). Complexidade Busca sem sucesso: examina-se toda a lista T [k] com tamanho esperado . A complexidade O(1 + ). e Busca com sucesso: examinam-se os elementos anteriores a x e o prprio x. Na mdia, examinam-se: o e 1+ 1 n
n n

1/m = O(1 +
i=1 j=i+1

11 2 n ) = O(1 + ). nm

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Encadeamento - Anlise a

Se o nmero de posies proporcional ao nmero de u co e u elementos, ou n = O(m), o fator de carga = O(1) e a e busca toma tempo constante no caso mdio; e Todas as operaes tomam tempo constante em mdia. co e

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Projeto de funes de hash co

Problema Funes de hash verdadeiramente aleatrias no podem ser co o a implementadas com tempo constante.

Precisamos de uma funo que parea aleatria, ou seja, mapeie ca c o 1 um elemento para cada posio com probabilidade prxima de m . ca o Isto depende da distribuio das entradas. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Projeto de funes de hash co

Exemplos: Se as entradas so valores reais uniformemente distribu a dos no intervalo [0, 1), podemos usar h(k) = km ; Se as entradas so identicadores de um programa, h deve a diminuir a probabilidade de elementos parecidos como pt e pts colidirem.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Mtodo da diviso e a

Mtodo da diviso e a A funo h denida como h(k) = k mod m. ca e

A qualidade depende da escolha de m: Se m = 2p , a funo escolhe os bits menos signicativos de k; ca Se m um nmero primo no muito prximo de uma potncia e u a o e de 2, h considera mais bits de k.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Mtodo da diviso e a

Mtodo da diviso e a A funo h denida como h(k) = k mod m. ca e

A qualidade depende da escolha de m: Se m = 2p , a funo escolhe os bits menos signicativos de k; ca Se m um nmero primo no muito prximo de uma potncia e u a o e de 2, h considera mais bits de k. Exemplo: Para armazenar n = 2000 elementos em uma tabela de hash , onde uma busca sem sucesso pode visitar at 3 elementos, e m deve ser primo e prximo de 2000 . Um bom valor para m 701. o e 3

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Mtodo da multiplicao e ca

Mtodo da multiplicao e ca A funo h denida como h(k) = m(kc kc ) , para uma ca e constante 0 < c < 1. Neste caso, o valor de m no cr a e tico, mas a escolha de c depende das caracter sticas da entrada. Knuth sugere c = 51 . 2 Se m = 2p , h pode ser implementada ecientemente com operaes de bit. co

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Mtodo da multiplicao e ca

Mtodo da multiplicao e ca A funo h denida como h(k) = m(kc kc ) , para uma ca e constante 0 < c < 1. Neste caso, o valor de m no cr a e tico, mas a escolha de c depende das caracter sticas da entrada. Knuth sugere c = 51 . 2 Se m = 2p , h pode ser implementada ecientemente com operaes de bit. co Exemplo: Se k = 123456, m = 16384 e a sugesto acima a e seguida, h(k) = 67.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento universal

Problema Heur sticas so determin a sticas e podem ser manipuladas de forma indesejada. Um adversrio pode escolher as chaves de entrada para a que todas colidam.

Soluo: no in da execuo, escolher aleatoriamente uma ca cio ca funo de hash de uma classe H de funes determin ca co sticas.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento universal

Problema Heur sticas so determin a sticas e podem ser manipuladas de forma indesejada. Um adversrio pode escolher as chaves de entrada para a que todas colidam.

Soluo: no in da execuo, escolher aleatoriamente uma ca cio ca funo de hash de uma classe H de funes determin ca co sticas. Denio ca Uma classe H de funes de hash universal se o nmero de co e u funes h H em que h(ki ) = h(kj ) |H| . co e m

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento universal - Anlise a


A coliso entre duas chaves ki e kj ocorre com probabilidade a mesma probabilidade de coliso se h(ki ) e h(kj ) fossem a selecionados aleatoriamente em U.
1 m,

O limite superior para o nmero esperado de colises para cada u o chave k, baseando-se na escolha da funo de hash : ca e 1 . m
n m

lT ,l=k

Se k T , a lista nh(k) tem tamanho esperado / Se k T , a lista nh(k) tem tamanho esperado 1 + n1 < 1 + . m

= ;

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento universal - Anlise a

Teorema 11.3 Com mapeamento universal e encadeamento, o tamanho esperado de cada lista ni no mximo 1 + . e a

Corolrio 11.4 a Com mapeamento universal e encadeamento, uma tabela com m posies realiza qualquer seqncia de n operaes contendo O(m) co ue co inseres em tempo esperado (n). co

Complexidade: as operaes tomam tempo constante em mdia. co e

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento universal - Projeto

Seja p um nmero primo tal que p > |U|. Denota-se por u Zp = {0, 1, . . . , p 1} e Zp = Zp {0}. Teorema 11.5 A classe Hp,m de funes {ha,b : a Zp , b Zp } universal para co e ha,b (k) = ((ak + b) mod p) mod m.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento universal - Projeto

Seja p um nmero primo tal que p > |U|. Denota-se por u Zp = {0, 1, . . . , p 1} e Zp = Zp {0}. Teorema 11.5 A classe Hp,m de funes {ha,b : a Zp , b Zp } universal para co e ha,b (k) = ((ak + b) mod p) mod m. Exemplo: Se p = 17 e m = 16, temos h3,4 (8) = 5. A classe tem p(p 1) funes distintas. A universalidade segue co das propriedades da reduo mdulo o nmero primo p. ca o u

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto c
Em uma tabela de hash com endereamento aberto, todos os c elementos so armazenados na tabela propriamente dita. O espao a c gasto com encadeamento economizado e a coliso tratada com e a e a busca de uma nova posio para insero. ca ca Naturalmente, o fator de carga no pode exceder o valor 1. a

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto - Algoritmos c


Durante a insero, uma seqncia de posies testada at que ca ue co e e uma posio livre seja encontrada. A funo de hash modicada ca ca e para receber um argumento que armazena o nmero do teste. u

Inserir-Hash-Aberto(T , x) i 0 repeat j h(k, i) if T [j] =NIL then T [j] k return j else i i + 1 until i = m error overow

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto - Algoritmos c


O algoritmo de busca percorre a mesma seqncia examinada pelo ue algoritmo de insero quando k foi inserido. ca Buscar-Hash-Aberto(T , k) i 0 repeat j h(k, i) if T [j] = k then return j i i +1 until T [j] = NIL or i = m return NIL A remoo de elementos dif ca e cil. Pode-se utilizar um valor especial Deleted para marcar elementos removidos, mas o custo da busca deixa de depender do fator de carga.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Teste linear

A funo de hash deve produzir como seqncia de teste uma ca ue permutao de {0, 1, . . . , m 1}. ca Teste linear Seja h uma funo de hash auxiliar. A funo h denida como ca ca e h(k, i) = (h (k) + i) mod m.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Teste linear

A funo de hash deve produzir como seqncia de teste uma ca ue permutao de {0, 1, . . . , m 1}. ca Teste linear Seja h uma funo de hash auxiliar. A funo h denida como ca ca e h(k, i) = (h (k) + i) mod m.

Vantagem: fcil implementao. a ca Desvantagem: suscet a agrupamento primrio. Ou seja, so e vel a a constru das seqncias longas de posies ocupadas, o que degrada ue co o desempenho da busca.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela com endereamento aberto ca c


Insero das chaves {10, 22, 31, 4, 15, 28, 59} em uma tabela de ca tamanho 11 com teste linear e funo h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste linear c


Insero da chave 10 para h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste linear c


Insero da chave 22 para h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste linear c


Insero da chave 31 para h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste linear c


Insero da chave 4 para h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste linear c


Insero da chave 15 para h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste linear c


Insero da chave 28 para h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste linear c


Insero da chave 59 para h(k, i) = (k + i) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Teste quadrtico a

Teste quadrtico a Seja h uma funo de hash auxiliar, c1 e c2 constantes no-nulas. ca a A funo h denida como h(k, i) = (h (k) + c1 i + c2 i 2 ) mod m. ca e

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Teste quadrtico a

Teste quadrtico a Seja h uma funo de hash auxiliar, c1 e c2 constantes no-nulas. ca a A funo h denida como h(k, i) = (h (k) + c1 i + c2 i 2 ) mod m. ca e Vantagem: imune a agrupamento primrio. e a Desvantagem: suscet a agrupamento secundrio. Ou seja, e vel a as seqncias de teste so idnticas para duas chaves ki e kj tais ue a e que h (ki ) = h (kj ).

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela com endereamento aberto ca c


Insero das chaves {10, 22, 31, 4, 15, 28, 59} em uma tabela de ca tamanho 11 com teste quadrtico e h(k, i) = (k + i + 3i 2 ) mod 11. a

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste quadrtico c a


Insero da chave 10 para h(k, i) = (k + i + 3i 2 ) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste quadrtico c a


Insero da chave 22 para h(k, i) = (k + i + 3i 2 ) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste quadrtico c a


Insero da chave 31 para h(k, i) = (k + i + 3i 2 ) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste quadrtico c a


Insero da chave 4 para h(k, i) = (k + i + 3i 2 ) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste quadrtico c a


Insero da chave 15 para h(k, i) = (k + i + 3i 2 ) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste quadrtico c a


Insero da chave 28 para h(k, i) = (k + i + 3i 2 ) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e teste quadrtico c a


Insero da chave 59 para h(k, i) = (k + i + 3i 2 ) mod 11. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Duplo mapeamento

Duplo mapeamento Sejam h1 e h2 funes de hash auxiliares. A funo h denida co ca e como h(k, i) = (h1 (k) + ih2 (k)) mod m. E preciso que h2 (k) e m sejam relativamente primos: Escolhe-se m = 2p e h2 (k) com sa sempre da mpar; Escolhe-se m primo e h2 (k) com sa sempre menor que m. da

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Heur sticas - Duplo mapeamento

Vantagem: o mapeamento duplo considera (m2 ) seqncias de ue teste, j que cada par (h1 (k), h2 (k)) produz uma nova seqncia. a ue Teste linear ou quadrtico apenas consideram (m) seqencias. a u Desvantagem: projeto e implementao mais dif ca cil.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto e duplo mapeamento c

Exemplo: Sejam h1 (k) = k mod 13 e h2 (k) = 1 + (k mod 11). Ento h(14, 0) = 1, h(14, 1) = 5 e h(14, 2) = 9. a

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto - Anlise c a

Mapeamento uniforme No caso mdio, podemos assumir que cada chave mapeada e e igualmente para cada uma das m! seqncias de teste poss ue veis no conjunto {0, 1, . . . , m 1}.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto - Anlise c a

Mapeamento uniforme No caso mdio, podemos assumir que cada chave mapeada e e igualmente para cada uma das m! seqncias de teste poss ue veis no conjunto {0, 1, . . . , m 1}. Complexidade Busca sem sucesso: proporcional ao nmero de testes feitos. u O primeiro teste sempre feito e falha com probabilidade . e O segundo falha com probabilidade 2 , e assim por diante. O nmero de testes limitado por: u e

i1 =
i=1

1 = O(1). 1

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto - Anlise c a

Complexidade Insero: consiste em encontrar uma posio desocupada ca ca (busca sem sucesso). Logo, a complexidade O(1) no caso e mdio. e

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Endereamento aberto - Anlise c a

Complexidade Insero: consiste em encontrar uma posio desocupada ca ca (busca sem sucesso). Logo, a complexidade O(1) no caso e mdio. e Busca com sucesso: a busca por uma chave k segue a mesma seqncia de teste percorrida na insero de k. Se k ue ca foi a (i + 1)-sima chave inserida, o nmero esperado de e u m 1 testes em uma busca por k limitado por 1i/m = mi . A e mdia sobre todas as n chaves : e e 1 n
n1 i=0

m 1 1 ln = O(1). mi 1

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento perfeito

Quando o conjunto de chaves K esttico, tabelas de hash podem e a ser usadas para obter alto desempenho mesmo no pior caso. Exemplo: O conjunto de palavras reservadas de uma linguagem de programao esttico. ca e a

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento perfeito

Quando o conjunto de chaves K esttico, tabelas de hash podem e a ser usadas para obter alto desempenho mesmo no pior caso. Exemplo: O conjunto de palavras reservadas de uma linguagem de programao esttico. ca e a Denio ca Uma tcnica de mapeamento chamada perfeita se o nmero de e e u acessos ` memria necessrios para uma busca O(1) no pior caso. a o a e

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento perfeito

Problema Projetar um esquema de mapeamento em que todas as buscas tomem tempo constante no pior caso.

Soluo: utilizar um esquema com mapeamento em dois n ca veis, e mapeamento universal em cada n vel.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento perfeito
O primeiro n idntico a uma tabela de hash encadeada. As n vel e e chaves so mapeadas em m posies por uma funo h universal. a co ca No lugar da lista de chaves que colidem na posio j, utiliza-se ca uma tabela de hash secundria Sj com uma funo associada hj . a ca A escolha de hj permite impedir colises no segundo n o vel. Para isso, o tamanho mj da tabela de hash Sj deve ser o quadrado da quantidade nj de chaves mapeadas para a posio j. ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento perfeito - Projeto

Pode-se escolher as funes tais que: co A funo h de primeiro n seja escolhida de uma classe ca vel universal Hp,m ; As funes hj sejam escolhidas de classes universais Hp,mj . co

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Insero em tabela com mapeamento perfeito ca


Insero das chaves {10, 22, 37, 40, 60, 70, 75}. Para a tabela ca externa, m = 9 e h(k) = ((3k + 42) mod 101) mod 9.
h(10) = (72 mod 101) mod 9 = 0, h0 (10) = 0; h(22) = (108 mod 101) mod 9 = 7, h7 (22) = (594 mod 101) mod 9 = 8. h(37) = (153 mod 101) mod 9 = 7, h7 (7) = (249 mod 101) mod 9 = 3.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Mapeamento perfeito - Anlise a


Teorema 11.9 Ao armazenar n chaves em uma tabela com tamanho m = n2 e funo h escolhida aleatoriamente de uma classe universal de ca funes, a probabilidade de haver qualquer coliso menor que 1 . co a e 2 O nmero esperado de colises igual ao produto entre o nmero u o e u de colises poss o veis e a probabilidade de coliso: a n2 n 1 1 n 1 = 2 < m 2 n 2 2

Portanto, uma funo de hash h pode ser cuidadosamente ca escolhida para no produzir colises no conjunto esttico K . a o a
Diego de Freitas Aranha IC/UNICAMP Tabelas de hash

Mapeamento perfeito - Anlise a


Como n grande, m = n2 pode ser excessivo e esta abordagem e e usada apenas nas tabelas secundrias. Cada tabela Sj tem a tamanho mj = nj2 e permite busca em tempo constante sem colises. o Teorema 11.10 Armazenar n chaves em uma tabela de dois n veis com tamanhos m = n e mj = nj2 usando uma funo de hash h escolhida ca aleatoriamente de uma classe universal requer memria (n). o A quantidade de memria necessria para essa congurao tem o a ca como valor esperado:
m1

nj2 2n 1 = (n)
j=0

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Concluses o

Tabelas de hash so os dicionrios mais ecientes quando a a apenas insero, remoo e busca precisam ser suportadas; ca ca Se mapeamento uniforme utilizado, cada operao toma e ca tempo constante no caso mdio; e Se mapeamento universal utilizado, tempo constante e e mantido mesmo sob atuao de adversrios; ca a Se caracter sticas da entrada podem ser exploradas, funes co de hash baseadas em heur sticas tm bom desempenho e fcil e a implementao; ca

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Concluses o

Para resoluo de colises, encadeamento o mtodo mais ca o e e simples, mas gasta mais espao; c Endereamento aberto tem implementao mais dif ou que c ca cil pode ser suscet a efeitos de agrupamento. vel Mapeamento perfeito timo para conjuntos estticos de eo a chaves e tem consumo de memria (n). o

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Exerc cios

Exerc 11.2-1 cio Suponha que uma funo de hash usada para mapear n chaves ca e distintas em um vetor T de tamanho m. Assumindo mapeamento uniforme simples, qual o nmero esperado de colises? Mais u o precisamente, qual a cardinalidade esperada do conjunto e {{k, l} : k = l e h(k) = h(l)}?

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Exerc cios

Exerc 11.2-1 cio Suponha que uma funo de hash usada para mapear n chaves ca e distintas em um vetor T de tamanho m. Assumindo mapeamento uniforme simples, qual o nmero esperado de colises? Mais u o precisamente, qual a cardinalidade esperada do conjunto e {{k, l} : k = l e h(k) = h(l)}?

Exerc 11.2-3 cio Se modicssemos o esquema de encadeamento para que cada a lista fosse mantida em ordem, que impacto causar amos ao tempo de execuo de inseres, remoes e buscas? ca co co

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Exerc cios

Exerc 11.4-2 cio Escreva pseudocdigo para o algoritmo Remover-Hash-Aberto o e modique o algoritmo Inserir-Hash-Aberto para levar em conta o valor especial Deleted.

Diego de Freitas Aranha IC/UNICAMP

Tabelas de hash

Você também pode gostar