SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
Estrutura de Dados

    TABELAS HASH
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
   – Hashing Perfeito
   – Hashing Imperfeito
• Colisões
   – Métodos de Tratamento de Colisões
• Limitações e demais aplicações
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
   – Hashing Perfeito
   – Hashing Imperfeito
• Colisões
   – Métodos de Tratamento de Colisões
• Limitações e demais aplicações
Contextualização
• Dado um conjunto de pares (chave,valor)
   – determinar se uma chave está no conjunto e o
     valor associado
   – inserir um novo par no conjunto
   – remover um par do conjunto
• Estruturas que podem ser usadas
   – Tabelas simples (vetores ou listas)
   – Árvores de busca
   – Tabelas de espalhamento (hash)
Contextualizaçã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.
Contextualização

• Conclusão: os algoritmos mais eficientes de busca
  mostrados até o momento demandam esforço
  computacional O(n), quando usamos uma tabela
  hash, esta pode realizar tais operações em tempo
  esperado O(1).

• Veremos agora, o método de pesquisa conhecido
  como hashing (tabela de dispersão, espalhamento,
  indexação, escrutínio ou método de cálculo de
  endereço). Na média dos casos, é possível encontrar
  a chave com apenas UMA OPERAÇÃO de LEITURA.
Contextualização
• Em algumas aplicações, é necessário obter o
  valor com poucas comparações, logo, é
  preciso saber a posição em que o elemento se
  encontra, sem precisar varrer todas as chaves.
• A estrutura com tal propriedade é chamada
  de tabela hash.
             20 mod 8 = 4                   45 mod 8 = 5

            0   1       2   3   4   5   6     7

  20 ?     64               11 20             7            45 ?
  11 ?
         11 mod 8 = 3
Contextualização
• A utilização de hashing envolve
   – Computar a função de transformação
   – Tratar colisões.
• Uma função hash (h) deve:
   – Mapear chaves em inteiros entre 0 e N-1, onde N é
     o tamanho da tabela.
   – Ser de computação simples
   – Gerar entradas para a tabela com igual
     probabilidade
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
   – Hashing Perfeito
   – Hashing Imperfeito
• Colisões
   – Métodos de Tratamento de Colisões
• Limitações e demais aplicações’
Conceitos Básicos
          • Arranjos utilizam índices para armazenar as
            informações.

          • Arranjos não fornecem mecanismos para calcular
            o índice a partir de uma informação armazenada.
            A pesquisa não é O(1).

               1         2        3            4            5               6
Família
           José Maria   Leila    Artur      Jolinda       Gisela      Alciene


           Família[1] = “José Maria”
           Família[3] = “Artur”          Em qual posição está “Alciene” ?
           Família[2] = “Leila”
Conceitos Básicos

• Ideal: Parte da informação poderia ser utilizada para
  recuperar diretamente a informação.


       Que informação poderia ser utilizada !?

    Problema: Esta estratégia exigiria um arranjo muito
    grande e a maioria das posições seriam desperdiçadas.
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
   – Hashing Perfeito
   – Hashing Imperfeito
• Colisões
   – Métodos de Tratamento de Colisões
• Limitações e demais aplicações’
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 e que
  não admitem repetições.

• 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)

         123.456.781-00                                               19
                                                                      37
         143.576.342-23
                                          Função de                   50
         345.365.768-93
         879.094.345-45
                                           Hashing                    85
         999.999.999-99                                               20
Tabela
 Hash    19    123.456.781-00; Fausto Silva; Av. Canal. Nº 45.
         20
         ...
         37    143.576.342-23; Carla Perez; Rua Celso Oliva. Nº 27.
         ...
         50    345.365.768-93; Gugu Liberato; Av. Atlântica. S/N.
         ...
         85    879.094.345-45 ; Hebe Camargo; Rua B. Nº 100.
         ...
Tabela Hash
• Em Computação a Tabela Hash é uma estrutura de
  dados especial, que armazena as informações
  desejadas associando chaves de pesquisa a estas
  informações.

• Objetivo: a partir de uma chave, fazer uma busca
  rápida e obter o valor desejado.

