Tabelas Hash CONTEÚDO (1) Auto-avaliação (2) Tabelas Hash

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
HASHING Katia Guimarães julho/2002
Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Programação em Java Prof. Maurício Braga
Geometria Computacional Fecho Convexo II
Programação em Java Prof. Maurício Braga
Motivação para listas duplamente encadeadas e circulares
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
AULA 8 Profa. Sandra de Amo GBC053 – BCC
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
03/08/2011 Professor Leomir J. Borba- –
Nivelamento de C: Tipos Estruturados de Dados
Algoritmos de Ordenação
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
Excel Profa. Cristina M. Nunes.
Gerenciamento de Arquivos, Páginas e Registros
Introdução aos Métodos de Acesso AULA 7 – Parte II Profa. Sandra de Amo GBC053 – BCC
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Árvores.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
Coleta de resíduos. Sumário Resíduos Coleta de resíduos Contador de referências Marcação e varredura Parada e cópia Marcação e compactação Gerenciamento.
Arquivos Extensíveis.
Pesquisa em Memória Primária
Pesquisa em Memória Primária - Hashing
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Pesquisa em Memória Primária
Estruturas de Dados e Algoritmos
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Hashing (Espalhamento)
Classificação e Pesquisa de Dados
AED – Algoritmos e Estruturas de Dados
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Análise Léxica Supondo o trecho de programa abaixo:
Listas Encadeadas.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Marco Antonio Montebello Júnior
Aula prática 6 Vetores e Matrizes
Compressão de Textos Juliano Palmieri Lage.
Pesquisa em memória primária: hashing
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Estruturas de Dados com Jogos
Estrutura de dados, pseudocódigo
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Algorítmos e estrutura de dados III
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Revisão Prova 2 Métodos de Acesso – Parte 2 AULA 21 Profa. Sandra de Amo GBC053 – BCC.
Denise Guliato Faculdade de Computação – UFU
Progressão Geométrica Matrizes Questão nº01  Na P.G., a posição do termo é...
Introdução e Busca Cega
Campus de Caraguatatuba Aula 8: Noções Básicas sobre Erros (2)
Fundamentos de Programação
CALENDÁRIO SEXY Ele & Ela. CALENDÁRIO SEXY Ele & Ela.
Ceça Moraes – Introdução à Programação SI1
Campus de Caraguatatuba Aula 2: Somatório e Produtório
Tabelas Hash Prof. Túlio Toffolo
Tabela Hash Alunos : Gustavo Jorge Zanin nºUSP
Aula Prática 12 Listas Encadeadas Monitoria
Estrutura de dados Aula 6 - hash
Estrutura de Dados Aula 3 - Listas
Hashing (Tabela de Dispersão)
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Tabelas Hash CONTEÚDO (1) Auto-avaliação (2) Tabelas Hash (3) Tipos de funções hash (4) Colisão (5) Algoritmo de Cichelli (6) Conclusões

Ordenação/Classificação (1) Auto-avaliação Ordenação/Classificação Antes de prosseguir: Considerando o vetor de inteiros a seguir, execute os algoritmos vistos na aula passada (quickSort e mergeSort), e escreva as alterações realizadas nesse vetor, em cada iteração realizada vetor iteração 4 8 3 2 1 7 1ª 2ª 3ª 4ª 5ª 6ª ...

Tabelas de dispersão/espalhamento (Hash Tables) Motivação: Desejamos armazenar os dados referentes aos clientes de uma loja. Cada cliente é individualmente identificado pelo seu nº de CPF (o CPF é a chave de busca). Podemos então usar o nº de CPF como chave de busca de um cliente cadastrado no sistema.

Como seria o cálculo realizado pela função hash? 1 2 3 4 Exemplo de aplicação Projetamos a tabela hash para que ela armazene entrada na forma (CPF, Nome), onde o CPF é um inteiro de 11 dígitos positivos Nossa tabela hash usa um array de tamanho N = 100 e a função hash é h(k) = os últimos dois dígitos de k, onde k é chave de busca, i.e., o CPF Como seria o cálculo realizado pela função hash?  1 2 3 4 97 98 99 … 45122900004 98110100002 20075199998 02561200001 Maria José João Ana

Exemplo: h(k) = k mod N é a função hash para chaves inteiras Exemplo de aplicação Uma função hash h mapeia chaves de um dado tipo para inteiros em um intervalo fixo de [0, N - 1], onde N é o tamanho da tabela Exemplo: h(k) = k mod N é a função hash para chaves inteiras O inteiro retornado pela função h(k) é chamado de valor hash da chave k  1 2 3 4 97 98 99 … 45122900004 98110100002 20075199998 02561200001 Maria José João Ana

