Hashing (Tabela de Dispersão)



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

Hashing (Tabela de Dispersão)

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

Algoritmos de pesquisa. Tabelas de dispersão/hash

Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

Tabelas Hash. Jeane Melo

INF 1007 Programação II

INF 1007 Programação II

Dicionários. Prof. César Melo

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Trabalho 3: Agenda de Tarefas

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

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

DAS5102 Fundamentos da Estrutura da Informação

Estruturas de Dados Aula 15: Árvores 17/05/2011

HASHING. Katia Guimarães. 1

Algoritmos e Programação

Complexidade de Algoritmos

Filas: conceitos e implementações

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Pesquisa Sequencial e Binária

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

INF 1010 Estruturas de Dados Avançadas

Prof. Marcelo Nogueira

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

AULA 16 - Sistema de Arquivos

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

Prof. Bruno Calegaro

DAS5102 Fundamentos da Estrutura da Informação

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20

Computação II Orientação a Objetos

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

Tipo de Dados em Linguagem C

TRABALHO PRÁTICO Nro. 02 (Atualizado em 29/10/2008)

Tabelas de Espalhamento

14.1 Vetor - Problemas

Simulado Banco de Dados I Bimestre 1 Capítulo 1 Projeto Lógico de Banco de Dados

Técnicas de Programação: ESTRUTURAS, UNIÕES E TIPOS DEE UFPB

1 Funções básicas de implementação de arquivos

Estrutura de Dados Básica

2ª Lista de Exercícios

Conceitos básicos da linguagem C

Linguagem de Programação I

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

Tabela de símbolos: tabelas de espalhamento

3.4 Representação física: alocação encadeada (dinâmica) Ptlista - variável ponteiro externa que indica o início da lista.

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

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

Conceitos Básicos de Rede. Um manual para empresas com até 75 computadores

Aula II Introdução ao Modelo de Entidade-Relacionamento

Casamento de Cadeias. Introdução. Introdução. Estrutura de Dados. Cadeia de caracteres: sequência de elementos denominados caracteres.

Hashing Letícia Rodrigues Bueno

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 1, 2 e 3) Clodis Boscarioli

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Trabalho Computacional 2. Aplicativo para Gestão Financeira. Grupos: Os trabalhos devem ser feitos individualmente ou em duplas.

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Tabela ASCII de caracteres de controle

MANUAL DA SECRETARIA

Prof. Daniela Barreiro Claro

Lista restrita onde as operações de inserção e retirada são feitas nas extremidades. Deque (fila de final duplo).

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Busca. Pesquisa sequencial

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

Manual das planilhas de Obras v2.5

Primeiros passos das Planilhas de Obra v2.6

Desenvolvimento OO com Java Orientação a objetos básica

MANUAL DE PROCEDIMENTOS MPR/SGP-500-R00 ARQUIVAMENTO DE PROCESSOS NA SGP

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

2. Execução do algoritmo de Huffman para construção de uma árvore binária (árvore de Huffman).

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas Prof. Tiago A. E. Ferreira

Variáveis e Comandos de Atribuição

Estruturas de Dados I

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Base de dados I. Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

LTP-IV. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Aula Teórica 16: Estruturas de Dados Heterogêneas

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

6. Programação Inteira

Gerência de Memória. Paginação

INTRODUÇÃO À LINGUAGEM C++

7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS

Chaves. Chaves. O modelo relacional implementa dois conhecidos conceitos de chaves, como veremos a seguir:

Aula 8- Standard Template Library. Arthur Ribacki Gabriel Portal Leonardo Chatain Luiz Fernando Scheidegger Rosália Schneider

Sistema de Memórias de Computadores

Tipo Abstrato de Dados

Algoritmos Estruturas Seqüenciais. José Gustavo de Souza Paiva

FACULDADE DE TECNOLOGIA SENAC GOIÁS ADELTON HENRIQUE ABISHAI LEMES BORGES NETO HENRIQUE FERREIRA DA SILVA

Gerenciamento Básico B de Memória Aula 07

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 4

Morfologia Matemática Binária

Gerência do Sistema de Arquivos. Adão de Melo Neto

Transcrição:

Hashing (Tabela de Dispersão)

Motivação! Os métodos de pesquisa vistos até agora buscam informações armazenadas com base na comparação de suas chaves.! Para obtermos algoritmos eficientes, armazenamos os elementos ordenados e tiramos proveito dessa ordenação.! algoritmos mais eficientes de busca mostrados até o momento demandam esforço computacional O(log n).! hashing (tabela de dispersão) ou método de cálculo de endereço! No caso médio é possível encontrar a chave em tempo constante

Conceitos Básicos! Índices em arranjos ou listas lineares são utilizados para acessar informações.! Através do índice as operações sobre arranjos são realizadas no tempo O(1).! No entanto, se quisermos acessar uma informação de um determinado valor?! não é O(1). Família 1 2 3 4 5 6 José Maria Leila Artur Jolinda Gisela Alciene Família[1] = José Maria Família[3] = Artur Família[2] = Leila Em qual posição está Alciene?

Conceitos Básicos! Ideal: Parte da informação poderia ser utilizada na recuperação