• A idéia central por trás da construção de uma Tabela
  Hash é identificar, na chave de busca, quais as partes
  que são significativas.
Ilustração de uma Tabela Hash
                                chave   dados
                           1
                           2

                      ?
 registro (chave k)        X K          registro



                          n-
                          1 n



 Como o registro (com chave K) foi armazenado na
 posição X na Tabela Hash ao lado?

    Resp: Através de uma Função de Hashing.
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
  I1, I2, ..., In, 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.
Como representar Tabelas Hash?
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.
Função de Hashing
   Características desejáveis: eficiência e bom espalhamento.

   A função de Hashing é extremamente importante, pois ela
    é responsável por distribuir as informações pela Tabela Hash.

   A implementação da função de Hashing tem influência direta na
    eficiência das operações sobre o Hash.
Função de Hashing
   Método mais usado
      Usa o resto da divisão por M

         H(K)=K mod M

         Onde K é um inteiro correspondente à chave.

   As chaves não numéricas devem ser transformadas em
    números.




   n é o número de caracteres da chave
   Chave[i] corresponde à representação ASCII do i-ésimo
    caracter da chave
   p[i] é um inteiro de um conjunto de pesos gerado
    randomicamente.
Função de Hashing

   Uma boa função hash (ou de hashing) deve
    apresentar duas propriedades básicas:
      seu cálculo deve ser rápido;

      deve gerar poucas colisões.

   Escolha de funções h apropriadas tentam
    minimizar a probabilidade de ocorrência de
    colisões.
Ilustração da Função de Hashing

                                       chave   dados
                                   1                         Os valores da chave podem
                                2                             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)
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
  – Hashing Perfeito
  – Hashing Imperfeito
• Colisões
  – Métodos de Tratamento de Colisões
• Limitações e demais aplicações
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 (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)]
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
  – Hashing Perfeito
  – Hashing Imperfeito
• Colisões
  – Métodos de Tratamento de Colisões
• Limitações e demais aplicações
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)
Considerações sobre Funções de Hashing (1/2)

• Na prática funções de hashing perfeitas ou quase
  perfeitas:
  – são encontradas apenas onde a colisão não é tolerável (nas
    funções de hashing na criptografia);

  – Quando conhecemos previamente o conteúdo a ser
    armazenado na tabela.

• Nas Tabelas Hash comuns a colisão é apenas
  indesejável, diminuindo o desempenho do sistema.
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.
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
  – Hashing Perfeito
  – Hashing Imperfeito
• Colisões
  – Métodos de Tratamento de Colisões
• Demais Aplicações
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:
  – Endereçamento Aberto (Rehash);
  – Encadeamento.
Encadeamento (Hashing aberto)
Característica Principal: A informação é armazenada em
estruturas encadeadas fora da Tabela Hash. Ou seja manter
numa lista ligada as chaves que levam a um mesmo índice na
tabela de hashing.

  0         KM-1     K4

  1          K5      K6

  2          K1

  3         KM-4     KM       K3



M-2          K2

M-1
Exemplo de Encadeamento

• Suponha que queiramos armazenar os caracteres que
  compõem a palavra CHAVES em um vetor de P = 7 posições
  (0..6) conforme a seguinte função f(k) = k(código ASCII) % P.

                 0

                 1

                 2        H       A       V

                 3

                 4       C

                 5

                 6       E        S
Encadeamento (Hashing aberto)

• Operações
Endereçamento Aberto (Rehash)
             (ou Hashing Fechado)
• Característica Principal:
  – A estratégia é utilizar o próprio espaço da tabela que
    ainda não foi ocupado para armazenar a chave que
    gerou a colisão.
  – Quando o número de registros a serem armazenados
    na tabela puder ser previamente estimado, então não
    haverá necessidade de usar apontadores para
    armazenar os registros
Endereçamento Aberto (Rehash)
               (ou Hashing Fechado)

• Quando a função hash gera para uma chave
 uma posição que já está ocupada, o
 procedimento de armazenamento verifica se a
 posição seguinte também está ocupada; se
 estiver ocupada, verifica a posição seguinte e
 assim por diante, até encontrar uma posição
 livre.
Endereçamento Aberto (Rehash)
            (ou Hashing Fechado)

