rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma...

49
Dicionários TAD Orientado a conteúdo

Transcript of rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma...

Page 1: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Dicionários

TAD Orientado a conteúdo

Page 2: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Dicionários

Definição: Tipo abstrato de dados orientado a conteúdo.

Contrasta com as PILHAs e FILAs que são orientadas a posição.

Operações implementadas:

Inserir(d,x) – insere um item x no dicionário d

 Remover(d, x) – remove um item x de um dicionário d

Buscar(d, k) – busca uma chave k em um dicionário d

Page 3: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Tipos de dicionários

Estáticos

• Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam ordenados • Aonde implementar: Vetor

Semi-dinâmicos

• Construídos com um certa margem para alterações • Suporte para inserção e Busca. Remoção é um problema • Hashing com endereçamento direto.

Dinâmicos

• Construído com completa capacidade de alteração •  Inserção, busca e remoção são implementados com custos ótimos • Árvores e Hashing com endereçamento aberto.

Page 4: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Dicionário: Estático

Nosso amigo “Vetor”

Variável composta Homogênea que permite o acesso DIRETO a qualquer elemento.

Vamos considerar a operação de busca sendo executadas no vetor.

Cenário I: Vetor desordenado.

Cenário II: Vetor ordenado.

Page 5: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Vetor desordenado

Única forma de implementar a busca por um elemento é examinar sequencialmente os elementos no vetor.

Reduz o tamanho do problema em UMA unidade por comparação

Qual o PIOR CASO para essa abordagem?

Quanto custa fazer isso em termos de comparações?

Page 6: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Vetor Ordenado

Existe uma nova informação sobre o vetor, vamos usar a informação!!!

Busca Binária!!!

Reduzir o problema pela metade com apenas UMA comparação.

Qual o PIOR CASO para essa abordagem?

Quanto custa fazer isso em termos de comparações?

Page 7: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Exemplo & Análise

Page 8: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Custos

Inserir Remover Buscar

Estático N/A N/A

N comparações, vetor desordenado

log(n) comparações, vetor ordenado

Semi-dinâmico

Dinâmica

Page 9: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Tipos de dicionários

Estáticos

• Construídos uma vez e nunca mudam. • Busca é ótima desde que seus elementos estejam ordenados • Aonde implementar: Vetor

Semi-dinâmicos

• Construídos com um certa margem para alterações • Suporte para inserção e Busca. Remoção é um problema • Hashing com endereçamento fechado.

Dinâmicos

• Construído com completa capacidade de alteração •  Inserção, busca e remoção são implementados com custos ótimos • Árvores e Hashing com endereçamento aberto.

Page 10: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Semi-Dinâmicos

  Os métodos de busca visto até momento:

  São baseado na comparação das chaves.

  O algoritmo mais eficiente considera os elementos ordenados e tiram proveito disso.

  O algoritmo mais eficientes tem custo computacional O(log n).

  A busca baseada em hashing (tabela de dispersão ou espalhamento) é mais eficiente.

  Na média, é possível encontrar a chave com apenas K COMPARAÇÕES, onde k é beemmm menor que o tamanho do conjunto de chaves.

Page 11: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

O hashing

Page 12: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Exemplo

Page 13: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Hashing Perfeito

Page 14: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Em geral…é imperfeito

Page 15: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

A Função de Hash

  Uma função de dispersão (função hash) mapeia uma chave de busca para um índice da tabela.   O ideal é que a função forneça índices únicos para o conjunto de chaves.

  A função de Hashing tem influência direta na eficiência das operações da Hash.   Quanto melhor for o espalhamento mais eficiente serão as operações

Page 16: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Propriedade

  De fácil implementação;

 Conta simples de ser feita

  Devem espalhar bem as chaves de busca;

 Evitar colisões, duas ou mais chaves distribuídas na mesma posição;

Page 17: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Uma função Hashing

  M deve ser um número PRIMO.

  O FATOR de CARGA da tabela é um bom parâmetro para iniciar a busca por M.

 A ocupação ESPERADA da tabela

H(x) = x resto M

Page 18: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Caso de uso

Page 19: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Colisões

Duas chaves distintas são mapeadas para a mesma entrada da tabela.

  O Tratamento das colisões é feito

Encadeamento

Endereçamento aberto

Page 20: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Endereçamento Aberto

  As chaves que sofreram colisão são inseridas na própria tabela.

  Como buscar uma posição Não ocupada na Tabela

Prospecção Linear

Prospecção Quadrática

 Duplo Hashing

Page 21: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Prospecção Linear

  O índice é incrementado (+i)

  (h(x) + i) RESTO M

Encerra Prospecção se a posição estiver vazia

Page 22: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

O Que é preciso para construir uma Hash?   UM vetor de tamanho suficientemente GRANDE

  UMA função de Espalhamento, que distribua bem os elemento

  UM Método de Tratamento de Colisão, encontre um espaço vazio

