1 / 16

Pesquisa em memória primária: hashing

Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II. Hashing Dinâmico. Lembre que hashing tem tempo O(1) em média só se M = cN Se N crescer demais, esta condição será violada e a performance será afetada. Hashing Dinâmico.

kaden
Download Presentation

Pesquisa em memória primária: hashing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pesquisa em memória primária: hashing Algoritmos e Estruturas de Dados II

  2. Hashing Dinâmico Lembre que hashing tem tempo O(1) em média só se M = cN Se N crescer demais, esta condição será violada e a performance será afetada

  3. Hashing Dinâmico A solução é aumentar o tamanho da tabela por um fator f > 1 e fazer um rehashing dos elementos sempre que o fator de carga ultrapassar um limiar Se a tabela aumenta por uma porcentagem fixa, é possível mostrar que o tempo necessário para redimensionamento, distribuído sobre as operações de inserção, é uma constante

  4. Hashing Dinâmico void expande(TipoPesos p, TipoDicionario T) { T2 = NovoHeap(f * M); for (i = 0; i < M; i++) if (((strcmp(T[i].Chave, Vazio) != 0) && (strcmp(T[i].Chave, Retirado) != 0) InsereHashing(T[i].Chave,p,T2); } /* libera a memóriapara T */

  5. Hashing Dinâmico: Análise Considere a inserção de N elementos Os redimensionamentos ocorreram quando tínhamos N/f, N/f2, N/f3... Elementos O custo gasto no total foi N(1/f +1/f2 + ...), que converge para N(f/(f-1)) Assim, para inserir N elementos, gastamos cN operações no total, portanto o custo de inserção de cada elemento foi constante na média

  6. Hashing Duplo • Mecanismo para resolução de colisão • Endereçamento aberto apresenta o efeito de agrupamento • Solução: hashing duplo • Ao invés de examinar cada uma das posições sucessivas após uma colisão, uma segunda função de hashing é utilizada • Elementos inicialmente endereçados no mesmo local terão diferentes sequências de tentativas de inserção

  7. Hashing Duplo ApontadorPesquisa(TipoChave Ch, TipoPesos p, TipoDicionario T)‏{ unsigned inti=0, count = 0; unsigned intInicial, segundo; Inicial = h(Ch, p); /* transforma a chave */ segundo = h2(Inicial); /* h2(x) = ((x%97)+1) */ while ((strcmp(T[(Inicial + i) % M].Chave, Vazio) != 0) && (strcmp(T[(Inicial + i) % M].Chave, Ch) != 0) && (count < M)) { i += segundo; count++; } if (strcmp(T[(Inicial + i) % M].Chave, Ch) == 0) return ((Inicial + i) % M); else return M; /* Pesquisasemsucesso */ }

  8. Hashing Universal Para qualquer função de transformação h, de modo geral, existe um conjunto de N chaves que serão todas mapeadas na mesma posição da tabela Idéia: criar h com a introdução de elementos aleatórios Toda vez que o algoritmo for executado para um conjunto de inserções S, teremos uma função h diferente, o que distribui o custo de um eventual pior caso O valor esperado de colisões será de no máximo N/M

  9. Hashing Universal Uma família H de funções hashing é universal se para quaisquer duas chaves, a probabilidade de colisão entre as duas é de no máximo 1/M quando a função for escolhida aleatoriamente em H Se H for universal, o valor esperado de colisões entre uma chave qualquer do conjunto de possíveis chaves e chaves de um conjunto S de N chaves, para h’s escolhidas aleatoriamente em H é de no máximo N/M

  10. Hashing Universal Considere que as chaves têm u bits Considere que o tamanho da tabela é uma potência de 2, de maneira que os índices da tabela têm b bits e M = 2^b Gere aleatoriamente uma matriz b x u de 0’s e 1’s h(x) será dado por Axmod 2

  11. Hashing Universal – Exemplo

  12. Hashing Perfeito Dado um conjunto fixo S de N elementos Uma função de espalhamento h é perfeita se h(xi) ≠ h(xj) para todo i ≠ j em S Desta maneira, não haverá colisões de chaves. h é perfeita mínima se mapeia os elementos de S nos inteiros {0,...,N-1}

  13. Hashing Perfeito – Estratégia 1 Crie uma tabela com M = N^2 entradas, retire uma função h aleatoriamente de H Existe 50% de chances de ser uma função perfeita!

  14. Hashing Perfeito – Estratégia 2 Crie uma tabela de tamanho N Sorteie uma função h aleatoriamente em H Para cada posição i de T, crie um hash perfeito Ti utilizando a estratégia 1, seja hi a função de mapeamento daquele hash Seja yi o número de elementos mapeados na posição i de T, o hash Ti terá yi2 posições Para acessar x, computamos i = h(x), depois Ti [hi(x)]

  15. Hashing Perfeito – Estratégia 2 Existe uma grande probabilidade de que Isto é, dado h sorteado aleatoriamente de um conjunto universal H, a probabilidade de que seja maior que 4N é menor que 50% Portanto, este método gasta O(N) de memória

  16. Exercícios Mostre o estado final de um dicionário com resolução de conflitos por encadeamento depois da inserção das chaves q u e s t a o f c i l. Considere que o dicionário não armazena chaves duplicadas, que o valor de cada caractere é sua ordem no alfabeto e que o dicionário possui uma tabela com 5 listas (isto é, M = 5). Mostre o conteúdo de um dicionário com resolução de conflitos com endereçamento aberto depois da inserção das chaves q u e s t a o f c i l. Considere que a tabela do dicionário tem 17 posições e que o valor de cada caractere é sua ordem no alfabeto.

More Related