• Nesse tipo de tratamento, considera-se a
 tabela como uma estrutura circular, onde a
 primeira posição sucede a última posição.) A
 entrada é então armazenada nessa posição.

• Se a busca termina na posição inicialmente
 determinada pela função hash, então a
 capacidade da tabela está esgotada e uma
Endereçamento Aberto (Rehash)
           (ou Hashing Fechado)
• Operações
Endereçamento Aberto (Rehash)
           (ou Hashing Fechado)
• Operações
Roteiro
• Contextualização
• Conceitos Básicos
• Hashing (método de pesquisa)
  – Hashing Perfeito
  – Hashing Imperfeito
• Colisões
  – Métodos de Tratamento de Colisões
• Limitações e demais aplicações
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.
• No pior caso a complexidade das operações pode ser
  O(N). Caso em que todos os elementos inseridos
  colidirem.
Vantagens e Desvantagens
• Vantagens
  – Algoritmos simples e eficientes para inserção, retirada e
    busca.
  – Alta eficiência no custo de pesquisa, que é O(1) para o caso
    médio.
• 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.
Aplicações de Hashing

• Algumas áreas de aplicação de Hashing:
   – Integridade de Dados
   – Criptografia
   – Compactação de Dados
   – Tabelas de transposição em jogos de xadrez para
     computador
   – Serviços de DHCP
   – Thesaurus
       • no que tange à computação, um tesauro representa uma
         base de dados contendo tópicos semanticamente
         ortogonais, comumente utilizada em tarefas de busca.
Referências
• Notas de aulas Prof. Thales Castro

Más contenido relacionado

La actualidad más candente

Operações em Árvores Binárias
Operações em Árvores BináriasOperações em Árvores Binárias
Operações em Árvores Bináriaselliando dias
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Gabriel Jesus
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e bináriasSérgio Souza Costa
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Thayse
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHASAparicio Junior
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Leinylson Fontinele
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em pythonCiro Rafael
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Leinylson Fontinele
 

La actualidad más candente (20)

Operações em Árvores Binárias
Operações em Árvores BináriasOperações em Árvores Binárias
Operações em Árvores Binárias
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Árvore Binária
Árvore BináriaÁrvore Binária
Árvore Binária
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0
 
Algoritmos - Matrizes
Algoritmos - MatrizesAlgoritmos - Matrizes
Algoritmos - Matrizes
 
Estrutura de Dados - Grafos
Estrutura de Dados - GrafosEstrutura de Dados - Grafos
Estrutura de Dados - Grafos
 
Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)
 
Java: Collections
Java: CollectionsJava: Collections
Java: Collections
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em python
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 

Destacado

16 algoritmos de busca em tabelas - hash
16   algoritmos de busca em tabelas - hash16   algoritmos de busca em tabelas - hash
16 algoritmos de busca em tabelas - hashRicardo Bolanho
 
Hashing enderecamento aberto bean - bean
Hashing enderecamento aberto bean - beanHashing enderecamento aberto bean - bean
Hashing enderecamento aberto bean - beanElaine Cecília Gatto
 
Hashing enderecamento aberto - operações
Hashing enderecamento aberto - operaçõesHashing enderecamento aberto - operações
Hashing enderecamento aberto - operaçõesElaine Cecília Gatto
 
Hashing endereçamento aberto - main
Hashing endereçamento aberto - mainHashing endereçamento aberto - main
Hashing endereçamento aberto - mainElaine Cecília Gatto
 
Estrutura De Arquivos
Estrutura De ArquivosEstrutura De Arquivos
Estrutura De ArquivosJuliano Linux
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadasrenatopaschoal
 
Hash table and heaps
Hash table and heapsHash table and heaps
Hash table and heapsKatang Isip
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoGustavo Carvalho
 
Seminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraSeminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraIFPB
 
Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...
Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...
Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...Thiago Colares
 
Pesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafosPesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafosDiego Henrique
 
Metodos de ordenação estrutura de dados
Metodos de ordenação   estrutura de dadosMetodos de ordenação   estrutura de dados
Metodos de ordenação estrutura de dadosThalita Chaves
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos GrafosChromus Master
 