Definição de Hash (1/3)! Hash é uma generalização da noção mais simples de um arranjo comum, sendo uma estrutura de dados do tipo dicionário.! Dicionários são estruturas especializadas em prover as operações de inserir, pesquisar e remover.! A idéia central do Hash é utilizar uma função, aplicada sobre parte da informação (chave), para retornar o índice onde a informação deve ou deveria estar armazenada.

Definição de Hash (2/3)! Esta função que mapeia a chave para um índice de um arranjo é chamada de Função de Hashing.! A estrutura de dados Hash é comumente chamada de Tabela Hash.

Definição de Hash (3/3) Tabela Hash 123.456.781-00 19 143.576.342-23 37 Função de 345.365.768-93 50 Hashing 879.094.345-45 85 999.999.999-99 20 19 123.456.781-00; João da Silva; Av. Canal. Nº 45. 20... 37 143.576.342-23; Carla Soares; Rua Celso Oliva. Nº 27.... 50 345.365.768-93; Gustavo Liberato; Av. Atlântica. S/N.... 85 879.094.345-45 ; Helena Camargo; Rua B. Nº 100....

Tabela Hash! Tabela Hash! é uma estrutura de dados especial! armazena as informações desejadas associando chaves! Objetivo: a partir de uma chave, fazer uma busca rápida e obter o valor desejado.

Ilustração de uma Tabela Hash chave dados 1 2 Como o registro (com chave K) foi armazenado na posição X na Tabela Hash ao lado? registro (chave k)? X K registro Resp: Através de uma Função de Hashing. n-1 n

Como representar Tabelas Hash?! Vetor: cada posição do vetor guarda uma informação. Se a função de hashing aplicada a um conjunto de elementos determinar as informações I 1, I 2,..., I n, então o vetor V[1... n] é usado para representar a tabela hash.! Vetor + Lista Encadeada: o vetor contém ponteiros para as listas que representam as informações.

Função de Hashing! A Função de Hashing é a responsável por gerar um índice a partir de uma determinada chave.! O ideal é que a função forneça índices únicos para o conjunto das chaves de entrada possíveis.! A função de Hashing é extremamente importante, pois ela é responsável por distribuir as informações pela Tabela Hash.

Ilustração da Função de Hashing 1 2 chave dados! Os valores da chave podem ser numéricos, alfabéticos ou alfa-numéricos. registro (K) E = f (K) X K registro n-1 n! Executam a transformação do valor de uma chave em um endereço, pela aplicação de operações aritméticas e/ou lógicas f: C! E f: função de cálculo de endereço C: espaço de valores da chave (domínio de f) E: espaço de endereçamento (contradomínio de f)

Hashing Perfeito! Característica:! Para quaisquer chaves x e y diferentes e pertencentes a A, a função utilizada fornece saídas diferentes;

