Marco Antonio Montebello Júnior

Slides:



Advertisements
Apresentações semelhantes
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Advertisements

HASHING Katia Guimarães julho/2002
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.
Projeto do Semestre, agosto, 2010 Grupo 14F
Indexação Automática de Documentos
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
ESTIMAÇÃO.
Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).
Principais famílias de algoritmos
Sistema Gerenciador de Banco de Dados SGBD
Modelagem Funcional.
Algoritmos para Seleção Simples AULA 16 Profa. Sandra de Amo GBC053 – BCC
Algoritmos para Seleção e Projeção
Gerenciamento de Arquivos, Páginas e Registros
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
Hashing (Espalhamento)
Indexação e Hashing Muitas consultas referenciam apenas uma pequena porção dos registros em uma tabela. Portanto necessitamos ser capaz de localizar estes.
Programação II Estruturas, uniões e enumerações
Hashing (Tabela de Dispersão)
Classificação de dados por Troca: QuickSort
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Análise Léxica Supondo o trecho de programa abaixo:
Funções de hash unidirecionais
Unidades de Armazenamento
1 4.6 – Variáveis - introdução Nesta altura (ao nível da programação) interessa saber que um computador tem: Nesta altura (ao nível da programação) interessa.
Centralizar ou descentralizar estoques
Centralizar ou descentralizar
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Aula prática 12 Listas Encadeadas
Pesquisa em memória primária: hashing
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Professor: Juliano Lucas Gonçalves
Como controlar o caixa Supermercados.
Vetores e Matrizes Laboratório de ICCN Marco Antonio Montebello Júnior
Função Hash e Autenticação em Redes de Computadores
Pesquisa em memória primária: hashing
Linguagem de Programação II Parte V
Linguagem de Programação II Parte IX
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Árvore de Pesquisa Memória Secundária Engenharia de Computação - UFG.
Algorítmos e estrutura de dados III
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
SISTEMAS OPERACIONAIS
Hashing - Espalhamento
Universidade Católica de Pelotas Mestrado em Ciência da Computação
Hash tables Fábio Nakano.
INTRODUÇÃO À ANÁLISE COMBINATÓRIA
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
Geração de Código aula-12-geração-de-código.pdf.
ARQUITETURA DE COMPUTADORES II
SISTEMAS OPERACIONAIS I Gerenciamento de Arquivos
Tabelas Hash Prof. Túlio Toffolo
Exercício 3 Função de hash Assinatura digital
ARQUITETURA DE COMPUTADORES II
Introdução a Banco de Dados
Tabela Hash Alunos : Gustavo Jorge Zanin nºUSP
DNS Willamys Araújo 1. Introdução A internet possui uma infinidade de sites e, para acessá-los, você digita um endereço no campo correspondente do seu.
1 Programação em C Aula Considere que um banco armazena em arquivo as seguintes informações de seus clientes: número da conta (int), nome do cliente.
Tipos de Dados Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem.
Estrutura de dados Aula 6 - hash
REDES DE COMPUTADORES II
Hashing (Tabela de Dispersão)
Organização e Arquitetura de Computadores A.L.Lapolli – Organização e Arquitetura de Computadores Objetivo: Objetivo: Conhecer os sistemas.
Sistemas para Internet Algoritmos e Lógica de Programação
Transcrição da apresentação:

Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Hashing Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior marco.antonio@aes.edu.br

Transformação de Chave - Hashing Transformações de Chave, ou Tabela Hash, ou Tabelas de Dispersão; “Hashing”: fazer picadinho, ou fazer uma bagunça; Técnica que objetiva organizar um conjunto de dados, caracterizados por uma chave, de forma que o acesso tenha o menor custo possível.

Transformação de Chave - Hashing Os registros armazenados em uma tabela são diretamente endereçados a partir de uma transformação aritmética sobre a chave de pesquisa; O preço pago por esta eficiência será o uso maior de memória.

Hashing – Espelhamento Permite agilizar o processo de consulta de informações Não requer a realização de ordenação sobre um conjunto de dados: pesquisa binária e nem a utilização tabelas de índices Tornando a operação de inserção, tão rápida quanto a realização de consulta

Hashing – Espelhamento Internet: segurança na troca de mensagens pela Internet - integridade de uma mensagem Integridade de uma mensagem – assegurar que a mensagem original não foi modificada um byte sequer

Hashing na Internet

Explicação didática do conceito de Hashing – Loja Sears Há muitos anos atrás criou um sistema para controlar a carteira de pedidos de venda comercializados por telefone e catálogo 100 caixas, numeradas de 00 até 99 Os dois dígitos = dois últimos dígitos do número de telefone do cliente Essa função hashing ajudava a pesquisa de um determinado pedido de venda