Destacado (20)

16 algoritmos de busca em tabelas - hash
16   algoritmos de busca em tabelas - hash16   algoritmos de busca em tabelas - hash
16 algoritmos de busca em tabelas - hash
 
Hash e Btree
Hash e BtreeHash e Btree
Hash e Btree
 
Hashing enderecamento aberto bean - bean
Hashing enderecamento aberto bean - beanHashing enderecamento aberto bean - bean
Hashing enderecamento aberto bean - bean
 
Hashing enderecamento aberto - operações
Hashing enderecamento aberto - operaçõesHashing enderecamento aberto - operações
Hashing enderecamento aberto - operações
 
Hashing endereçamento aberto - main
Hashing endereçamento aberto - mainHashing endereçamento aberto - main
Hashing endereçamento aberto - main
 
Tabela Hash com Lista Encadeada
Tabela Hash com Lista EncadeadaTabela Hash com Lista Encadeada
Tabela Hash com Lista Encadeada
 
Estrutura De Arquivos
Estrutura De ArquivosEstrutura De Arquivos
Estrutura De Arquivos
 
Heap
HeapHeap
Heap
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadas
 
Mapeamento objeto relacional
Mapeamento objeto relacionalMapeamento objeto relacional
Mapeamento objeto relacional
 
KERNEL, SISTEMA Y TABLA DE ASIGNACIÓN DE ARCHIVOS
KERNEL, SISTEMA Y TABLA DE ASIGNACIÓN DE ARCHIVOSKERNEL, SISTEMA Y TABLA DE ASIGNACIÓN DE ARCHIVOS
KERNEL, SISTEMA Y TABLA DE ASIGNACIÓN DE ARCHIVOS
 
Hash table and heaps
Hash table and heapsHash table and heaps
Hash table and heaps
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Seminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraSeminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra Lara
 
Kruskal
KruskalKruskal
Kruskal
 
Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...
Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...
Aplicação da Teoria dos Grafos e Algoritmos na Engenharia de Software: Hyperl...
 
Pesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafosPesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafos
 
Grafos
GrafosGrafos
Grafos
 
Metodos de ordenação estrutura de dados
Metodos de ordenação   estrutura de dadosMetodos de ordenação   estrutura de dados
Metodos de ordenação estrutura de dados
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos Grafos
 

Más de CriatividadeZeroDocs

Más de CriatividadeZeroDocs (11)

Aquece Para a prova de EDA3
Aquece Para a prova de EDA3Aquece Para a prova de EDA3
Aquece Para a prova de EDA3
 
Introdução a estrutura de dados
Introdução a estrutura de dadosIntrodução a estrutura de dados
Introdução a estrutura de dados
 
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
 
Listas em C
Listas em CListas em C
Listas em C
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Coalesced hashing / Hash Coalescido
Coalesced hashing / Hash CoalescidoCoalesced hashing / Hash Coalescido
Coalesced hashing / Hash Coalescido
 
Implementação do Hash Coalha/Coalesced
Implementação do Hash Coalha/CoalescedImplementação do Hash Coalha/Coalesced
Implementação do Hash Coalha/Coalesced
 
Exercício sobre hashing
Exercício sobre hashingExercício sobre hashing
Exercício sobre hashing
 
Operadores Lineares
Operadores LinearesOperadores Lineares
Operadores Lineares
 
Machado de assis
Machado de assisMachado de assis
Machado de assis
 
áLbum de fotografias
áLbum de fotografiasáLbum de fotografias
áLbum de fotografias
 

