O documento descreve a técnica de endereçamento direto para implementar dicionários dinâmicos. Ele explica como mapear chaves diretamente para posições de um array, permitindo buscas, inserções e remoções em tempo constante. No entanto, essa abordagem funciona bem apenas para conjuntos pequenos de chaves, pois pode ocorrer colisões para conjuntos maiores.
O documento descreve o conceito de endereçamento aberto em tabelas de hash. Ele explica que o endereçamento aberto usa posições vazias em uma tabela de tamanho fixo para resolver colisões, examinando sistematicamente a tabela até encontrar um espaço vazio ou determinar que a chave não está presente. A inclusão de um elemento requer sondar a tabela até encontrar um espaço vazio, usando uma função de hash que leva em conta o número da sondagem para gerar a próxima posição a ser examinada.
O documento descreve heaps, que são estruturas de dados definidas como árvores binárias quase completas onde cada nó satisfaz certas propriedades em relação aos seus filhos. São definidos heaps máximos, onde cada nó tem valor maior ou igual aos filhos, e heaps mínimos, onde cada nó tem valor menor ou igual aos filhos. Visualizações de heaps máximos e mínimos são apresentadas para ilustrar como a estrutura atende às definições.
O documento descreve o modelo incremental para projetar algoritmos de ordenação por indução fraca. Ele apresenta o padrão geral seguido por algoritmos incrementais, que ordenam incrementalmente subconjuntos de tamanho crescente dos dados de entrada. Como exemplo, é descrito o algoritmo de inserção, que ordena um conjunto de tamanho n inserindo recursivamente o elemento restante em um conjunto já ordenado de tamanho n-1.
O documento descreve o algoritmo de ordenação QuickSort, que utiliza a técnica de divisão e conquista. QuickSort divide o arranjo de entrada em dois sub-arranjos, ordena os sub-arranjos recursivamente e combina os resultados para ordenar o arranjo completo. O particionamento do arranjo é a etapa chave que divide o problema em subproblemas menores.
O documento descreve o conceito de endereçamento aberto em tabelas de hash. Ele explica que o endereçamento aberto usa posições vazias em uma tabela de tamanho fixo para resolver colisões, examinando sistematicamente a tabela até encontrar um espaço vazio ou determinar que a chave não está presente. A inclusão de um elemento requer sondar a tabela até encontrar um espaço vazio, usando uma função de hash que leva em conta o número da sondagem para gerar a próxima posição a ser examinada.
O documento descreve heaps, que são estruturas de dados definidas como árvores binárias quase completas onde cada nó satisfaz certas propriedades em relação aos seus filhos. São definidos heaps máximos, onde cada nó tem valor maior ou igual aos filhos, e heaps mínimos, onde cada nó tem valor menor ou igual aos filhos. Visualizações de heaps máximos e mínimos são apresentadas para ilustrar como a estrutura atende às definições.
O documento descreve o modelo incremental para projetar algoritmos de ordenação por indução fraca. Ele apresenta o padrão geral seguido por algoritmos incrementais, que ordenam incrementalmente subconjuntos de tamanho crescente dos dados de entrada. Como exemplo, é descrito o algoritmo de inserção, que ordena um conjunto de tamanho n inserindo recursivamente o elemento restante em um conjunto já ordenado de tamanho n-1.
O documento descreve o algoritmo de ordenação QuickSort, que utiliza a técnica de divisão e conquista. QuickSort divide o arranjo de entrada em dois sub-arranjos, ordena os sub-arranjos recursivamente e combina os resultados para ordenar o arranjo completo. O particionamento do arranjo é a etapa chave que divide o problema em subproblemas menores.
O documento discute estimativas de erro em modelos de aprendizagem de máquina. Explica que o erro esperado no conjunto de teste tende a ser maior que no conjunto de treino, devido ao ajuste do modelo aos dados de treino. Também aborda medidas como viés e variância para avaliar estimadores, e como o erro quadrático médio equilibra ambos para medir o desvio total esperado entre a estimativa e o valor real.
O documento discute a avaliação de desempenho de classificadores treinados. Explica que é necessário testar o modelo em um conjunto de dados independente para medir seu desempenho em dados novos. Também apresenta métricas como taxa de erro e curva de aprendizagem para avaliar quantitativamente o modelo.
O documento descreve o algoritmo de máquina de vetor de suporte (SVM), explicando como ele busca encontrar o hiperplano separador de margem máxima entre os dados de treinamento de duas classes. O SVM define fronteiras lineares ótimas para dados linearmente separáveis, maximizando a distância entre o hiperplano separador e os exemplos de treinamento mais próximos, chamados de vetores de suporte. O problema é formulado como um problema de otimização para encontrar os parâmetros ω e b que maximizam essa distância de separação.
O documento descreve as redes neurais e o perceptron. Ele explica que as redes neurais se inspiram nos neurônios biológicos e como o perceptron funciona como a unidade básica de uma rede neural, recebendo sinais de entrada e aplicando uma função de ativação. Também discute possíveis funções de ativação como a função degrau e sigmóide e como os pesos das conexões, incluindo o viés, determinam se um perceptron é ativado ou não.
O documento discute árvores de decisão e florestas aleatórias. Ele explica que árvores de decisão são uma das formas mais simples de aprendizado de máquina, representando uma sequência de regras "se...então" para classificar ou prever saídas com base em atributos de entrada. O documento também descreve características como nós internos representando testes de atributos e folhas especificando saídas, e discute expressividade e variações de árvores de decisão.
O documento discute aprendizado supervisionado bayesiano. Ele introduz o aprendizado bayesiano como um método probabilístico e descreve que o aprendizado supervisionado tem como objetivo classificação ou regressão para mapear entradas em saídas com base em exemplos.
O documento descreve a regra de Bayes e redes Bayesianas. Ele fornece um exemplo detalhado sobre como calcular a probabilidade de uma mulher ter câncer de mama dado um resultado positivo em um mamograma usando a regra de Bayes. Ele também define brevemente o que são redes Bayesianas, que representam dependências probabilísticas entre variáveis aleatórias através de um grafo direcionado acíclico.
O documento discute o tratamento de incerteza em inteligência artificial. Aborda como a probabilidade e a teoria da decisão podem ser usadas para tomar decisões racionais quando os resultados são incertos, levando em conta a probabilidade de cada resultado e sua utilidade segundo as preferências de quem decide.
O documento discute representação do conhecimento através de ontologias, incluindo taxonomias e herança. Ontologias organizam o conhecimento em categorias hierárquicas e permitem raciocinar sobre objetos classificados. Categorias podem ser representadas como predicados ou objetos. A herança permite que propriedades sejam herdadas por subcategorias.
O documento descreve o funcionamento do algoritmo de backward chaining em programação lógica, começando com uma explicação geral do processo de raciocínio de trás para frente a partir de um objetivo. Em seguida, apresenta formalmente o algoritmo de backward chaining, explicando cada parte do processo de forma recursiva para encontrar substituições que satisfaçam a query dada uma base de conhecimento. Por fim, exemplifica o algoritmo em uma base de conhecimento sobre venda de armas.
O documento descreve os passos para executar resolução e encadeamento para frente em lógica de primeira ordem. Primeiro, as expressões lógicas devem ser convertidas para forma clausal sem quantificadores. Em seguida, as variáveis devem ser substituídas durante a resolução usando o processo de unificação. Por fim, a resolução é executada para derivar novas conclusões.
O documento descreve as bases de dados em lógica de primeira ordem, como interagir com elas fazendo buscas (queries) por meio de sentenças lógicas em LPO, e como qualquer query que possa ser inferida logicamente pela base de dados será respondida afirmativamente. As bases de dados contêm axiomas com informações básicas e teoremas derivados dos axiomas, e o documento discute técnicas como forward chaining, backward chaining e resolução para realizar inferência nas bases de dados.
O documento descreve uma aula sobre lógica de primeira ordem. Apresenta os elementos básicos da lógica de primeira ordem, incluindo termos, predicados e a gramática formal para construir sentenças. Também explica como modelos e interpretações funcionam na lógica de primeira ordem, diferentemente da lógica proposicional.
O documento discute inferência em lógica proposicional, incluindo tipos de provas como verificação de modelos e aplicação de regras de inferência. Ele explica como aplicar regras de inferência como modus ponens e modus tollens para derivar novas sentenças a partir de premissas, formando uma prova.
O documento descreve um algoritmo de busca retroativa para resolver problemas de satisfação de restrições, utilizando forward checking e heurísticas como valores restantes mínimos, grau e valor menos restritivo. O algoritmo é demonstrado passo a passo em um exemplo de coloração de grafos, definindo variáveis, valores e propagando escolhas.
O documento descreve problemas de satisfação de restrições (CSPs), definidos por um conjunto de variáveis, domínios de valores para cada variável, e restrições sobre combinações de valores de variáveis. Apresenta exemplos de agendamento de aulas e coloração de mapas como CSPs, definindo suas variáveis, domínios e restrições.
O documento discute algoritmos genéticos e representação de cromossomos. Ele explica que os cromossomos podem ser representados de várias formas, incluindo binária, valores inteiros e reais. A representação binária é a mais simples, onde o cromossomo consiste de uma sequência de bits. A mutação e o cruzamento ocorrem durante o algoritmo genético para gerar novas soluções.
O Que é Um Ménage à Trois?
A sociedade contemporânea está passando por grandes mudanças comportamentais no âmbito da sexualidade humana, tendo inversão de valores indescritíveis, que assusta as famílias tradicionais instituídas na Palavra de Deus.
O documento discute estimativas de erro em modelos de aprendizagem de máquina. Explica que o erro esperado no conjunto de teste tende a ser maior que no conjunto de treino, devido ao ajuste do modelo aos dados de treino. Também aborda medidas como viés e variância para avaliar estimadores, e como o erro quadrático médio equilibra ambos para medir o desvio total esperado entre a estimativa e o valor real.
O documento discute a avaliação de desempenho de classificadores treinados. Explica que é necessário testar o modelo em um conjunto de dados independente para medir seu desempenho em dados novos. Também apresenta métricas como taxa de erro e curva de aprendizagem para avaliar quantitativamente o modelo.
O documento descreve o algoritmo de máquina de vetor de suporte (SVM), explicando como ele busca encontrar o hiperplano separador de margem máxima entre os dados de treinamento de duas classes. O SVM define fronteiras lineares ótimas para dados linearmente separáveis, maximizando a distância entre o hiperplano separador e os exemplos de treinamento mais próximos, chamados de vetores de suporte. O problema é formulado como um problema de otimização para encontrar os parâmetros ω e b que maximizam essa distância de separação.
O documento descreve as redes neurais e o perceptron. Ele explica que as redes neurais se inspiram nos neurônios biológicos e como o perceptron funciona como a unidade básica de uma rede neural, recebendo sinais de entrada e aplicando uma função de ativação. Também discute possíveis funções de ativação como a função degrau e sigmóide e como os pesos das conexões, incluindo o viés, determinam se um perceptron é ativado ou não.
O documento discute árvores de decisão e florestas aleatórias. Ele explica que árvores de decisão são uma das formas mais simples de aprendizado de máquina, representando uma sequência de regras "se...então" para classificar ou prever saídas com base em atributos de entrada. O documento também descreve características como nós internos representando testes de atributos e folhas especificando saídas, e discute expressividade e variações de árvores de decisão.
O documento discute aprendizado supervisionado bayesiano. Ele introduz o aprendizado bayesiano como um método probabilístico e descreve que o aprendizado supervisionado tem como objetivo classificação ou regressão para mapear entradas em saídas com base em exemplos.
O documento descreve a regra de Bayes e redes Bayesianas. Ele fornece um exemplo detalhado sobre como calcular a probabilidade de uma mulher ter câncer de mama dado um resultado positivo em um mamograma usando a regra de Bayes. Ele também define brevemente o que são redes Bayesianas, que representam dependências probabilísticas entre variáveis aleatórias através de um grafo direcionado acíclico.
O documento discute o tratamento de incerteza em inteligência artificial. Aborda como a probabilidade e a teoria da decisão podem ser usadas para tomar decisões racionais quando os resultados são incertos, levando em conta a probabilidade de cada resultado e sua utilidade segundo as preferências de quem decide.
O documento discute representação do conhecimento através de ontologias, incluindo taxonomias e herança. Ontologias organizam o conhecimento em categorias hierárquicas e permitem raciocinar sobre objetos classificados. Categorias podem ser representadas como predicados ou objetos. A herança permite que propriedades sejam herdadas por subcategorias.
O documento descreve o funcionamento do algoritmo de backward chaining em programação lógica, começando com uma explicação geral do processo de raciocínio de trás para frente a partir de um objetivo. Em seguida, apresenta formalmente o algoritmo de backward chaining, explicando cada parte do processo de forma recursiva para encontrar substituições que satisfaçam a query dada uma base de conhecimento. Por fim, exemplifica o algoritmo em uma base de conhecimento sobre venda de armas.
O documento descreve os passos para executar resolução e encadeamento para frente em lógica de primeira ordem. Primeiro, as expressões lógicas devem ser convertidas para forma clausal sem quantificadores. Em seguida, as variáveis devem ser substituídas durante a resolução usando o processo de unificação. Por fim, a resolução é executada para derivar novas conclusões.
O documento descreve as bases de dados em lógica de primeira ordem, como interagir com elas fazendo buscas (queries) por meio de sentenças lógicas em LPO, e como qualquer query que possa ser inferida logicamente pela base de dados será respondida afirmativamente. As bases de dados contêm axiomas com informações básicas e teoremas derivados dos axiomas, e o documento discute técnicas como forward chaining, backward chaining e resolução para realizar inferência nas bases de dados.
O documento descreve uma aula sobre lógica de primeira ordem. Apresenta os elementos básicos da lógica de primeira ordem, incluindo termos, predicados e a gramática formal para construir sentenças. Também explica como modelos e interpretações funcionam na lógica de primeira ordem, diferentemente da lógica proposicional.
O documento discute inferência em lógica proposicional, incluindo tipos de provas como verificação de modelos e aplicação de regras de inferência. Ele explica como aplicar regras de inferência como modus ponens e modus tollens para derivar novas sentenças a partir de premissas, formando uma prova.
O documento descreve um algoritmo de busca retroativa para resolver problemas de satisfação de restrições, utilizando forward checking e heurísticas como valores restantes mínimos, grau e valor menos restritivo. O algoritmo é demonstrado passo a passo em um exemplo de coloração de grafos, definindo variáveis, valores e propagando escolhas.
O documento descreve problemas de satisfação de restrições (CSPs), definidos por um conjunto de variáveis, domínios de valores para cada variável, e restrições sobre combinações de valores de variáveis. Apresenta exemplos de agendamento de aulas e coloração de mapas como CSPs, definindo suas variáveis, domínios e restrições.
O documento discute algoritmos genéticos e representação de cromossomos. Ele explica que os cromossomos podem ser representados de várias formas, incluindo binária, valores inteiros e reais. A representação binária é a mais simples, onde o cromossomo consiste de uma sequência de bits. A mutação e o cruzamento ocorrem durante o algoritmo genético para gerar novas soluções.
O Que é Um Ménage à Trois?
A sociedade contemporânea está passando por grandes mudanças comportamentais no âmbito da sexualidade humana, tendo inversão de valores indescritíveis, que assusta as famílias tradicionais instituídas na Palavra de Deus.
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoMateusTavares54
Quer aprender inglês e espanhol de um jeito divertido? Aqui você encontra atividades legais para imprimir e usar. É só imprimir e começar a brincar enquanto aprende!
Atividade letra da música - Espalhe Amor, Anavitória.Mary Alvarenga
A música 'Espalhe Amor', interpretada pela cantora Anavitória é uma celebração do amor e de sua capacidade de transformar e conectar as pessoas. A letra sugere uma reflexão sobre como o amor, quando verdadeiramente compartilhado, pode ultrapassar barreiras alcançando outros corações e provocando mudanças positivas.
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24, Pr Henrique, EBD NA TV, Lições Bíblicas, 2º Trimestre de 2024, adultos, Tema, A CARREIRA QUE NOS ESTÁ PROPOSTA, O CAMINHO DA SALVAÇÃO, SANTIDADE E PERSEVERANÇA PARA CHEGAR AO CÉU, Coment Osiel Gomes, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, de Almeida Silva, tel-What, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
(ACH2002) Introdução à Análise de Algoritmos - Aula 19
1. Aula 19 – Hashing: Endere¸camento
Direto e Resolu¸c˜ao de Colis˜oes
Norton Trevisan Roman
norton@usp.br
8 de novembro de 2018
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 1 / 32
2. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Imagine que queremos construir um m´etodo que
retorne a vers˜ao por extenso de um numeral de um
´unico d´ıgito
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
3. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Imagine que queremos construir um m´etodo que
retorne a vers˜ao por extenso de um numeral de um
´unico d´ıgito
Onde a chave de busca ´e o d´ıgito, e o valor resultante ´e sua
vers˜ao por extenso
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
4. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Imagine que queremos construir um m´etodo que
retorne a vers˜ao por extenso de um numeral de um
´unico d´ıgito
Onde a chave de busca ´e o d´ıgito, e o valor resultante ´e sua
vers˜ao por extenso
Queremos ent˜ao um m´etodo
que implemente a seguinte
tabela:
Chave Valor
0 “zero”
1 “um”
. . . . . .
9 “nove”
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
5. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
6. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
7. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
8. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Mas sempre no intervalo entre 0 e 9
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
9. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Mas sempre no intervalo entre 0 e 9
Como podemos fazer?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
10. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Mas sempre no intervalo entre 0 e 9
Como podemos fazer?
Criando um Dicion´ario Dinˆamico
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
11. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Para isso, definimos o elemento a ser armazenado:
class Elemento {
int valor;
String extenso;
Elemento(int valor, String extenso) {
this.valor = valor;
this.extenso = extenso;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 4 / 32
12. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
13. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
class Dicionario {
Elemento[] elementos = new
Elemento[10];
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
14. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Inserir um elemento
class Dicionario {
Elemento[] elementos = new
Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave,
ext);
elementos[chave] = el;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
15. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Inserir um elemento
Remover um
elemento
class Dicionario {
Elemento[] elementos = new
Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave,
ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
16. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Inserir um elemento
Remover um
elemento
Buscar um
elemento
class Dicionario {
Elemento[] elementos = new
Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave,
ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
17. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
class Dicionario {
Elemento[] elementos = new Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave, ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
18. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Note que fizemos um
mapeamento direto
da chave `a posi¸c˜ao do
elemento no arranjo
class Dicionario {
Elemento[] elementos = new Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave, ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
19. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
E isso faz com que inser¸c˜oes,
buscas e remo¸c˜oes, usando
a chave, rodem em Θ(1)
class Dicionario {
Elemento[] elementos = new Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave, ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
20. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
21. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
22. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Sob essas condi¸c˜oes, podemos representar o
conjunto com uma Tabela de Endere¸camento Direto
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
23. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Sob essas condi¸c˜oes, podemos representar o
conjunto com uma Tabela de Endere¸camento Direto
Onde cada posi¸c˜ao corresponde a uma chave no universo U
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
24. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Sob essas condi¸c˜oes, podemos representar o
conjunto com uma Tabela de Endere¸camento Direto
Onde cada posi¸c˜ao corresponde a uma chave no universo U
A tabela ser´a ent˜ao do tamanho do universo
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
25. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e aplic´avel quando podemos nos dar ao luxo
de alocar um arranjo que tem uma posi¸c˜ao para cada poss´ıvel chave
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 8 / 32
26. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
27. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
28. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
29. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Uma chave, que comece do 0 e v´a at´e n, o n´umero de
pessoas cadastradas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
30. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Uma chave, que comece do 0 e v´a at´e n, o n´umero de
pessoas cadastradas
E se precisarmos remover algu´em?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
31. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Uma chave, que comece do 0 e v´a at´e n, o n´umero de
pessoas cadastradas
E se precisarmos remover algu´em?
Basta removermos o registro, como fizemos antes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
32. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
33. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
34. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
35. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
36. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Atualizar o identificador no registro, dando a ele o valor
dessa posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
37. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Atualizar o identificador no registro, dando a ele o valor
dessa posi¸c˜ao
Armazenar o registro l´a
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
38. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Atualizar o identificador no registro, dando a ele o valor
dessa posi¸c˜ao
Armazenar o registro l´a
Θ(n)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
39. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
40. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
41. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Fazendo o mapeamento
direto `a tabela
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
42. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Fazendo o mapeamento
direto `a tabela
Volta a ser Θ(1) no
tempo
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
43. Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Fazendo o mapeamento
direto `a tabela
Volta a ser Θ(1) no
tempo
Mas a tabela ficar´a
gigantesca!
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
44. Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
45. Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
46. Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
47. Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Que fazer ent˜ao?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
48. Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Que fazer ent˜ao?
Fixar o tamanho da tabela, e mapear a chave de cada
registro a uma de suas posi¸c˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
49. Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Que fazer ent˜ao?
Fixar o tamanho da tabela, e mapear a chave de cada
registro a uma de suas posi¸c˜oes
Criamos assim uma Tabela de Espalhamento, ou Tabela
de Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
50. Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
51. Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
52. Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
53. Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos
o ´ındice a partir da chave
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
54. Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos
o ´ındice a partir da chave
Tipicamente, a tabela tem tamanho proporcional ao
n´umero de chaves realmente armazenadas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
55. Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos
o ´ındice a partir da chave
Tipicamente, a tabela tem tamanho proporcional ao
n´umero de chaves realmente armazenadas
Pouco desperd´ıcio de mem´oria
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
56. Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
57. Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
58. Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
h : U → {0, 1, . . . , m − 1}, para T[0..m − 1]
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
59. Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
h : U → {0, 1, . . . , m − 1}, para T[0..m − 1]
Tipicamente m |U|
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
60. Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
h : U → {0, 1, . . . , m − 1}, para T[0..m − 1]
Tipicamente m |U|
Dizemos que h(k) ´e o valor de hash da chave k
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
61. Tabela de Hash
Endere¸camento Direto × Hash
Direto Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
62. Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
63. Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
64. Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
65. Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
O elemento com chave k
´e armazenado em h(k)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
66. Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
O elemento com chave k
´e armazenado em h(k)
|T| = m |U|
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
67. Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
O elemento com chave k
´e armazenado em h(k)
|T| = m |U|
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
68. Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
69. Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
70. Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
71. Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
72. Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Que fazer nesses casos?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
73. Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
74. Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de
todas as chaves cujo valor de hash ´e h(k) = j
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
75. Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de
todas as chaves cujo valor de hash ´e h(k) = j
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
76. Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de
todas as chaves cujo valor de hash ´e h(k) = j
Ou seja, encadeamos todos os elementos que s˜ao mapeados
`a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
77. Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
78. Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Hash + acesso `a posi¸c˜ao:
Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
79. Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Hash + acesso `a posi¸c˜ao:
Θ(1)
Inclus˜ao na lista: Θ(1) (para o hashing) +Θ(1) (para a
inclus˜ao), se incluirmos sempre no in´ıcio da lista em T[h(ki )]
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
80. Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Hash + acesso `a posi¸c˜ao:
Θ(1)
Inclus˜ao na lista: Θ(1) (para o hashing) +Θ(1) (para a
inclus˜ao), se incluirmos sempre no in´ıcio da lista em T[h(ki )]
Busca e exclus˜ao: Θ(1) (hashing) +Θ(c) (busca), onde c ´e
o n´umero de elementos na lista em T[h(ki )]
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
81. Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
82. Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
83. Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
84. Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
85. Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Mas e o caso m´edio?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
86. Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Mas e o caso m´edio?
Vai depender de qu˜ao boa ´e nossa fun¸c˜ao de hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
87. Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Mas e o caso m´edio?
Vai depender de qu˜ao boa ´e nossa fun¸c˜ao de hash
Se ela mapear todos a algumas poucas posi¸c˜oes,
terminaremos com o mesmo custo da lista ligada novamente
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
88. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
89. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
90. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
91. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Nesse caso, o comprimento esperado de cada lista ´e
de n/m
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
92. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Nesse caso, o comprimento esperado de cada lista ´e
de n/m
Nos levando `a complexidade de Θ(n/m) para buscas e
exclus˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
93. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Nesse caso, o comprimento esperado de cada lista ´e
de n/m
Nos levando `a complexidade de Θ(n/m) para buscas e
exclus˜oes
α = n/m ´e chamado de fator de carga do hash → o
n´umero m´edio de elementos armazenados nas listas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
94. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
95. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e
Θ(n/m) = Θ(Θ(m)/m) = Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
96. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e
Θ(n/m) = Θ(Θ(m)/m) = Θ(1)
Ou seja, em m´edia, e sob a condi¸c˜ao de que
m = Θ(n), buscas e remo¸c˜oes levam Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
97. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e
Θ(n/m) = Θ(Θ(m)/m) = Θ(1)
Ou seja, em m´edia, e sob a condi¸c˜ao de que
m = Θ(n), buscas e remo¸c˜oes levam Θ(1)
E todas as opera¸c˜oes (inser¸c˜ao, remo¸c˜ao e busca)
em uma tabela de hash podem ser feitas em um
tempo m´edio de Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
98. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
99. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de
probabilidade dos dados a serem armazenados
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
100. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de
probabilidade dos dados a serem armazenados
E mesmo que tiv´essemos, pode ocorrer que elas n˜ao sejam
obtidas de forma independente
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
101. Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de
probabilidade dos dados a serem armazenados
E mesmo que tiv´essemos, pode ocorrer que elas n˜ao sejam
obtidas de forma independente
Se soub´essemos, por exemplo, que as chaves est˜ao
uniformemente distribu´ıdas entre 0 e 1, ent˜ao a
fun¸c˜ao h(k) = km satisfaz essa condi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
102. Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
103. Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
104. Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
105. Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
106. Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Onde mod ´e o resto da divis˜ao → equivalente ao operador %
em java
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
107. Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Onde mod ´e o resto da divis˜ao → equivalente ao operador %
em java
Computar h(k) torna-se O(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
108. Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Onde mod ´e o resto da divis˜ao → equivalente ao operador %
em java
Computar h(k) torna-se O(1)
Escolher, para m, um n´umero primo n˜ao muito perto de uma
potˆencia de 2 ´e frequentemente uma boa escolha
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
109. Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
110. Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
111. Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Basta mape´a-lo a um inteiro (seu ASCII, por exemplo)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
112. Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Basta mape´a-lo a um inteiro (seu ASCII, por exemplo)
E se for um String?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
113. Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Basta mape´a-lo a um inteiro (seu ASCII, por exemplo)
E se for um String?
Podemos gerar uma chave inteira k fazendo k =
n−1
i=0
ci × pi
onde n ´e o n´umero de caracteres da chave, ci ´e o ASCII (ou
Unicode) do i-´esimo caractere da chave, e pi um peso de um
conjunto gerado previamente, de forma aleat´oria
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
114. Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
115. Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
Quantas pessoas
teremos, em m´edia?
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
116. Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
Quantas pessoas
teremos, em m´edia?
N˜ao sabemos, vamos
estimar em 100
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
117. Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
Quantas pessoas
teremos, em m´edia?
N˜ao sabemos, vamos
estimar em 100
Ent˜ao |T| = m = 101 →
um primo n˜ao muito perto
de potˆencias de 2
(26
= 64 e 27
= 128)
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
118. Tabela de Hash
Exemplo – Passos:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
119. Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
120. Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
121. Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
122. Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
h(k) = k mod m
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
123. Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
h(k) = k mod m
3 Tratar as poss´ıveis colis˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
124. Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
h(k) = k mod m
3 Tratar as poss´ıveis colis˜oes
Uma vez que 101 ´e uma m´edia, pode haver mais pessoas
que isso, gerando colis˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
125. Tabela de Hash
Exemplo
Mas antes, vamos
incluir um m´etodo em
Pessoa
class Pessoa {
String nome;
int cpf;
Pessoa(String nome, int cpf){
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
126. Tabela de Hash
Exemplo
Mas antes, vamos
incluir um m´etodo em
Pessoa
class Pessoa {
String nome;
int cpf;
Pessoa(String nome, int cpf){
this.nome = nome;
this.cpf = cpf;
}
boolean equals(Pessoa p) {
if (p==null) return(false);
return(this.cpf == p.cpf);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
127. Tabela de Hash
Exemplo
Mas antes, vamos
incluir um m´etodo em
Pessoa
Ser´a ´util para
compara¸c˜oes em
LinkedList mais
adiante
class Pessoa {
String nome;
int cpf;
Pessoa(String nome, int cpf){
this.nome = nome;
this.cpf = cpf;
}
boolean equals(Pessoa p) {
if (p==null) return(false);
return(this.cpf == p.cpf);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
128. Tabela de Hash
Exemplo
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
129. Tabela de Hash
Exemplo
A tabela ser´a um arranjo
de listas duplamente
ligadas (LinkedList)
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
130. Tabela de Hash
Exemplo
Inicializado preferencialmente
com um primo n˜ao pr´oximo
de uma potˆencia de 2
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
131. Tabela de Hash
Exemplo
Mapeamos cada chave (cpf)
a uma posi¸c˜ao na tabela
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
132. Tabela de Hash
Exemplo
...
Pessoa busca(int cpf) {
int pos = hash(cpf);
ListIterator<Pessoa> it = tabela[pos].listIterator(0);
while (it.hasNext()) {
Pessoa p = it.next();
if (p.cpf == cpf)
return(p);
}
return(null);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 29 / 32
133. Tabela de Hash
Exemplo
Na ausˆencia de um m´etodo
em LinkedList que fa¸ca
exatamente o que quere-
mos, implementamos um
...
Pessoa busca(int cpf) {
int pos = hash(cpf);
ListIterator<Pessoa> it = tabela[pos].listIterator(0);
while (it.hasNext()) {
Pessoa p = it.next();
if (p.cpf == cpf)
return(p);
}
return(null);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 29 / 32
134. Tabela de Hash
Exemplo
...
void insere(Pessoa p) {
int pos = hash(p.cpf);
if (busca(p.cpf) == null)
tabela[pos].add(p);
}
boolean remove(int cpf) {
int pos = hash(cpf);
Pessoa p = busca(cpf);
if (p != null)
return(tabela[pos].remove(p));
return(false);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
135. Tabela de Hash
Exemplo
Adiciona um elemento
ao final da lista em
tabela[pos] (m´etodo
definido em LinkedList),
se ele j´a n˜ao estiver l´a
...
void insere(Pessoa p) {
int pos = hash(p.cpf);
if (busca(p.cpf) == null)
tabela[pos].add(p);
}
boolean remove(int cpf) {
int pos = hash(cpf);
Pessoa p = busca(cpf);
if (p != null)
return(tabela[pos].remove(p));
return(false);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
136. Tabela de Hash
Exemplo
Usa o m´etodo equals de
Pessoa para comparar os
objetos na LinkedList
...
void insere(Pessoa p) {
int pos = hash(p.cpf);
if (busca(p.cpf) == null)
tabela[pos].add(p);
}
boolean remove(int cpf) {
int pos = hash(cpf);
Pessoa p = busca(cpf);
if (p != null)
return(tabela[pos].remove(p));
return(false);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
137. Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
138. Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Desde que tomados certos cuidados...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
139. Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Desde que tomados certos cuidados...
Constru¸c˜ao da fun¸c˜ao de Hash:
Outros m´etodos existem, como o da multiplica¸c˜ao e hashing
universal
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
140. Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Desde que tomados certos cuidados...
Constru¸c˜ao da fun¸c˜ao de Hash:
Outros m´etodos existem, como o da multiplica¸c˜ao e hashing
universal
Consulte Cormen et al. (2001) para mais detalhes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
141. Referˆencias
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 32 / 32