MC3305 Algoritmos e Estruturas de Dados II. Aula 02 Hashing. Prof. Jesús P. Mena-Chalco.

Documentos relacionados
Estruturas de Dados Tabelas de Espalhamento

Hashing: conceitos. Hashing

Tabela Hash. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 15/05/2015

Hashing. Cormen Capítulo 11

Tabela Hash. Disciplina: Estruturas de Dados Professora: Camila Taumaturgo M.Sc.

Métodos de Busca Parte 2

Hashing Externo. SCC-503 Algoritmos e Estruturas de Dados II. Thiago A. S. Pardo M.C.F. de Oliveira Cristina Ciferri

Dicionários. Prof. César Melo

HASHING HASHING 6/10/2008

SCC0601 Introdução à Ciência da Computação II. Prof. Lucas Antiqueira

Algoritmos e Estrutura de Dados. Aula 11 Estrutura de Dados: Tabelas Hash Parte II Prof. Tiago A. E. Ferreira

13 Hashing (parte 2) SCC201/501 - Introdução à Ciência de Computação II

Dicionários. TAD Orientado a conteúdo

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

HASHING Hashing Motivação - Acesso Direto:

Hashing Endereçamento Direto Tabelas Hash

Algoritmos de pesquisa. Tabelas de dispersão/hash

Pesquisa em Memória Primária. Prof. Jonas Potros

TABELA HASH. Prof. André Backes. Princípio de funcionamento dos métodos de busca

Hashing. Prof. Josenildo Silva IFMA 2014

Tabelas de dispersão/hash

Matemática Discreta 12

Métodos de Busca. Parte 2. ICC2 Prof. Thiago A. S. Pardo. Baseado no material do Prof. Rudinei Goularte

Introdução Métodos de Busca Parte 2 - Hashing

TABELAS DE DISPERSÃO/HASH

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza

Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou

Transformação de Chave. (Hashing)

Hashing convencional...

TABELAS HASH. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501)

Pesquisa em Memória Primária Hashing

Hashing. Hashing. Hashing versus Indexação. Hashing. Hashing convencional... Exemplo de espalhamento. Revisão...

Tabelas de Dispersão. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Transformação de Chave - Hashing

Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II

Tabelas de Dispersão - Introdução (1)