Explicação didática do conceito de Hashing – Loja Sears Para localizar um pedido de venda especifico: nome do cliente e os dois últimos dígitos do número telefônico Todos os pedidos estavam classificados por esses dois números telefônicos Apenas uma das 100 caixas era pesquisada para achar o pedido pelo nome de uma determinada pessoa

Explicação didática do conceito de Hashing – Loja Sears A função hashing utilizada pela Sears assegurava: distribuição bastante uniforme dos pedidos pelas caixas Ainda mais, o tempo de pesquisa de um pedido era mais ou menos o mesmo em cada uma das caixas

Outro exemplo de Hashing...

Transformação de Chave – Hashing Exemplo Suponhamos um sistema acadêmico que utiliza como chave o número de matrícula do aluno (RA) composto por 7 dígitos numéricos; Para permitir a busca à um registro de um aluno com um custo constante poderia ser utilizada a sua própria matrícula como índice de um vetor vet; Se isto fosse feito, poderíamos acessar os dados do aluno cuja matrícula é mat através de vet[mat];

Transformação de Chave – Hashing Exemplo Assim, o acesso ocorre em ordem constante, entretanto o custo de memória para manter esse acesso é muito alto; Vamos considerar que o registro correspondente a cada aluno tenha a seguinte estrutura:

Transformação de Chave – Hashing Exemplo Considerando que o número de matrícula é composto por 7 dígitos, ele poderia ser caracterizado por qualquer número entre 0 e 9.999.999; Assim, existe 10 milhões de possíveis números de matrícula; Para isto, seria necessário um vetor com 10 milhões de elementos, que poderia ser estabelecido por:

Transformação de Chave – Hashing Exemplo Dessa forma, o nome do aluno de matrícula mat é acessado simplesmente através de vet[mat].nome; Embora o acesso seja rápido o custo de memória é proibitivo; Para a struct definida anteriormente teríamos um gasto de 115 bytes de memória para cada aluno; Assim, o vetor descrito anteriormente consumiria 1.150.000.000 bytes, ou seja, acima de 1 Gbyte de memória;

Transformação de Chave – Hashing Exemplo Em uma situação prática, seria comum encontrar um cadastro com algo em torno de 1.000 alunos, o que necessitaria de apenas 115 Kbytes de memória para armazenamento; Uma forma de resolver o problema do gasto excessivo de memória, garantindo um acesso rápido, é através do uso de tabela hash

Transformação de Chave – Hashing Exemplo Um método de pesquisa através de hashing, é constituído de duas etapas principais: Computar o valor da função de transformação (função hashing), a qual transforma a chave de pesquisa em um endereço de tabela; Considerando que duas ou mais chaves podem ser transformadas em um mesmo endereço de tabela, é necessário existir um método para lidar com colisões.

Transformação de Chave – Hashing Exemplo Mesmo que o número de registros a serem armazenados seja muito menor do que o tamanho da tabela, qualquer que seja a função de transformação, fatalmente ocorrerão algumas colisões; Paradoxo do aniversário (Feller, 1968): “Em um grupo de 23 ou mais pessoas juntas ao acaso, a probabilidade de que 2 pessoas comemorem aniversário no mesmo dia é maior do que 50%.”

Transformação de Chave – Hashing Exemplo Assim, em uma tabela com 365 endereços a probabilidade de colisão entre 23 chaves escolhidas aleatoriamente é maior do que 50%; Alta probabilidade de colisões, mesmo com distribuição uniforme; Exemplos: Armazenar registros cuja chave é o RG de pessoas, com 7 dígitos numéricos, em uma tabela com 10000 endereços; Armazenar registros cuja chave consiste de nomes compostos por até 16 letras (2616 chaves possíveis) em uma tabela com 1000 endereços;

Transformação de Chave – Hashing Exemplo Funções de Transformação: Uma função de transformação deve mapear chaves em inteiros dentro do intervalo [0..M- 1], onde M é o tamanho da tabela; A função ideal é aquela que: seja simples de ser computada; para cada chave de entrada, qualquer uma das saídas possíveis é igualmente provável de ocorrer. Considerando que as transformações sobre as chaves são aritméticas, se houverem chaves não numéricas, elas devem ser transformadas em números;

Transformação de Chave – Hashing Exemplo Um dos métodos que funciona muito bem para a transformação de chave, utiliza o resto da divisão por M: h(K) = K mod M Onde K é um inteiro correspondente à chave; Este é um método muito simples; Cuidado na escolha do valor de M: Se M é par, então h(K) é par quando K é par, e h(K) é ímpar quando K é ímpar; Assim, uma boa estratégia é escolher um valor primo para M;

Transformação de Chave – Hashing Exemplo Um exemplo de função em linguagem C:

Observações Verificar página 3 do arquivo Hashing.pdf

Descrevendo o método da divisão inteira Verificar página 10 do arquivo Hashing.pdf

Espelhamento para chaves alfanuméricas Verificar página 11 do arquivo Hashing.pdf

Tipos de Hashing