1 / 23

Conteúdo

Conteúdo. 1. Introdução 2. Listas 3. Filas 4. Pilhas 5. Listas Ordenadas 6. Tabelas de Dispersão (Hashing) 7. Árvores Árvore Binária e Árvore B 8. Métodos de Pesquisa de Dados 9. Métodos de Ordenação de Dados. Tabelas de Dispersão (Hashing). Motivação.

nailah
Download Presentation

Conteúdo

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. Conteúdo 1. Introdução 2. Listas 3. Filas 4. Pilhas 5. Listas Ordenadas 6. Tabelas de Dispersão (Hashing) 7. Árvores Árvore Binária e Árvore B 8. Métodos de Pesquisa de Dados 9. Métodos de Ordenação de Dados

  2. Tabelas de Dispersão (Hashing)

  3. Motivação • Grande número de operações de inserção e consulta de elementos em uma estrutura de dados. • Ocasionalmente, elementos são removidos da estrutura de dados. as operações de inserção e consulta precisam ser bem mais eficientes do que as operações de remoção. • Não é necessário que os elementos estejam ordenados. • Os elementos podem ser acessados a partir de uma chave.

  4. Exemplo Tabela de símbolos, usada durante a compilação, para referenciar os símbolos definidos pelo programador. • Sempre que um símbolo é declarado, o compilador insere uma entrada na tabela de símbolos. • Sempre que um símbolo é utilizado, o compilador verifica se os atributos associados com aquele símbolo estão sendo usados corretamente.

  5. Motivação Procura-se uma estrutura de dados para a qual as operações de inserção e consulta tenham performance O(1). • Lista encadeada  inserção : O(1) consulta : O(n) • Lista com Array  inserção : O(1) consulta : O(n) • Lista com Array ordenada  inserção : O(n) consulta : O(log n) estas estruturas não satisfazem este requisito de desempenho!

  6. Hashing Hashing: Método de pesquisa com o objetivo de melhorar a performance de busca e inclusão de chaves Metas para alcançar o objetivo: • Uso de um array: acesso direto a uma posição (O(1)) • Uso de uma função (função hash – h(ch)) que traduz um valor de chave para uma posição no array • h(ch) deve ser fácil de computar: complexidade O(1)

  7. 0 1 inscrição 1 1 2 inscrição 2 2 3 inscrição 3 3 4 inscrição 4 . . . . . . . . . M-1 M inscrição M Hashing - Exemplo Tabela Hash Exemplo: h (num inscrição) = num inscrição - 1 chave = 4  h(4) = 3 (acesso direto)

  8. Hashing - Características Tamanho do array: M • Valor estimado: número médio de chaves • Na prática, M é menor que o número máximo possível de chaves (M < n) evitar desperdício de espaço • Exemplo: chave é código do empregado  numérico com 4 dígitos • n: 0000-9999  10000 chaves possíveis • M: 2000  média de empregados na empresa

  9. Hashing - Características Função hash: h(ch)  {0, 1, ..., M - 1} • Para uma mesma chave, é produzido sempre o mesmo resultado • Como M < n, podem ocorrer colisões! • h(chx) = h(chy) = I uma colisão ocorre quando, para chaves de valores diferentes, o valor calculado pela função é o mesmo • Como minimizar colisões? • h(ch) deve gerar uma distribuição uniforme das chaves

  10. Funções Hash • Funções hash típicas: • operam sobre o resto da divisão por M  ch % M • M é um número primo  poucas divisões exatas Exemplo: n = 2500 M = 1031 h(ch) = ch % M h(23) = 23 h(24) = 24 . . . h(1401) = 70 h(1402) = 71 . . . as chaves ocupam posições consecutivas no vetor

  11. Funções Hash • Chaves grandes: • Média de chaves reais é muito menor que o máximo permitido (M << n) • Usar técnicas para reduzir o escopo {1, ..., n}  {0, ..., M-1} Exemplo: • ch é o RG • no máximo 50 empregados na empresa • função hash: somar os dígitos RG: 0000000000-9999999999  0x10 a 9x10  [0, 90] h(ch) = somaDígitos(ch) % 89

  12. Funções Hash • Chaves não-numéricas: • Aplicar duas funções: • f(ch): converte ch para uma representação numérica • g(ch): converte f(ch) para o intervalo [0, ..., M-1] • h(ch) = g(f(ch))

  13. Chaves Não-Numéricas • Técnicas para f(ch): • Soma dos códigos numéricos dos caracteres • Exemplo: A N A S I L V A • Considera apenas alguns caracteres • Exemplo: A N A_S I L V A (multiplica 1o, 5o e 8o) f(ch) = int(A)+int(N)+ ...+int(V)+int(A) g(ch) = f(ch) mod M f(ch) = int(A).int(S).int(V), se int(ch) = ASCII(ch)  máximo: 3xASCII(z) = 3x122 = 366 g(ch) = f(ch) mod 367

  14. Hashing - Operações  Inserção de elemento  Exclusão de elemento  Pesquisa de elemento  Pesquisa das chaves de todos os elementos

  15. Implementação - Hashing Algumas alternativas de implementação das tabelas de dispersão (Hashing) de acordo com o tratamento de colisões: • Encadeamento Externo: todas as chaves que forem mapeadas para a mesma posição estarão juntas em uma lista encadeada. • Encadeamento Interno: ocorrendo a colisão, a chave é colocada na próxima posição livre do array.

  16. 29205 23058 24179 18250 98858 56649 69031 69212 00507 39887 Encadeamento Externo A tabela de dispersão é implementada como um array de listas encadeadas. • Para inserir um elemento na tabela, coloca-se o elemento no final de alguma das listas encadeadas. • A lista encadeada na qual o elemento é colocado é determinada pela dispersão (função hash) do elemento.

  17. Encadeamento Externo - Exemplo chave hash ( chave ) 29205 0 69212 2 18250 0 69031 1 23058 3 00507 2 24179 4 39887 2 98858 3 56649 4 hash (chave) = chave MOD 5

  18. 29205 69212 29205 Encadeamento Externo - Exemplo início entra 29205 entra 69212

  19. 69212 29205 23058 24179 18250 98858 56649 69031 18250 29205 69212 00507 39887 Encadeamento Externo - Exemplo entra 18250 tabela completa

  20. Encadeamento Externo - Operações Complexidade  Inserção de elemento O(1)  Exclusão de elemento O(n) : pior caso O(n/M) : caso médio  Pesquisa de elemento O(n) : pior caso O(n/M) : caso médio

  21. Encadeamento Interno A tabela de dispersão é implementada como um vetor onde a chave que colidiu é armazenada na primeira entrada livre a partir do endereço calculado. chave hash(chave) CLAUDIA JOAO 5 0 MARIA MARIA 1 1 JORGE FERNANDO 5 2 PEDRO CLAUDIA 0 3 MARCIA 7 4 JOAO JORGE 6 5 FERNANDO PEDRO 1 6 MARCIA 7

  22. Encadeamento Interno • Os elementos que possuem chaves sinônimas (que produzem o mesmo endereço) também são armazenados na própria tabela. não envolve o uso de encadeamento • No caso de ocorre uma colisão, procura-se em uma seqüência de posições da tabela até se encontrar a chave procurada ou uma posição não ocupada. • A forma mais simples é procurar as posições consecutivas ao endereço gerado pela função hash. • Pode-se utilizar uma outra função para calcular o incremento do novo endereço (ao invés de usar o incremento 1). • Quando o endereço produzido pela função hash está ocupado por uma chave que não é sinônimo, ocorre uma pseudo-colisão.

  23. Encadeamento Interno - Operações Complexidade  Inserção de elemento O(n) : pior caso  Exclusão de elemento O(n) : pior caso  Pesquisa de elemento O(n) : pior caso

More Related