Você está na página 1de 2

Exercícios:

1)

Veja três casos: nenhuma colisão, pior caso, colisão normalmente encontrada. Descreva
exemplos para cada uma destas situações e indique seu impacto na utilização deste
recurso em uma situação real.

Possível Resposta: no primeiro caso não existe nenhuma colisão com os valores de entrada e
sua representação na tabela hash. Esta situação pode ocorrer quando a quantidade de
elementos armazenados ainda é pequena ou quando é feito um tratamento prévio dos valores
de entrada para evitar colisão. Isso é possível quando todos os valores de entrada são
conhecidos de antemão, como no caso de dicionários de termos, por exemplo. Em uma
situação real, esta situação é a melhor possível, pois não é gasto tempo adicional para o
tratamento de colisão. No segundo caso existe colisão entre todos os valores de entrada, o
que poderia ocorrer com alguma configuração específica de valores, de acordo com a função
de mapeamento utilizada. No caso de ser usada uma função do tipo MOD (resto inteiro da
divisão), alguns conjuntos de valores sempre apontarão para um mesmo local na tabela. Este
caso é o pior possível para a performance da tabela hash, pois para todos os valores é
necessário o tratamento adicional da colisão, aumentando o tempo de atendimento para a
inserção ou busca de dados. O terceiro caso é o mais próximo da grande parte de casos reais,
onde existe algum percentual de colisão, mas não tão alto que seja observado um grande
impacto para a performance.

2) Veja a seguir o exemplo de sintaxe para criação de um índice HASH (depende do SGBD).
Indique duas razões que podem levar a justificar a utilização deste recurso, de tabelas
hash, em um contexto de sistemas gerenciadores de bases de dados.

CREATE INDEX nome ON tabela USING HASH (coluna);

Possível Resposta: como o tempo de busca em tabelas hash é da ordem O(1), operações de
acesso a conjuntos grandes de dados armazenados em um SGBD podem obter melhorias em
sua performance quando organizadas com este recurso. Casos onde o conjunto de dados passa
por modificações pequenas apresentam poucas possibilidades de situações de colisão e geram
melhoria de performance de buscas.

3) As colisões em tabelas hash são impossíveis de serem evitadas. Comente uma


alternativa para diminuir o número de colisões em tabelas hash.

Possível resposta: uma possibilidade para a diminuição do número de colisões passa pelo
conhecimento prévio do conjunto de dados e pela escolha da função de mapeamento. Outra
possibilidade está relacionada com o tamanho da tabela hash, que ao ser ampliado tende a
diminuir o número de colisões.

4) Em uma tabela hash com uso de encadeamento exterior, como indicado na figura
abaixo, descreva quais os métodos que podem ser usados para inserção e busca de
dados, citando outras estruturas de dados envolvidas.

Possível resposta: Neste caso, todos os recursos de inserção de dados e de busca que
utilizam as estruturas de listas podem ser utilizados.

5) Simule a inserção de chaves em uma tabela hash, considerando a função mod (resto
inteiro da divisão, como função hash. Ou seja: H(x) = x MOD m, sendo no caso m=7.
Tome como base a figura abaixo, representando a tabela hash. Insira os valores 12, 15
e 26.
0 Vazio
1 Vazio
2 Vazio
3 Vazio
4 Vazio
5 Vazio
6 Vazio

Possível resposta:
a) 12 MOD 7 = 5
b) 15 MOD 7 = 1
c) 26 MOD 7 = 5 (colisão com o valor 12)
Resultado:
0 Vazio
1 15
2 Vazio
3 Vazio
4 Vazio
5 12, 26
6 Vazio

Você também pode gostar