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.

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

Matemática Discreta 12

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

Algoritmos de pesquisa. Tabelas de dispersão/hash

TABELAS DE DISPERSÃO/HASH

Hashing: conceitos. Hashing

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

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

Transformação de Chave. (Hashing)

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

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

Transformação de Chave - Hashing

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

Tabelas de dispersão/hash

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

Métodos de Busca Parte 2

Hashing (Tabela de Dispersão)

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

HASHING HASHING HASHING HASHING. HASHING - Função hash - Propriedades HASHING. Notas de aula da disciplina IME Estruturas de Dados I

Pesquisa em Memória Primária Hashing

Estruturas de Dados Tabelas de Espalhamento

UNIVERSIDADE DA BEIRA INTERIOR

UNIVERSIDADE DA BEIRA INTERIOR

Dicionários. TAD Orientado a conteúdo

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.

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

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

HASHING Hashing Motivação - Acesso Direto:

Aplicações de listas e outras estruturas

Aula 15: Pesquisa em Memória Primária. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Matrizes Esparsas. atribuição (M, i, j, v) (i, j) IND. v nulo. v não nulo v nulo v não nulo. há espaço. não há espaço. retira substitui nada

HASHING. Árvores de Busca: Atualização/Busca - caso médio: O(log n) Atualização/Busca - pior caso: O(log n)

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

Aplicações de listas Outras estruturas

HASHING HASHING 6/10/2008

Linguagem C: Listas Encadeadas

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

UNIVERSIDADE DA BEIRA INTERIOR

Hashing. Prof. Josenildo Silva IFMA 2014

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

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

Tabelas Hash Endereçamento Direto

Estruturas de Dados I

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

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

TABELAS HASH. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1

UNIVERSIDADE DA BEIRA INTERIOR

Tabelas de Espalhamento (hash)

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

Lista Encadeada (Linked List)

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Aplicações de listas e outras estruturas

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?

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

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira

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

BCC202 - Estrutura de Dados I

Alocação Seqüencial VAL MAX TOPO

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

INF 1620 P2-01/11/03 Questão 1 Nome:

Hashing Endereçamento Direto Tabelas Hash

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

Complexidade de Algoritmos

indexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016

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

Tabela Hash. Prof. Msc. Mariella Berger

Dicionários. Prof. César Melo

Organização de Arquivos

Universidade de São Paulo

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

BCC202 - Estrutura de Dados I

UNIVERSIDADE DA BEIRA INTERIOR

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Endereçamento Aberto

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

UNIVERSIDADE DA BEIRA INTERIOR

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

INF 1620 P3-06/12/03 Questão 1 Nome:

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Hashing convencional...

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

i a[i]

Estrutura de Dados (DPADF 0056)

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

Estrutura de Dados (DPADF 0056)

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

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

INF 1620 P3-29/06/04 Questão 1 Nome:

1 OBJETIVOS 2 HORÁRIO DE AULAS 3 PROGRAMA

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

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

Filas Exemplo de Aplicação

Matrizes esparsas: definição

Transcrição:

Tabelas de hash Considerações iniciais: Até o momento foram estudados basicamente dois tipos de estruturas de dados para o armazenamento flexível de dados: Listas; Árvores. Como vimos, cada um desses grupos possui muitas variantes. 143

Tabelas de hash 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. Por exemplo: em uma lista com 100.000 dados, para recuperar 3 elementos em sequência faremos um número esperado de 150.000 acessos a nodos. Logo: listas são ótimas. Porém, para pequenas quantidades de dados. 144

Tabelas de hash As Árvores são estruturas mais complexas, mas que possuem um tempo médio de acesso T= log G n, onde G = ordem da árvore. A organização de uma árvore depende da ordem de entrada dos dados. Para evitar a deterioração, há modelos de árvores que se reorganizam sozinhas. As principais estudas foram AVL e Árvore B. 145

Tabelas de hash Imagine uma estrutura de dados que possibilite o armazenamento de uma tabela onde o acesso a um de seus registros seja efetuado diretamente. Esta estrutura representa um modelo ideal, contudo em aplicações reais este ideal pode ser aproximado. Ideal: Indexação direta (transformação chave-índice) pesq(t:tabela, C: chave) baseado em h(c:chave)-> índice 146

Tabelas de hash Uma tabela hash, também chamada de tabela de dispersão ou tabela de escrutínio, trata-se de uma forma extremamente simples, fácil de se implementar e intuitiva de se organizar grandes quantidades de dados, permitindo armazenar e encontrar rapidamente dados por meio da utilização de uma chave. A idéia central propõe a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis. 147

Tabelas de hash Possui dois conceitos centrais: Tabela de Hashing: Estrutura que permite o acesso aos subconjuntos. Função de Hashing: Função que realiza um mapeamento entre valores de chaves e entradas na tabela. h(chave) -> min.. max min C:Chave h(c) 148 I: min.. max max

Tabelas de hash É interessante ressaltar que uma tabela hash possui limitações em relação às árvores, como por exemplo: Não permite recuperar/imprimir todos os elementos em ordem de chave nem tão pouco outras operações que exijam sequência dos dados. Não permite operações do tipo recuperar o elemento com a maior ou a menor chave. 149

Tabelas de hash Idéia geral: Se eu possuo um universo de dados classificáveis por chave, posso: Criar um critério simples para dividir este universo em subconjuntos com base em alguma qualidade do domínio das chaves; Saber em qual subconjunto procurar e colocar uma chave; Gerenciar estes subconjuntos bem menores por algum método simples. 150