Aula sobre Tabela Hash

  • 1. Estrutura de Dados TABELAS HASH
  • 2. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Limitações e demais aplicações
  • 3. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Limitações e demais aplicações
  • 4. Contextualização • Dado um conjunto de pares (chave,valor) – determinar se uma chave está no conjunto e o valor associado – inserir um novo par no conjunto – remover um par do conjunto • Estruturas que podem ser usadas – Tabelas simples (vetores ou listas) – Árvores de busca – Tabelas de espalhamento (hash)
  • 5. Contextualizaçã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.
  • 6. Contextualização • Conclusão: os algoritmos mais eficientes de busca mostrados até o momento demandam esforço computacional O(n), quando usamos uma tabela hash, esta pode realizar tais operações em tempo esperado O(1). • Veremos agora, o método de pesquisa conhecido como hashing (tabela de dispersão, espalhamento, indexação, escrutínio ou método de cálculo de endereço). Na média dos casos, é possível encontrar a chave com apenas UMA OPERAÇÃO de LEITURA.
  • 7. Contextualização • Em algumas aplicações, é necessário obter o valor com poucas comparações, logo, é preciso saber a posição em que o elemento se encontra, sem precisar varrer todas as chaves. • A estrutura com tal propriedade é chamada de tabela hash. 20 mod 8 = 4 45 mod 8 = 5 0 1 2 3 4 5 6 7 20 ? 64 11 20 7 45 ? 11 ? 11 mod 8 = 3
  • 8. Contextualização • A utilização de hashing envolve – Computar a função de transformação – Tratar colisões. • Uma função hash (h) deve: – Mapear chaves em inteiros entre 0 e N-1, onde N é o tamanho da tabela. – Ser de computação simples – Gerar entradas para a tabela com igual probabilidade
  • 9. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Limitações e demais aplicações’
  • 10. Conceitos Básicos • Arranjos utilizam índices para armazenar as informações. • Arranjos não fornecem mecanismos para calcular o índice a partir de uma informação armazenada. A pesquisa não é O(1). 1 2 3 4 5 6 Família José Maria Leila Artur Jolinda Gisela Alciene Família[1] = “José Maria” Família[3] = “Artur” Em qual posição está “Alciene” ? Família[2] = “Leila”
  • 11. Conceitos Básicos • Ideal: Parte da informação poderia ser utilizada para recuperar diretamente a informação.  Que informação poderia ser utilizada !? Problema: Esta estratégia exigiria um arranjo muito grande e a maioria das posições seriam desperdiçadas.
  • 12. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Limitações e demais aplicações’
  • 13. 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 e que não admitem repetições. • 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.
  • 14. 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.
  • 15. Definição de Hash (3/3) 123.456.781-00 19 37 143.576.342-23 Função de 50 345.365.768-93 879.094.345-45 Hashing 85 999.999.999-99 20 Tabela Hash 19 123.456.781-00; Fausto Silva; Av. Canal. Nº 45. 20 ... 37 143.576.342-23; Carla Perez; Rua Celso Oliva. Nº 27. ... 50 345.365.768-93; Gugu Liberato; Av. Atlântica. S/N. ... 85 879.094.345-45 ; Hebe Camargo; Rua B. Nº 100. ...
  • 16. Tabela Hash • Em Computação a Tabela Hash é uma estrutura de dados especial, que armazena as informações desejadas associando chaves de pesquisa a estas informações. • Objetivo: a partir de uma chave, fazer uma busca rápida e obter o valor desejado. • A idéia central por trás da construção de uma Tabela Hash é identificar, na chave de busca, quais as partes que são significativas.
  • 17. Ilustração de uma Tabela Hash chave dados 1 2 ? registro (chave k) X K registro n- 1 n Como o registro (com chave K) foi armazenado na posição X na Tabela Hash ao lado? Resp: Através de uma Função de Hashing.
  • 18. 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 I1, I2, ..., In, 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.
  • 20. 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.
  • 21. Função de Hashing  Características desejáveis: eficiência e bom espalhamento.  A função de Hashing é extremamente importante, pois ela é responsável por distribuir as informações pela Tabela Hash.  A implementação da função de Hashing tem influência direta na eficiência das operações sobre o Hash.
  • 22. Função de Hashing  Método mais usado  Usa o resto da divisão por M  H(K)=K mod M  Onde K é um inteiro correspondente à chave.  As chaves não numéricas devem ser transformadas em números.  n é o número de caracteres da chave  Chave[i] corresponde à representação ASCII do i-ésimo caracter da chave  p[i] é um inteiro de um conjunto de pesos gerado randomicamente.
  • 23. Função de Hashing  Uma boa função hash (ou de hashing) deve apresentar duas propriedades básicas:  seu cálculo deve ser rápido;  deve gerar poucas colisões.  Escolha de funções h apropriadas tentam minimizar a probabilidade de ocorrência de colisões.
  • 24. Ilustração da Função de Hashing chave dados 1  Os valores da chave podem 2 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)
  • 25. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Limitações e demais aplicações
  • 26. Hashing Perfeito • Característica: – Para quaisquer chaves x e y diferentes e pertencentes a A, a função utilizada fornece saídas diferentes;
  • 27. 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)]
  • 28. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Limitações e demais aplicações
  • 29. Hashing Imperfeito • Características: – Existe chaves x e y diferentes e pertencentes a A, onde a função Hash utilizada fornece saídas iguais;
  • 30. 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).
  • 31. Exemplo de Hashing Imperfeito (2/2)
  • 32. Considerações sobre Funções de Hashing (1/2) • Na prática funções de hashing perfeitas ou quase perfeitas: – são encontradas apenas onde a colisão não é tolerável (nas funções de hashing na criptografia); – Quando conhecemos previamente o conteúdo a ser armazenado na tabela. • Nas Tabelas Hash comuns a colisão é apenas indesejável, diminuindo o desempenho do sistema.
  • 33. 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.
  • 34. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Demais Aplicações
  • 35. 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).
  • 36. 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: – Endereçamento Aberto (Rehash); – Encadeamento.
  • 37. Encadeamento (Hashing aberto) Característica Principal: A informação é armazenada em estruturas encadeadas fora da Tabela Hash. Ou seja manter numa lista ligada as chaves que levam a um mesmo índice na tabela de hashing. 0 KM-1 K4 1 K5 K6 2 K1 3 KM-4 KM K3 M-2 K2 M-1
  • 38. Exemplo de Encadeamento • Suponha que queiramos armazenar os caracteres que compõem a palavra CHAVES em um vetor de P = 7 posições (0..6) conforme a seguinte função f(k) = k(código ASCII) % P. 0 1 2 H A V 3 4 C 5 6 E S
  • 40. Endereçamento Aberto (Rehash) (ou Hashing Fechado) • Característica Principal: – A estratégia é utilizar o próprio espaço da tabela que ainda não foi ocupado para armazenar a chave que gerou a colisão. – Quando o número de registros a serem armazenados na tabela puder ser previamente estimado, então não haverá necessidade de usar apontadores para armazenar os registros
  • 41. Endereçamento Aberto (Rehash) (ou Hashing Fechado) • Quando a função hash gera para uma chave uma posição que já está ocupada, o procedimento de armazenamento verifica se a posição seguinte também está ocupada; se estiver ocupada, verifica a posição seguinte e assim por diante, até encontrar uma posição livre.
  • 42. Endereçamento Aberto (Rehash) (ou Hashing Fechado) • Nesse tipo de tratamento, considera-se a tabela como uma estrutura circular, onde a primeira posição sucede a última posição.) A entrada é então armazenada nessa posição. • Se a busca termina na posição inicialmente determinada pela função hash, então a capacidade da tabela está esgotada e uma
  • 43. Endereçamento Aberto (Rehash) (ou Hashing Fechado) • Operações
  • 44. Endereçamento Aberto (Rehash) (ou Hashing Fechado) • Operações
  • 45. Roteiro • Contextualização • Conceitos Básicos • Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito • Colisões – Métodos de Tratamento de Colisões • Limitações e demais aplicações
  • 46. 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. • No pior caso a complexidade das operações pode ser O(N). Caso em que todos os elementos inseridos colidirem.
  • 47. Vantagens e Desvantagens • Vantagens – Algoritmos simples e eficientes para inserção, retirada e busca. – Alta eficiência no custo de pesquisa, que é O(1) para o caso médio. • 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.
  • 48. Aplicações de Hashing • Algumas áreas de aplicação de Hashing: – Integridade de Dados – Criptografia – Compactação de Dados – Tabelas de transposição em jogos de xadrez para computador – Serviços de DHCP – Thesaurus • no que tange à computação, um tesauro representa uma base de dados contendo tópicos semanticamente ortogonais, comumente utilizada em tarefas de busca.
  • 49. Referências • Notas de aulas Prof. Thales Castro