Escolar Documentos
Profissional Documentos
Cultura Documentos
09 de Novembro de 2021
Tabelas Hash
Introdução:
Eliminação das Palavras Repetidas: Inicialmente essa questão requisita que as palavras repetidas sejam
eliminadas então para remover os nomes repetidos o arquivo é lido e seus nomes são armazenados em
um arrayList de forma que um nome que já está contido no arrayList não possa ser armazenado
novamente, então é criado um novo arquivo chamado “talemodificado.txt” que recebe a todos os
nomes contidos no arrayList, criando assim um arquivo sem palavras repetidas.
Criação e Preenchimento da Tabela Hash: A tabela hash, pega do livro e utilizando a função hash:
HashTextBook, é primeiramente instanciada com seu M = 100 e logo em seguida usando de um loop
while() o arquivo “talemodificado.txt” é lido e cada uma de suas linhas é posta na tabela hash, em
seguida a quantidade de elementos dentro da tabela hash é impressa.
Histograma:
Este exemplo conta com um M = 100 e um total de 19695 elementos tendo um fator de carga de 197
Questão 2: Fazer um histograma para as palavras do arquivo tale.txt (sem repetições), com
M = 97, mas alguma função de hashing diferente da usada na questão acima.
R – Nessa Questão foi utilizado a função Hash e este foi o histograma resultante:
Como esta função Hash retorna muitos valores iguais, as posições acabaram sem muita variação acabando
longe de seu fator de carga que neste caso é de aprox. 197, mostrando sua diferença com a função
HashTextBook que possui o mesmo fator de carga e consegue atende-lo de forma muito melhor.
Questão 4: Responder à pergunta: Podemos ter 𝛂 < 1 numa tabela de hash com
encadeamento? Justificar a resposta.
R - Sim. Como alfa é calculado pela divisão de N(número de chaves) pelo M(Número de posições da tabela)
para que alfa seja menor que 0 basta que o N seja menor que M.
E 5 0
A 1 1
S 19 4
Y 25 0
Q 17 2
U 21 1
T 20 0
I 9 4
O 15 0
N 14 4
Tabela Hash
Posição | Chaves
0 OTYE
1 UA
2 Q
3
4 NIS
Questão 6: Discutir a complexidade da implementação das operações: min(), max(), floor() e
ceiling() em tabelas de símbolos implementadas com tabelas de hash?
R - Devido a forma como uma tabela hash insere seus elementos é esperado que eles não estejam ordenados,
logo a operação min() precisaria varrer toda a tabela em busca do menor elemento já que este pode se localizar
em qualquer posição da tabela, sendo o mesmo valido para a operação max() que retorna o maior valor na
tabela e precisaria varre-la pois o mesmo poderia estar em qualquer posição. Enquanto isso as operações
floor() e ceiling() apesar de sofrerem da mesma maneira podem ser mais rapidas caso a pesquisa se inicie na
posição do elemento passado na função pois as funções pedem <= e >= respectivamente, resultando no melhor
caso se o elemento estiver na tabela, e em caso de o elemento não ser encontrado na tabela a pesquisa pode a
partir dali conferir as chaves anteriores a ele no caso da função floor() e as chaves superiores no caso da
função ceiling() já que as chances de elementos menores e maiores estarem nessa ordenação é maior.