Uma tabela hash para uma chave de um dado tipo consiste de Definições Uma tabela hash para uma chave de um dado tipo consiste de Uma função hash h Um Array (chamado de tabela) de tamanho N O objetivo é armazenar um registro/objeto/estrutura que possua chave de busca k na posição i = h(k) do array E dispersar as chaves na tabela de forma aparentemente aleatória

(2) Hash Definições Não é apenas um método de pesquisa, mas também um método de organização física de tabelas; o armazenamento de cada entrada da tabela é associado a um endereço calculado pela aplicação de uma função a chave de entrada; a eficiência da pesquisa neste tipo de organização depende fundamentalmente da função de cálculo de endereço;

(3) Tipos de funções hash Divisão Divisão – a função de hashing deve garantir que o nº por ela retornado seja um índice válido para uma entrada da tabela H(c) = C mod 5 Exemplo com 100 chaves para 5 entradas

(3) Tipos de funções hash Enlaçamento Enlaçamento – a chave é dividida em diversas partes. As partes são combinadas ( somadas por exemplo) para gerar o endereço alvo Ex.: CPF= 123.456.789.22 H(cpf) = 12+34+56+78+92+2 = 274 (total de endereços = 5 x 99 = 495 + 9 = 504 H(cpf) = 123+456+789+22 = 1390 H(cpf) = cpf mod 1000

(3) Tipos de funções hash Meio Quadrado Função meio-quadrado – a chave é elevada ao quadrado e parte dela é usada como endereço (os bits do centro) H(16) = 0000 0001 0000 0000 = 256 0001 0000 = 16 H(12) = 0000 0000 0110 0100 = 100 0000 1100 = 6 1.024 entradas – 10 bits

Extração – apenas uma parte da chave é usada para gerar o endereço (3) Tipos de funções hash Extração Extração – apenas uma parte da chave é usada para gerar o endereço Ex.: matrícula: 2010110256 período área ano H(mat) = 0256

(4) Colisão Nem tudo é perfeito... Voltando ao exemplo da motivação inicial, o problema que surge é que provavelmente existirão dois ou mais clientes da loja que apresentarão os últimos dois dígitos no nº de CPF iguais. Dizemos que há uma colisão, pois registros/objetos/estruturas diferentes são mapeados para a mesma posição na tabela. Vale salientar que não há como eliminar completamente a ocorrência de colisões em tabelas hash.

(4) Colisão Tratamento de colisão Devemos minimizar as colisões e usar um método que, mesmo com colisões, saibamos identificar cada elemento da tabela individualmente. Vale lembrar que uma tabela de dispersão nunca terá todos os elementos preenchidos Uma ocupação acima de 75% eleva o número de colisões, descaracterizando a idéia central desta estrutura de dados Portanto, podemos garantir que sempre existirá uma posição livre na tabela

(4) Colisão Tratamento de colisão Encadeamento Separado: cada célula na tabela aponta para uma lista encadeada de registros/objetos/estruturas Encadeamento Separado é simples, mas requer memória adicional fora da tabela  1 2 3 4 45122900004 20075199904 02561200001 Ana Zé Bia

(4) Colisão Tratamento de colisão Sondagem Linear: cada célula na tabela possui um ponteiro para o registro/objeto/estrutura que representa a informação armazenada na tabela de dispersão Procuramos o próximo índice livre da tabela (usando incremento circular) para armazenar o novo elemento. Os índices da tabela que não têm elementos associados são preenchidos com o valor NULL.

(4) Colisão Sondagem Linear O item que está colidindo é colocado em uma célula diferente da tabela A sondagem linear lida com colisões colocando o item que colidiu na próxima célula disponível (circularmente) Exemplo: N = 13 H(k) = k mod N Insira as chaves 18, 41, 22, 44, 59, 32, 31, 73, nesta ordem Na colisão, h’(k)=(h(k) +1) mod N 1 2 3 4 5 6 7 8 9 10 11 12 41 18 44 59 32 22 31 73 1 2 3 4 5 6 7 8 9 10 11 12

Busca com Sondagem Linear (4) Colisão Busca com Sondagem Linear get(k) Sondamos posições consecutivas até que Um item com chave k é encontrado, ou Uma célula vazia é encontrada, ou N células foram sondadas sem sucesso Cada índice da tabela que tem um elemento associados é preenchido com o endereço do nó que contém o elemento Algorithm get(k) i  k mod N p  0 do c  A[i] if c =  return null else if c->key = k return c->element else i  (i + 1) mod N p  p + 1 while p != N

Atualizações com Sondagem Linear (4) Colisão Atualizações com Sondagem Linear Inserções ou atualizações put(k, object/struct/record) Iniciamos na célula i = k mod N Sondamos células consecutivas até que Uma célula i encontrada esteja vazia (null) Amazenamos o item (object/struct/record) na célula Retorne true Se N células foram sondadas sem sucesso então retorne false Para lidar com deleções, nós usamos ponteiros para null remove(k) Buscamos um item com chave k Se este item for encontrado, substitua o ponteiro para o nó que continha o item por null e retorne o item Caso contrário, retorne null

(5) Cichelli Função hash perfeita Desenvolvido por Richard J. Cichelli para criação de funções hash perfeitas considerando um pequeno número de palavras: h(palavra) = ( comprimento(palavra) + g(primeiraLetra(palavra)) + g(ultimaLetra(palavra)) ) mod N onde: a função g() deverá ser encontrada de forma exaustiva

O algoritmo possui 3 etapas: (5) Cichelli Função hash perfeita O algoritmo possui 3 etapas: Frequência: Cálculo de ocorrências da primeira e última letra; Ordenação: As palavras são ordenadas de forma decrescente; Busca: Tentativa de encontrar a função g() por meio de tentativas, colocando-se o valor de 0..MAX para cada letra; Os valores mapeados de h() são armazenados; Se para 0..MAX a colisão persiste, o algoritmo retrocede para a palavra anterior; Nem sempre a busca vai ser realizada com sucesso, ou seja, o algoritmo não garante que não haja colisões;

(5) Cichelli Função hash perfeita Ex: N=9, MAX=4 Calliope, Clio, Erato, Euterpe, Melpomene, Polyhymnia, Terpsichore, Thalia e Urânia Frequência: 1 LETRA Nº de OCORRÊNCIAS A 3 C 2 E 6 M 1 O P T U

(5) Cichelli Função hash perfeita Ex: N=9, MAX=4 Calliope, Clio, Erato, Euterpe, Melpomene, Polyhymnia, Terpsichore, Thalia e Urânia Ordenação: 2 PALAVRA Primeira + Última Calliope 2+6=8 Clio 2+2=4 Erato 6+2=8 Euterpe 6+6=12 Melpomene 1+6=7 Polyhymnia 1+3=4 Terpsichore Thalia 2+3=5 Urânia DECRESCENTE Euterpe Calliope Erato Terpsichore Melpomene Thalia Clio Polyhymnia Urânia

Busca: Função hash perfeita 3 PALAVRA g() h() h() reservados Euterpe (5) Cichelli Função hash perfeita Busca: 3 PALAVRA g() h() h() reservados Euterpe E=0 7 [7] Calliope C=0 8 [7, 8] Erato O=0 5 [5, 7, 8] Terpsichore T=0 2 [2, 5, 7, 8] Melpomene M=0 [0, 2, 5, 7, 8] Thalia A=0 6 [0, 2, 5, 6, 7, 8] Clio 4 [0, 2, 4, 5, 6, 7, 8] Polyhymnia P=0 1 [0, 1, 2, 4, 5, 6, 7, 8] Urânia U=0 6 (*) COLISÃO: Tentar U de 1..4; Permanecendo, retroceder para palavra anterior

Busca: Função hash perfeita 3 PALAVRA g() h() h() reservados (5) Cichelli Função hash perfeita Busca: 3 PALAVRA g() h() h() reservados Polyhymnia P=0 1 [0, 1, 2, 4, 5, 6, 7, 8] Urânia U=0 6 (*) U=1 7 (*) U=2 8 (*) U=3 0 (*) U=4 1 (*) P=1 2 (*) P=2 3 [0, 2, 3, 4, 5, 6, 7, 8] [0, 1, 2, 3, 4, 5, 6, 7, 8] continuação

O pior caso ocorre quando todas as chaves inseridas colidirem (6) Conclusões Eficiência da busca O pior caso ocorre quando todas as chaves inseridas colidirem Neste caso, buscas, inserções e remoções tem tempo execução O(n) Buscas, inserções e remoções em uma tabela hash bem projetada tem tempo de execução constante, i.e., O(1) Aplicações práticas: Bancos de dados pequenos compiladores Caches de browser (navegadores)