Escolar Documentos
Profissional Documentos
Cultura Documentos
Hash 2
Hash 2
4 de setembro de 2007
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
Tabelas de hash
Tabelas de hash
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
Soluo: Utilizar uma funo de hash h para mapear um ca ca elemento x ` sua chave k = h(x). a
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
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.
Tabelas de hash
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
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
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)];
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.
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).
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
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
Tabelas de hash
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
Tabelas de hash
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.
Tabelas de hash
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.
Tabelas de hash
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
Tabelas de hash
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
Tabelas de hash
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.
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.
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
Tabelas de hash
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
= ;
Tabelas de hash
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
Tabelas de hash
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.
Tabelas de hash
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
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
Tabelas de hash
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
Tabelas de hash
Tabelas de hash
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.
Tabelas de hash
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.
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
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
Tabelas de hash
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 ).
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
Tabelas de hash
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
Tabelas de hash
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.
Tabelas de hash
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
Tabelas de hash
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}.
Tabelas de hash
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
Tabelas de hash
Complexidade Insero: consiste em encontrar uma posio desocupada ca ca (busca sem sucesso). Logo, a complexidade O(1) no caso e mdio. e
Tabelas de hash
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
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
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
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.
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
Tabelas de hash
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
Tabelas de hash
Tabelas de hash
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
nj2 2n 1 = (n)
j=0
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
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
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)}?
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
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.
Tabelas de hash