151 Tabelas de hash Para isso é necessário: Saber quantos subconjuntos são desejados e criar uma regra de cálculo que permita, dada uma chave, determinar em qual subconjunto deve-se procurar pelos dados com esta chave ou colocar este dado, caso seja um novo elemento. (função de hashing). Possuir um índice que permita encontrar o início do subconjunto certo, depois de calcular o hashing. (tabela de hashing). Possuir uma ou um conjunto de estruturas de dados para os subconjuntos. hashing fechado (endereçamento aberto) ou o hashing aberto (encadeado).

Tabelas de hash: Exemplo Antônia José Olegário Maria Álvaro Magda Murilo Jonas Othon Ana Olga Judite Qual a 1ª letra? A J M O Antônia Álvaro Ana José Jonas Judite Maria Magda Murilo Olegário Othon Olga 152

Tabelas de hash Devemos garantir um tratamento coerente das operações de inserção e pesquisa na tabela Inserir: calcula-se endereço da nova entrada usando a função h Pesquisa: mesma função deve informar o mesmo índice para a mesma entrada 153

chaves -> índices Tabelas de hash Mais de uma chave gera o mesmo índice COLISÃO Função de Dispersão Subconjuntos ( classes ) de sinônimos (chaves com o mesmo índice) 154

Tabelas de hash Implementação de tabelas por cálculo de endereço envolve dois problemas Escolha da função de dispersão adequada para o tipo de chave usada gerar endereços em todo o intervalo [min..max] estabelecer distribuição uniforme na tabela Adoção de um processo de solução das colisões 155

Tabelas de hash: Nomenclatura n: Tamanho do universo de dados. b: Número de subconjuntos em que dividimos os dados: depósitos. s: Capacidade de cada depósito (quando for limitada. Aplica-se somente a hashing fechado ou endereçamento aberto). T: Cardinalidade do domínio das chaves. Quantas chaves podem existir? n/t: Densidade identificadora. a = n/(b s): Densidade de carga. b s fornece a capacidade máxima (quando existir explicitamente). n/(b s) indica o fator de preenchimento. Aplica-se somente a hashing 156 fechado (endereçamento aberto).

157 Tabelas Hashing de Aberto hash: ou Nomenclatura Encadeado Forma mais intuitiva de se implementar o conceito de Hashing. Utiliza a idéia de termos uma tabela com b entradas, cada uma como cabeça de lista para uma lista representando o conjunto b i. Calculamos a partir da chave qual entrada da tabela é a cabeça da lista que queremos. Utilizamos uma técnica qualquer para pesquisa dentro de b i. Tipicamente será a técnica de pesquisa sequencial em lista encadeada. Podemos utilizar qualquer outra estrutura para representar os b i. Uma árvore, por exemplo, poderia ser uma opção.

Propostas de Função de Dispersão Um dos métodos mais simples para criar funções hashing é o método da divisão. No qual uma chave C é mapeada para um dos b endereços da tabela hashing. Resto da Divisão h(c) = C mod b nº máximo de entradas da tabela [0,b-1] 158

159 Hashing Aberto ou Encadeado: Exemplo Para uma melhor compreensão analisaremos um exemplo no qual uma tabela com 8 entradas é utilizada para acomodar registros cujas chaves são valores pertencentes ao conjunto dos números naturais. Inicialmente a tabela está vazia. 0 1 2 3 4 5 6 7

Hashing Aberto ou Encadeado: Exemplo Inserir chave 14. 14%8=6 0 1 2 3 4 5 6 7 14 160

Hashing Aberto ou Encadeado: Exemplo Inserir chave 20. 20%8=4 0 1 2 3 4 5 6 7 20 14 161

Hashing Aberto ou Encadeado: Exemplo Inserir chave 17. 17%8=1 0 1 2 17 3 4 5 6 7 20 14 162

Hashing Aberto ou Encadeado: Exemplo Inserir chave 36. 36%8=4 0 1 2 3 4 5 6 7 17 20 36 20 14 163

Hashing Aberto ou Encadeado: Exemplo Inserir chave 22. 22%8=6 0 1 2 17 3 4 5 6 7 36 22 14 20 14 164

Hashing Aberto ou Encadeado: Exemplo Inserir chave 4. 4%8=4 0 1 2 17 3 4 36 4 20 36 20 5 6 22 14 14 7 165

Hashing Aberto ou Encadeado: Exemplo Remover chave 17. 17%8=1 0 1 2 3 4 4 36 20 5 6 22 14 7 166

Hashing Aberto ou Encadeado: Exemplo Remover chave 36. 36%8=4 0 1 2 3 4 5 36 4 20 6 7 22 14 167

Hashing Aberto ou Encadeado: Exercício Com base no que foi apresentado defina a(s) estrutura(s) de dados necessária(s) para a implementação de uma tabela hashing aberta. #define numentradas 8 typedef struct _Hash { int chave; struct _Hash *prox; } Hash; typedef Hash* Tabela[numEntradas]; 168

169 Agora, implemente a função de inserção de uma chave na tabela hashing aberta em questão. void inserirhash(tabela tabela, int n) { } Hashing Aberto ou Encadeado: Exercício Hash* novo; int pos = funcaohashing(n); novo = (Hash *) malloc (sizeof (Hash)); novo->chave = n; novo->prox = tabela[pos]; tabela[pos] = novo;