Exemplo de Hashing Perfeito (1/6)! Armazenamento de alunos de uma determinada turma de um curso específico.! Cada aluno é identificado unicamente pela sua matrícula. struct aluno { int mat; // 4 bytes = 4 bytes char nome[81]; // 1 byte * 81 = 81 bytes char email[41]; // 1 byte * 41 = 41 bytes }; Total = 126 bytes typedef struct aluno Aluno;

Exemplo de Hashing Perfeito (2/6)! O número de dígitos efetivos na matrícula são 7! Para permitir um acesso a qualquer aluno em ordem constante, podemos usar o número de matrícula do aluno como índice de um vetor.! Um problema é que pagamos um preço alto para ter esse acesso rápido. Porque?

Exemplo de Hashing Perfeito (2/6)! O número de dígitos efetivos na matrícula são 7! Para permitir um acesso a qualquer aluno em ordem constante, podemos usar o número de matrícula do aluno como índice de um vetor.! Um problema é que pagamos um preço alto para ter esse acesso rápido. Porque? Resp: Visto que a matrícula é composta de 7 dígitos, então podemos esperar uma matrícula variando de 0000000 a 9999999. Portanto, precisaríamos dimensionar um vetor com DEZ Milhões de elementos.

Exemplo de Hashing Perfeito (3/6)! Como a estrutura de cada aluno ocupa 126 bytes, então seriam necessários reservar 1.260.000.000 bytes, ou seja, acima de 1 GByte de memória.! Como na prática teremos em torno de 50 alunos em uma turma cadastrados no curso, precisaríamos na realidade de 7.300 (=126*50) bytes. Pergunta: Como economizar desperdício de alocação?

Exemplo de Hashing Perfeito (3/6)! Como a estrutura de cada aluno ocupa 126 bytes, então seriam necessários reservar 1.260.000.000 bytes, ou seja, acima de 1 GByte de memória.! Como na prática teremos em torno de 50 alunos em uma turma cadastrados no curso, precisaríamos na realidade de 7.300 (=126*50) bytes. Pergunta: Como economizar desperdício de alocação? Resp: Utilizando um vetor de ponteiros, em vez de um vetor de estruturas.! vetor de ponteiros! Alocação dos alunos cadastrados seria realizada dinamicamente.! Portanto, considerando que cada ponteiro ocupa 4 bytes, o gasto excedente de memória seria 40.000.000 bytes. (~= 38 MBytes)

Exemplo de Hashing Perfeito (4/6)! Para economizar mais ainda: Hashing. Como construir Tabela Hash?

Exemplo de Hashing Perfeito (4/6)! Para economizar mais ainda: Hashing. Como construir Tabela Hash usando hashing perfeito? Resp: Identificando as partes significativas da chave.

Exemplo de Hashing Perfeito (5/6)! Esta parte mostra a dimensão que a Tabela Hash deverá ter.! Por exemplo, dimensionando com apenas 100 elementos, ou seja, Aluno* tabalunos[100]. Função que aplicada sobre matrículas de alunos retorna os índices da tabela

Exemplo de Hashing Perfeito (6/6)! Supondo que a turma seja do 2º semestre de 2005 (código 052) e do curso de Sistemas de Informação (código 35). Qual seria a função de hashing perfeito!? int funcao_hash(int matricula) { int valor = matricula 0523500; if((valor >= 0) & (valor <=99)) then return valor; else return -1; } Acesso: dada mat " tabalunos[funcao_hash(mat)]

Hashing Imperfeito! Características:! Existe chaves x e y diferentes e pertencentes a A, onde a função Hash utilizada fornece saídas iguais;

Exemplo de Hashing Imperfeito (1/2)! Suponha que queiramos armazenar as seguintes chaves: C, H, A, V, E e S em um vetor de P = 7 posições (0..6) conforme a seguinte função f(k) = k(código ASCII) % P.! Tabela ASCII: C (67); H (72); A (65); V (86); E (69) e S (83).

Exemplo de Hashing Imperfeito (2/2)

Funções de Hashing! Conceitos e comparações de funções hash:! divisão! dobra! multiplicação! análise de dígitos Defina, dê exemplos, vantagens e desvantagens!

Considerações sobre Funções de Hashing (2/2)! Por causa das colisões, muitas Tabelas Hash são aliadas com algumas outras estruturas de dados para solucionar os problemas de colisão, são elas:! Listas Encadeadas;! Árvores Balanceadas e! dentro da própria tabela.

Colisões! Quando duas ou mais chaves geram o mesmo endereço da Tabela Hash, dizemos que houve uma colisão.! É comum ocorrer colisões.! Principais causas:! em geral o número N de chaves possíveis é muito maior que o número de entradas disponíveis na tabela.! não se pode garantir que as funções de hashing possuam um bom potencial de distribuição (espalhamento).

Tratamento de Colisões! Um bom método de resolução de colisões é essencial, não importando a qualidade da função de hashing.! Há diversas técnicas de resolução de colisão.! As técnicas mais comuns podem ser enquadradas em duas categorias:! Encadeamento! Endereçamento Aberto (Rehash);

Encadeamento! Característica Principal: A informação é armazenada em estruturas encadeadas

Encadeamento! P = 7 posições (0..6) e a função f(k) = k(código ASCII) % P.

Endereçamento Aberto (Rehash)! Característica Principal:! A informação é armazenada na própria Tabela Hash.! Uma estratégia de solução:! Rehash Linear

Endereçamento Aberto: Rehash Linear! Uma das alternativas mais usadas para aplicar Endereçamento Aberto é chamada de rehash linear.! A posição na tabela é dada por:! rh(k) = (k + i) % M, onde M é a qtd de entradas na Tabela Hash k é a chave i é o índice de reaplicação do Hash

Exemplo Rehash Linear! os caracteres da palavra CHAVES serão inseridos em uma tabela hash através do Rehash Linear.! O número de entradas (M) da Tabela Hash a ser criada é 7.

Exemplo Rehash Linear chave k=ord(chave) i 1 =h(k) i 2 =rh(i 1 ) i 3 =rh(i 2 ) i 4 =rh(i 3 ) c 67 4 - - - h 72 2 - - - a 65 2 3 - - v 86 2 3 4 5 e 69 6 - - - s 83 6 0 - - Obs.: h(k) = k mod 7 rh (k) = (k+1) mod 7

Exemplo Rehash Linear chave k=ord(chave) i 1 =h(k) i 2 =rh(i 1 ) i 3 =rh(i 2 ) i 4 =rh(i 3 ) c 67 4 - - - h 72 2 - - - a 65 2 3 - - v 86 2 3 4 5 e 69 6 - - - s 83 6 0 - - 0 s 1 2 h 3 a 4 c 5 v 6 e Resultado final da Tabela Hash

Limitações (1/2)! O Hash é uma estrutura de dados do tipo dicionário:! Não permite armazenar elementos repetidos.! Não permite recuperar elementos sequencialmente (ordenado).! Para otimizar a função Hash é necessário conhecer a natureza e domínio da chave a ser utilizada.

Limitações (2/2)! No pior caso a complexidade das operações pode ser O(N). Caso em que todos os elementos inseridos colidirem.! Hash com endereçamento aberto podem necessitar de redimensionamento.

Mais Colisões! Tentativa quadrática! Dispersão Dupla Defina, dê exemplos, vantagens e desvantagens!