SlideShare a Scribd company logo
1 of 49
Download to read offline
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

More Related Content

What's hot

Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
Aula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema BinárioAula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema BinárioSuzana Viana Mota
 
Excel Intermediário
Excel IntermediárioExcel Intermediário
Excel Intermediárioaprcds
 
Algoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsortAlgoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsortBruno Bitencourt Luiz
 
Arquitetura de Computadores: Memórias
Arquitetura de Computadores: MemóriasArquitetura de Computadores: Memórias
Arquitetura de Computadores: MemóriasAlex Camargo
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Laboratório de Programação I: Construção de bibliotecas em C
Laboratório de Programação I: Construção de bibliotecas em CLaboratório de Programação I: Construção de bibliotecas em C
Laboratório de Programação I: Construção de bibliotecas em CAlex Camargo
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - DicionáriosMarcos Castro
 
Curso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicosCurso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicosTiago Antônio da Silva
 
Curso de Básico de Excel 2013 - Parte I
Curso de Básico de Excel  2013 - Parte ICurso de Básico de Excel  2013 - Parte I
Curso de Básico de Excel 2013 - Parte IABCursos OnLine
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
Normalização - Banco de Dados
Normalização - Banco de DadosNormalização - Banco de Dados
Normalização - Banco de DadosRoberto Grande
 

What's hot (20)

Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Aula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema BinárioAula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema Binário
 
Excel Intermediário
Excel IntermediárioExcel Intermediário
Excel Intermediário
 
Algoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsortAlgoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsort
 
Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
 
Arquitetura de Computadores: Memórias
Arquitetura de Computadores: MemóriasArquitetura de Computadores: Memórias
Arquitetura de Computadores: Memórias
 
Estrutura de Dados - Grafos
Estrutura de Dados - GrafosEstrutura de Dados - Grafos
Estrutura de Dados - Grafos
 
Normalização
NormalizaçãoNormalização
Normalização
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Aula 9 banco de dados
Aula 9   banco de dadosAula 9   banco de dados
Aula 9 banco de dados
 
Laboratório de Programação I: Construção de bibliotecas em C
Laboratório de Programação I: Construção de bibliotecas em CLaboratório de Programação I: Construção de bibliotecas em C
Laboratório de Programação I: Construção de bibliotecas em C
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Curso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicosCurso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicos
 
Curso de Básico de Excel 2013 - Parte I
Curso de Básico de Excel  2013 - Parte ICurso de Básico de Excel  2013 - Parte I
Curso de Básico de Excel 2013 - Parte I
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
Normalização - Banco de Dados
Normalização - Banco de DadosNormalização - Banco de Dados
Normalização - Banco de Dados
 

Viewers also liked

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
 

Viewers also liked (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
 

More from CriatividadeZeroDocs

More from 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