Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Hash tables Fábio Nakano
2
Bibliografia CLR Ziviani
3
Conjuntos dinâmicos Operações Aplicações Insere Busca Elimina
dicionários; tabelas de símbolos; índices;
4
Em um vetor
5
Listas Ligadas Classe LinkedList Complexidade de tempo para
inserção (no início / final) busca remoção (no início / final)
6
Espalhar – uma bagunça organizada
Sei exatamente onde está cada folha de papel na minha mesa!!! É uma questão de saber onde procurar !!!
7
Endereçamento direto Imagine que possa se espalhar elementos por toda a memória... ... e recuperá-los em tempo constante!!!
8
Calculando chaves No computador qualquer coisa é codificada e representada como conteúdo de memória. Este conteúdo por sua vez, pode ser visto como números. int ascii_of_A = (int)'A'; // retorna 65 int calculaChave (String txt) { int h=0; for (int i = 0; i < txt.length(); i++) { int chr = txt.charAt(i); h+= chr; } return (h%103)
9
Hash É o jeito mais eficiente de saber onde procurar.
Calcula um índice baseado na chave que se quer buscar , h(chave). O cálculo tem que ser feito em tempo constante. Para este índice ser “bom”, precisa ter a propriedade de espalhar os elementos uniformemente.
10
E em caso de colisão??? Encadeamento...
11
Hash simples e uniforme com colisões resolvidas por encadeamento
fator de carga (ou taxa de ocupação) Complexidade de uma busca sem sucesso Complexidade (média de pior caso) de uma busca com sucesso
12
Como gerar “boas” funções
Método da divisão Método da multiplicação h(k)=k mod m este método funciona melhor quando m é primo problema: primos grandes sucessivos são muito distantes entre si. h(k)=m*(A*k-floor(A*k)) há valores de A melhores que outros. Um deles é a chamada “proporção áurea” ou número de ouro.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.