UNIDADE III Estruturas de Dados Moderna Estruturas de Dados Moderna – Tabela de dispersão p ((Hash Hash)) Tem por objetivo alocar elementos em posições definidas por uma função de posicionamento (função hash). Tal função serve como índice do elemento alocado na tabela Em Computação, a Tabela Hash é uma estrutura de dados especial, que armazena as informações d desejadas, j d associando i d chaves h d pesquisa de i a estas informações. Obj ti Objetivo: a partir ti de d uma chave, h f fazer uma busca b rápida e obter o valor desejado. Aplicações: ideal para criação de dicionários de dados Fonte: Alexandre Parra e Felipe Chiapini et.al. Estruturas de Dados Moderna – Tabela de dispersão p ((Hash Hash)) – como representar p ` ` ` Implementa se uma lista encadeada, Implementa-se encadeada onde cada par da tabela hash é alocado em uma posição dessa lista, definida p pela função ç hash. Ao mesmo tempo, cria-se um vetor dinâmico, que armazenará os índices resultantes da função hash. Para localizar um elemento na tabela hash, faz-se a pesquisa no vetor de índices. Caso o elemento seja encontrado, t d o índice í di apontará t á para a posição i ã correspondente na lista encadeada formadora da tabela hash. hash Estruturas de Dados Moderna – Tabela de dispersão p ((Hash Hash)) – p problema p potencial ` ` ` ` ` Quando duas ou mais chaves geram o mesmo endereço da Tabela as , d dizemos e os que houve ou e u uma a co colisão. são Hash, É comum ocorrer colisões. Um bom método de resolução de colisões é essencial, não importando a qualidade da função hash. hash Há diversas técnicas de resolução de colisão. A técnica mais comum consiste no encadeamento externo,, onde a informação é armazenada em estruturas encadeadas, fora da tabela hash. Ex: para a função hash f(x)= x%10, e, para a entrada dos elementos 10, 15, 22, 51, 48, 25, temos: Solução: Encadear E d 15 com 25 Colisão: 15 com 25 Lista encadeada d d externa Estruturas de Dados Moderna – Tabela de dispersão p ((Hash Hash)) – simulação ç p prática ` ` Utilizar o programa hash_exemplo.cpp hash exemplo cpp para simular o exemplo visto na transparência anterior, bem como simular outros exemplos. p Utilizar, agora, o programa gráfico Hash.exe, escolhendo o algoritmo Encadeamento Externo (Algorithms/External Chaining) e insira os mesmos elementos do exemplo anterior. Notar-se-á elementos que colidirão, colidirão mas o algoritmo encadeará os elementos em colisão, formando outra lista encadeada. Estruturas de Dados Moderna – Tabela de dispersão (Hash) Hash) – outra forma de resolução e simulação prática ` ` Outra técnica consiste em alocar o elemento de conflito em algum espaço vago da lista, evitando, assim, o conflito, porém esse método é mais custoso, visto que o algoritmo terá de localizar, sequencialmente, qual o próximo elemento livre da lista. Para exemplificar, execute o programa gráfico H h Hash.exe, escolhendo lh d o algoritmo l i H h Linear Hash Li (Algorithms/linear rehashing) e insira os mesmos elementos do exemplo anterior. Notar Notar-se-á se á elementos que colidirão, mas o algoritmo localizará qual o próximo espaço vago na lista. Estruturas de Dados Moderna – Tabela de dispersão (Hash) Hash) – desafios ` ` ` ` Desafio 10 – Construir um programa, em C, que crie uma tabela h h de hash d números ú reais i e que trate t t as colisões li õ através t é do d algoritmo l it Encadeamento Externo, permitindo as operações de inserção, exclusão e pesquisa de um elemento. OBS: utilizar lista encadeada. D Desafio fi 11 – Construir C t i um programa, em C, C que crie i uma tabela t b l hash de nomes e que trate as colisões através do algoritmo Encadeamento Externo, permitindo as operações de inserção, exclusão e pesquisa de um elemento. elemento OBS: utilizar lista encadeada. encadeada Desafio 12 – Construir um programa, em C, que crie uma tabela hash de números reais e que trate as colisões através do algoritmo H h Linear, Hash Li permitindo iti d as operações õ d inserção, de i ã exclusão l ã e pesquisa de um elemento. OBS: utilizar vetor estático ou dinâmico. Desafio 13 – Construir um programa, em C, que crie uma tabela h h de hash d nomes e que trate t t as colisões li õ através t é do d algoritmo l it H h Hash Linear, permitindo as operações de inserção, exclusão e pesquisa de um elemento. OBS: utilizar vetor estático ou dinâmico. UNIDADE III Tabela Hash FIM