Page 23: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Análise

Operação de Inserção

Calcular a posição, constante;

 No caso de colisão, J tentativas;

 O que garante um J pequeno é uma boa escolha da função de hashing e o tamanho da tabela

Page 24: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Análise

Operação de BUSCA

Calcular a posição, constante;

Prospectar a tabela:

  Até encontrar a chave ou;

  Um espaço vazio;

Máximo de J tentativas.

Page 25: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Custos

Inserir Remover Buscar

Estático N/A N/A

N comparações, vetor desordenado

log(n) comparações, vetor ordenado

Semi-dinâmico Constante N/A Constante

Dinâmica

Page 26: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Tipos de dicionários

Estáticos

•  Construídos uma vez e nunca mudam. •  Busca é ótima desde que seus elementos estejam ordenados •  Aonde implementar: Vetor

Semi-dinâmicos

• Construídos com um certa margem para alterações • Suporte para inserção e Busca. Remoção é um problema • Hashing com endereçamento fechado.

Dinâmicos

• Construído com completa capacidade de alteração •  Inserção, busca e remoção são implementados com custos ótimos • Árvores e Hashing com endereçamento aberto.

Page 27: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Dinâmico

Implementa Inserção, Busca e Remoção

Menor custo para as três operações

Estruturas usadas

Árvore de Busca Balanceada (AVL, Vermelha e Preta, Arvores 1-2-3);

Tabela Hashing com tratamento de colisão baseado em Lista encadeadas.

Page 28: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

G.M. Adelson-Velskii e E.M. Landis

Árvore Binária de Busca Balanceada

  No máximo DOIS descendentes por nó;

Os descendentes no ramo ESQUERDO da árvore é MENOR que a raiz

Os descendentes no ramo DIREITO da árvore é MAIOR que a raiz;

 Para nó qualquer da árvore, as alturas de suas sub-árvores esquerda e direita diferem de, no máximo, 1.

Page 29: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Instância de uma AVL

Page 30: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Busca

16

Page 31: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Busca II

5

Page 32: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Busca III

1

Page 33: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Análise da Busca

  Similar a Busca Binária

Elimina aproximadamente metade dos elementos em cada comparação

Seu custo é proporcional a log(n), onfr n é o número de elementos na árvore

Page 34: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Custos

Inserir Remover Buscar

Estático N/A N/A

N comparações, vetor desordenado

log(n) comparações, vetor ordenado

Semi-dinâmico Constante N/A Constante

Dinâmica log(n) comparações

Page 35: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Inserção

16

Page 36: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Após a Inserção

FB=+1

FB=+1

FB=+1

Page 37: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Análise da Inserção

  O custo de Buscar a posição adequada para a inserção do elemento

  O custo de manter a propriedade da AVL ao longo do caminho de BUSCA

Verificar os FBs e ajustá-los quando eles forem iguais a (+/-)DOIS

Custo total : log(n)

Page 38: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Custos

Inserir Remover Buscar

Estático N/A N/A

N comparações, vetor desordenado

log(n) comparações, vetor ordenado

Semi-dinâmico

Constante N/A Constante

Dinâmica log(n) comparações

log(n) comparações

Page 39: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Remoção

16

Page 40: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Remoção

FB=+1

FB=+1

FB=+1 16

Page 41: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Após a Remoção

FB=0

FB=0

FB=0

Page 42: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Análise da Remoção

  O custo de Buscar o elemento a ser removido

  O custo de manter a propriedade da AVL ao longo do caminho de BUSCA

Verificar os FBs e ajustá-los quando eles forem iguais a (+/-)DOIS

Custo total : log(n)

Page 43: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Custos

Inserir Remover Buscar

Estático N/A N/A

N comparações, vetor desordenado

log(n) comparações, vetor ordenado

Semi-dinâmico

Constante N/A Constante

Dinâmica log(n) comparações

log(n) comparações

log(n) comparações

Page 44: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Desbalanceamento: Rotação Simple Direita

Page 45: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Desbalanceamento: Rotação Simples Direita

FB= -2

FB= -1

FB= 0

FB= 0

FB= 0

FB= 0

Page 46: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Desbalanceamento: Rotação Simples Esquerda

Page 47: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Desbalanceamento: Rotação Dupla Direita

Page 48: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Desbalanceamento: Rotação Dupla Esquerda

6

4

5

5

4 6

Page 49: rios do údo - cavmelo.files.wordpress.com · Tipos de dicionários Estáticos • Construídos uma vez e nunca mudam. • Busca tem custo ótimo, desde que seus elementos estejam

Tipos de Rotação

Da Raiz Do Filho mais pesado

Tipo Rotação

Fator de Balanceamento

+2 +1 Simples para Esquerda

+2 -1 Dupla para Direita

-2 -1 Simples para Direita

-2 +1 Dupla para Esquerda