Implemente a função de remoção de uma chave na tabela hashing fechada em questão. void remover(tabela tabela, int n) {

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza

i a[i]

Hashing externo. Graça Nunes. Fonte: Folk & Zoelick, File Structures

Hashing (Tabela de Dispersão)

Tabelas Hash O Que é uma Tabela Hash? O Que é uma Tabela Hash? O Que é uma Tabela Hash? Inserindo um Novo Registro. O Que é uma Tabela Hash?

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:

Tabela Hash. Prof. Msc. Mariella Berger

Aula 31: Encadeamento exterior. Modelo de encadeamento exterior. Complexidade do encadeamento exterior

TAD dicionário. Métodos do TAD dicionário:

Endereçamento Aberto

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aula 21 Algoritmos e Estruturas de Dados I

Edital de Seleção 055/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

ANÁLISE E PROJETO DE BANCO DE DADOS

Tabelas de símbolos e de distribuição AULA 23. Tabela de símbolos. Um exemplo simples. Interface

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza

AED Algoritmos e Estruturas de Dados LEEC /2007. Tabelas de Dispersão

Vamos considerar um arquivo de dados que armazena uma lista de alunos. Cada registro é um objeto com um número de matrícula e um nome.

ACH2024. Aula 22 Hashing Externo - Hashing estático e dinâmico (extensível) Prof Helton Hideraldo Bíscaro

Aula 13 Árvores Rubro-Negras

Aula 19 Árvores Rubro-Negras

Aula 18 Árvores B e parâmetros de compilação

AED2 - Aula 01 Apresentação, estruturas de dados, tabelas de símbolos e hash tables

Bases de Dados. Remoções em árvores B + Remoção em árvores B +

Hashing Letícia Rodrigues Bueno

Bit (Binary Digit) é a menor unidade de armazenamento de informação dentro do computador; Byte é a união de 8 bits capaz de representar 256

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Hashing externo (II) Graça Nunes. Fonte: Folk & Zoelick, File Structures

Tabelas de Hash MBB. Novembro de Algoritmos e Complexidade LEI-LCC

Hashing Organização Direta de Arquivos

Algoritmos e Estruturas de Dados I

Introdução a Tabelas Hash

Aula 10 Árvores Adelson-Velskii e Landis

Universidade de São Paulo

ESTRUTURA DE DADOS E ALGORITMOS. Hashing (Tabela de Dispersão) Cristina Boeres

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Algoritmos e Estruturas de Dados I. Aula 11 Árvores AVL. Prof. Jesús P. Mena-Chalco.

Matemática Discreta. SLIDE 3 Professor Júlio Cesar da Silva. site:

Matrizes esparsas: definição

Circuitos Lógicos Aula 5

Árvores AVL e Árvores B. Jeane Melo

A inserção da chave 6 da árvore acima resulta na árvore abaixo.

As Listas são simples de se implementar, mas, com um tempo médio de acesso T = n/2, tornando-se impraticáveis para grandes quantidades de dados.

Hash universal e perfeito

Gerenciamento de memória

INF70 Gerenciamento de Banco de Dados 2 Índices baseados em Hash

Aula 07: Algoritmos de busca e Listas encadeadas

O acesso aos elementos é aleatório, isto é, qualquer elemento numa colecção pode ser acedido realizando uma pesquisa pela chave.

Redimensionamento de Tabelas. Classificação e Pesquisa de Dados. Realocação Local. Como Redimensionar. Hashing Dinâmico. Realocação Local (Cont.

Algoritmos e Estruturas de Dados II. Trabalho Prático 4

Bases de Dados. Índices. Discos. transferência lenta. transferência rápida e em blocos (512B ~ 4KB) e aos bytes. memória.

GBC053 Gerenciamento de Banco de Dados Índices baseados em Hash

Conceitos gerais Terminologia Forma de Representação de Árvores Árvores Binárias

AED 2002/2003 p.1/16. Tabelas de Dispersão. Funçoes de dispersão Encadeamento externo Procura linear Double hashing Eficiência da procura

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Classificação e Pesquisa de Dados. Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos

Teoria da Computação. Aula 9 Pesquisa em Memória Secundária 5COP096. Aula 9 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

ACH2025. Laboratório de Bases de Dados Aula 9. Indexação e Hashing Parte 2. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Algoritmos e Estruturas de Dados: Tabela de Dispersão com Encadeamento

Tabelas de Espalhamento (hash)

Organização de Arquivos. Leandro C. Cintra M.C.F. de Oliveira Thiago A. S. Pardo Cristina D. A. Ciferri

Transcrição:

MC3305 Algoritmos e Estruturas de Dados II Aula 02 Hashing Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 2Q-2015 1

Sobre a busca de dados/chaves 2

Busca em tabelas (vetores/arrays) Para se resolver os problemas de busca, inserção e remoção em uma tabela com n elementos, há várias maneiras: Busca sequencial: acesso em O(n) 3

Busca em tabelas (vetores/arrays) Para se resolver os problemas de busca, inserção e remoção em uma tabela com n elementos, há várias maneiras: Busca sequencial: acesso em O(n) Busca Binária: acesso em O(log2(n)) ainda lento se n é grande (log2 (1000000) = 20) 4

Busca em tabelas (vetores/arrays) Para se resolver os problemas de busca, inserção e remoção em uma tabela com n elementos, há várias maneiras: Busca sequencial: acesso em O(n) Busca Binária: acesso em O(log2(n)) ainda lento se n é grande (log2 (1000000) = 20) Uso de árvores balanceadas (estudaremos ainda nesse quadrimestre): acesso em O(log(n)) acesso bem melhor do que na busca sequencial! Em uma árvore B, o acesso é O(logk(n)), onde k é o tamanho da folha (veremos no final do curso) 5

Busca em tabelas (vetores/arrays) Não é possível achar um método mais rápido? O(n) não é ruim em memória, mas mesmo um método com complexidade logaritmica é custoso. Acesso a disco é 1.000.000 vezes mais lento do que em memória. 6

Busca em tabelas (vetores/arrays) Sim! Tabelas de dispersão (Hash tables) Busca com acesso médio igual a O(1). 7

Busca em tabelas (vetores/arrays) Tabelas de dispersão = Tabelas de espalhamento = Hash tables Busca com acesso médio igual a O(1). Isso significa constante na média. No pior caso é O(n). Na medida do possível uma constante pequena. São estruturas de dados eficientes para implementar um dicionário. 8

HASHING (tabelas de dispersão) 9

(1) Acesso/Endereçamento direto Considere que os valores das chaves sejam: 0, 1,,m-1: Pode-se usar diretamente o valor de cada chave em seu índice de tabela (cada chave x armazenada no compartilhamento x) O endereçamento direto se baseia no fato de que podemos examinar uma posição qualquer em O(1). Isto é aplicável quando podemos alocar uma tabela com uma posição para cada chave possível. 10

(1) Acesso/Endereçamento direto Técnica simples que funciona quando o universo de chaves U é razoavelmente pequeno. Haveriam U - k compartimentos vazios ou espaços. 11

(1) Acesso/Endereçamento direto Implementação 12

(1) Acesso/Endereçamento direto Considerações A dificuldade de usar endereçamento direto é obvia: A alocação de uma tabela T de tamanho U pode ser inviável para um universo muito grande. Endereçamento direto pode implicar em desperdício de memória. O conjunto de chaves K armazenadas na tabela pode ser muito menor do que o universo de chaves U: Espaço utilizado: O( U ) Tempo de busca: O(1) 13

(2) Tabelas de dispersão/espalhamento Através da aplicação de uma função conveniente (função hash), a chave é transformada em um endereço de tabela (endereço base). hash(chave) {0, 1,,m-1} h(k) é uma função h que mapeia o universo U de chaves para entradas da tabela de espalhamento T[0,...,m-1]. 14

(2) Tabelas de dispersão/espalhamento Considerações Uma dificuldade dessa técnica é a possibilidade de duas chaves k1 e k3 serem mapeadas para a mesma posição na Tabela de Espalhamento. Uma colisão entre 2 chaves ocorre quando h(k1)=h(k3). 15

(2) Tabelas de dispersão/espalhamento 16

(2) Tabelas de dispersão/espalhamento Duas formas de tratar colisões: Endereçamento aberto. Resolução de colisões através de encadeamento. 17

(2) Tabelas de dispersão/espalhamento Duas formas de tratar colisões: Endereçamento aberto. Resolução de colisões através de encadeamento. 18

(2) Tabelas de dispersão/espalhamento Duas formas de tratar colisões: Endereçamento aberto. Resolução de colisões através de encadeamento. Para evitar colisões usa-se uma função Hash que apresente comportamento randômico 19

Tratamento de colisões por encadeamento Implementação 20

Tratamento de colisões por encadeamento Implementação 21

Tabelas de espalhamento Análise das operações Inserção é executada em tempo O(1). Remoção de um elemento x é executada em tempo O(1). Busca leva tempo proporcional ao comprimento da lista. 22

Tabelas de espalhamento (TEs) Considerações Seja m o número de entradas na TE. Seja n o número de elementos armazenados na TE. Fator de carga é definido por 23

Tabelas de espalhamento (TEs) Considerações Seja m o número de entradas na TE. Seja n o número de elementos armazenados na TE. Fator de carga é definido por Análise de espalhamento por encadeamento No pior caso, o tempo de busca de uma chave k pode levar tempo (n) em uma TE. O tempo de busca em uma TE depende de quão bem a função de espalhamento h distribui as chaves entre as entradas de T. 24

Tabelas de espalhamento (TEs) Espalhamento uniforme Se a probabilidade de um elemento qualquer ser direcionado para uma entrada qualquer de T é uniforme, independentemente dos demais elementos, dizemos que a função de espalhamento h satisfaz a condição de espalhamento uniforme. 25

Sobre o espalhamento uniforme Paradoxo do aniversário Em um grupo de 23 pessoas ou mais pessoas, juntas ao acaso, existe uma chance maior do que 50% de que duas pessoas comemorem aniversário no mesmo dia. Se for utilizar uma função Hash que enderece 23 chaves (randômicas) em uma tabela de 365 elementos, a probabilidade de que haja colisão é maior do que 50% 26

Função de espalhamento perfeito Função de Espalhamento Perfieto: Quando a função é capaz de evitar qualquer colisão (supondo-se determinados n e m). 27

Função de espalhamento perfeito Função de Espalhamento Perfieto: Quando a função é capaz de evitar qualquer colisão (supondo-se determinados n e m). Entretanto, é muito difícil se obter uma função de dispersão perfeita. 28

Função de espalhamento perfeito Suponha que você quisesse guardar: n = 4000 registros, em m = 5000 compartimentos. Foi mostrado que de todas as funções de espalhamento possíveis, somente 1 em 10120000 é capaz de evitar todas as colisões. 29

Função de espalhamento perfeito Suponha que você quisesse guardar: n = 4000 registros, em m = 5000 compartimentos. Foi mostrado que de todas as funções de espalhamento possíveis, somente 1 em 10120000 é capaz de evitar todas as colisões. Para um número pequeno de chaves que mudam com pouca frequência é possível achar com mais facilidade uma função de espalhamento perfeita. 30

Função de espalhamento perfeito Suponha que você quisesse guardar: n = 4000 registros, em m = 5000 compartimentos. Foi mostrado que de todas as funções de espalhamento possíveis, somente 1 em 10120000 é capaz de evitar todas as colisões. Para um número pequeno de chaves que mudam com pouca frequência é possível achar com mais facilidade uma função de espalhamento perfeita. Foco: Minimizar o número de colisões a um valor aceitável 31

Funções Hash (de espalhamento): O método da divisão 32

Método da divisão Fácil, eficiente e largamente empregado. A chave k é dividida pela dimensão da tabela m: o resto da divisão é o endereço base: h(k) = k mod m Resulta em endereços no intervalo: [0, m-1]. 33

Método da divisão Por exemplo, para m=12, e k=100: h(k) = k mod m h(100) = 100 mod 12 = 4 34

Método da divisão Bons valores para m são números primos não muito próximos de potências de 2. 35

Método da divisão Bons valores para m são números primos O motivo não é óbvio! Ver os seguintes links para uma discussão a respeito: http://stackoverflow.com/questions/1145217/why-should-hash-functionsuse-a-prime-number-modulus https://computinglife.wordpress.com/2008/11/20/why-do-hash-functionsuse-prime-numbers 36

Método da divisão Suponha que desejamos alocar n=2000 cadeias de 8 bits, e que não nos importamos em procurar em listas de tamanho médio 3. Qual seria o tamanho apropriado para a tabela T? 37

Método da divisão Suponha que desejamos alocar n=2000 cadeias de 8 bits, e que não nos importamos em procurar em listas de tamanho médio 3. Qual seria o tamanho apropriado para a tabela T? Então, podemos fazer m=701, pois este é um número primo próximo de 2000/3, então 38

Método da divisão n=2000, m=701 h(k) = k mod 701 Tabela de primos 39

Método da divisão 40

Método da divisão 41

Método da divisão Se o elemento for uma string? 42

Funções Hash (de espalhamento): Método da multiplicação 43

Método da multiplicação O método utiliza uma constante A (0<A<1), sendo h(k) calculado como: 44

Método da multiplicação O método utiliza uma constante A (0<A<1), sendo h(k) calculado como: 45

Método da multiplicação O método utiliza uma constante A (0<A<1), sendo h(k) calculado como: A vantagem deste método é que o valor de m não é crítico como no método de divisão. Mas a escolha de uma constante A adequada é crítica 46

Método da multiplicação m = 1000 A = 0,5 Determine os resultados de h(k) para: k = {1100,1101,1102,1103,1104,1105} 47

Método da multiplicação m = 1000 A = 0,5 h(1100) = 0 h(1101) = 500 h(1102) = 0 h(1103) = 500 h(1104) = 0 h(1105) = 500 h(1106) = 0 h(1107) = 500....... 48

Método da multiplicação h(1100) = 0 h(1101) = 500 m = 1000 h(1102) = 0 A = 0,5 h(1103) = 500 h(1104) = 0 h(1105) = 500 h(1106) = 0 h(1107) = 500..... AAAAAAAAAARRRRRRRRRRRGGGGGGGGGHHHHHHH!!!!!!!!!!.. 49

Método da multiplicação Alguns valores de A são melhores do que outros, em particular a razão áurea m = 1000 A = 0,6180339887... h(1100) = 837 h(1101) = 455 h(1102) = 73 h(1103) = 691 h(1104) = 309 h(1105) = 927 h(1106) = 545 h(1107) = 163....... 50

Funções Hash: Método da dobra 51

Método da dobra Quebre a chave em partes e combine-as de algum modo Exemplo: Se as chaves são números de 8 dígitos, e a tabela hash tem 1000 entradas, quebre a chave em 3 números: Número 1: 3 dígitos Número 2: 3 dígitos Número 3: 2 dígitos Some-os, considerando os 3 últimos dígitos da soma para compor a chave. 73419883 734 + 198 + 83 = 1015 015 h(k) = 15 52

Método da dobra 53

Chaves como números naturais Até aqui consideramos o caso da chave ser um número natural. k = 'gato' h(k) =? 54

Chaves como números naturais Se não for este o caso, ela deve ser convertida primeiro para um número natural. Por exemplo, se a chave é uma cadeia de caracteres podemos interpreta-la como um natural em uma base conveniente (26 se levarmos em consideração apenas letras minúsculas): 55

Chaves como números naturais Se não for este o caso, ela deve ser convertida primeiro para um número natural. Por exemplo, se a chave é uma cadeia de caracteres podemos interpreta-la como um natural em uma base conveniente (26 se levarmos em consideração apenas letras maiúsculas): Palavras mais longas representam um desafio maior, pois o valor calculado pode ser muito grande (e o cálculo pode levar muito tempo). Neste caso, podemos escolher algumas letras para representar a palavra, como a primeira, a do meio e a penúltima 56

Para finalizar... 57

Para finalizar Vantagens: Algoritmo simples e eficiente para inserção, remoção e busca. Desvantagens: Nenhuma garantia de balanceamento. Espaço sub-utilizado nas tabelas. O grau de espalhamento é sensível à função de hashing utilizada e ao tipo de informação usada como chave. Desafio: Pense na criação de uma função hash universal 58