estruturas de dados - faccamp · listas ligadas (ou encadeadas) • existem muitas aplicações na...
TRANSCRIPT
![Page 1: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/1.jpg)
Projeto e Análise de Algoritmos IIProjeto e Análise de Algoritmos II
1
Estruturas de DadosEstruturas de Dados
Prof. Dr. Osvaldo Luiz de OliveiraProf. Dr. Osvaldo Luiz de Oliveira
Estas anotações devem ser complementadas por
apontamentos em aula.
Estruturas de DadosEstruturas de Dados
![Page 2: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/2.jpg)
Vetor (array)
• É uma estrutura de dados que armazena elementos do mesmo tipo (inteiro, ou real, ou um registro etc.).
2
• Permite acesso indexado a qualquer de seus elementos.
• Tem sempre um tamanho fixo.
![Page 3: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/3.jpg)
Complexidades
3
• Espaço: tendo um tamanho fixo, um vetor gasta sempre uma quantidade constante de memória durante a execução do algoritmo. Portanto, a complexidade de espaço devida a um vetor é O (1).
• Tempo para inserir, buscar ou remover um elemento: qualquer elemento de um vetor pode ser pesquisado, inserido ou removido em um tempo constante ( O(1) ).
![Page 4: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/4.jpg)
Limitações
4
• Um vetor não pode ser usado para armazenar elementos de diferentes tipos.
• O tamanho de um vetor não pode aumentar dinamicamente, i.e., à medida que o algoritmo é executado.
![Page 5: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/5.jpg)
Registro
5
• É uma E.D. similar a um vetor, exceto pelo fato de que ela pode armazenar elementos de diferentes tipos.
registro exemplo n: inteiro;n: inteiro;x: real;v: vetor [1..20] de inteiro;matriz: vetor [1..20, 1..30] de booleano;registro outroRegistro
h: cadeia_de_caracteres;c: caracter;y: vetor [ 1..12] de inteiro;
![Page 6: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/6.jpg)
Acesso
exemplo.n := 5;exemplo.x := 3.2;y := exemplo.x * 5 + exemplo.n;
6
exemplo.v [2] := 15;Exemplo.matriz [2, 4] := verdadeiro;exemplo.outroRegistro.h := ‘a’;
![Page 7: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/7.jpg)
Complexidade
7
• Espaço: tendo um tamanho fixo, um registro gasta sempre uma quantidade constante de memória durante a execução de um algoritmo. Portanto, a complexidade de espaço é O (1).
• Tempo para buscar, inserir e remover: qualquer campo de um registro pode ser pesquisado, inserido ou removido em um tempo constante ( O(1) ).
![Page 8: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/8.jpg)
Limitação
8
• O tamanho de um registro não pode aumentar dinamicamente.
![Page 9: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/9.jpg)
PilhaDisciplina de entrada e saída de elementos:
LIFO (last input, first output).
9
Fonte: SZWARCFITER, J. L.; MARKENZON, L. Estruturas de Dados e Seus Algoritmos. Rio de Janeiro: LTC, 1994.
![Page 10: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/10.jpg)
Pilha
10
Fonte: SZWARCFITER, J. L.; MARKENZON, L. Estruturas de Dados e Seus Algoritmos. Rio de Janeiro: LTC, 1994.
![Page 11: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/11.jpg)
AlgoritmosAlgoritmo Empilhar (P, x)
se ( topo ≠ M )
topo := topo + 1;P [topo] := x
senãoEscrever(‘Escrever: pilha cheia.’)
11
senãoEscrever(‘Escrever: pilha cheia.’)
Algoritmo Desempilhar (P, x)
se ( topo ≠ 0 )
x := P [topo]; topo := topo - 1;retornar x
senão Escrever (‘Escrever: pilha vazia.’)
![Page 12: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/12.jpg)
AlgoritmosAlgoritmo Vazia (P)
se ( topo = 0 ) retornar verdadeirosenão retornar falso
Algoritmo Cheia (P)
12
se ( topo = M ) retornar verdadeirosenão retornar falso
Algoritmo ElementoNoTopo (P)
se ( não Vazia (P) ) retornar P [topo]senão Escrever (‘Erro: pilha vazia.’)
![Page 13: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/13.jpg)
Complexidades
Empilhar, Desempilhar, Vazia, Cheia, ElementoNoTopoT(n) = O (1).
13
![Page 14: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/14.jpg)
FilaDisciplina de entrada e saída de elementos:
FIFO (first input, first output).
14
Fonte: SZWARCFITER, J. L.; MARKENZON, L. Estruturas de Dados e Seus Algoritmos. Rio de Janeiro: LTC, 1994.
![Page 15: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/15.jpg)
Fila
15
Fonte: SZWARCFITER, J. L.; MARKENZON, L. Estruturas de Dados e Seus Algoritmos. Rio de Janeiro: LTC, 1994.
![Page 16: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/16.jpg)
AlgoritmosAlgoritmo Inserir (F, x)
prox := r mod M + 1;se ( r ≠ f )
r := prox; F [prox] := x;se ( f = 0 ) f := 1
senãoEscrever(‘Fila cheia.’)
16
senãoEscrever(‘Fila cheia.’)
Algoritmo Retirar (F, x)
se ( f ≠ 0 )
x := F [ f ]; se ( f = r ) entãof := r := 0 senãof := f mod M + 1;retornarx
senão Escrever (‘Fila vazia.’)
![Page 17: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/17.jpg)
AlgoritmosAlgoritmo Vazia (F)
se ( f = 0 ) retornar verdadeirosenão retornar falso
Algoritmo Cheia (F)
17
prox := r mod M + 1; se ( f = r ) retornar verdadeirosenão retornar falso
Algoritmo ElementoNaFrente (F)
se ( não Vazia (F) ) retornar F [ f ]senão Escrever (‘Erro: fila vazia.’)
![Page 18: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/18.jpg)
Complexidades
Inserir, Retirar, Vazia, Cheia, ElementoNaFrente:T(n) = O (1).
18
![Page 19: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/19.jpg)
Listas ligadas (ou encadeadas)
• Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo. Pode-se definir um vetor ou um registro de um certo tamanho fixo como estrutura de dados para o algoritmo. Mas o tamanho fixo pode não
19
estrutura de dados para o algoritmo. Mas o tamanho fixo pode não ser suficiente ou pode ser demasiado. Nestes casos, estruturas de dados que podem modificar o seu tamanho dinamicamente podem ser desejáveis. A lista ligada é uma delas.
![Page 20: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/20.jpg)
Listas ligadas simples
• Listas ligadas são estruturas de dados formadas por nós contendo no mínimo um campo, onde a informação é armazenada, e um campo ponteiro. Em uma lista ligada simples, o campo ponteiro contém o endereço do próximo nó na lista.
20
info prox
2
Contém o endereço de memória do próximo nó
registro nó
info: inteiro;prox: ponteiro;
.
![Page 21: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/21.jpg)
Uma lista ligada simples
• Um ponteiro especial contém o endereço do primeiro nó da lista.
21
Ponteiro para nil (ou null): indica o fim.
![Page 22: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/22.jpg)
Um possível “ciclo de vida”
primeiroInicialmente vazia
primeiro
Remover do fim
22
3
3 5
primeiro
Inserir no início
Inserir no início
Remover do fim
![Page 23: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/23.jpg)
Busca
Algoritmo Busca (primeiro, x)Entrada: primeiro, um ponteiro para uma lista ligada simples e x, um valor.Saída: um ponteiro para o nó de valor igual a x, ou nil, caso tal nó não exista.
p := primeiro;enquanto( p ≠ nil ep.info ≠ x)
23
enquanto( p ≠ nil ep.info ≠ x)p := p.prox;
retornar p
ComplexidadeT(n) = O (n).
![Page 24: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/24.jpg)
Inserir no início
Algoritmo InserirInício (primeiro, x)Entrada: primeiro, um ponteiro para uma lista ligada simples e x, um
elemento a inserir.Saída: a lista com o elemento x inserido no início.
Novo (p); // Cria um novo nó e faz o ponteiro p apontar para ele.1
24
Novo (p); // Cria um novo nó e faz o ponteiro p apontar para ele.p.info := x;p.prox := primeiro;primeiro := p
ComplexidadeT(n) = O (1).
Obs.: observe que o algoritmo funciona também no caso da lista estar inicialmente vazia.
1
2
3
4
![Page 25: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/25.jpg)
Remover do fim
Algoritmo RemoverFim (primeiro)Entrada: primeiro, um ponteiro para uma lista ligada simples.Saída: se a lista não está vazia, remove o último elemento e retorna o seu
valor.
se(primeiro= nil) // A lista está vazia.Mensagem (‘Não é possível remover’)
senão
25
senão // A lista tem, pelo menos, um elemento.
p := primeiro; q := p.prox; // q “passeará” na frente de p.
se(q = nil) // A lista tem apenas um elemento.
x := p.info;Devolver (p); // Devolve a região de memória apontada por p.primeiro := nil;
1
2
3
4
![Page 26: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/26.jpg)
senão // A lista tem, pelo menos, dois elementos.
enquanto (q.prox≠ nil)
p := q; q := q.prox
5
6
26
// Ao final deste laço p e q apontam, respectivamente, para o penúltimo e último// elemento da lista.
x := q.info;p.prox := nil;Devolver (q); // Devolve a região de memória apontada por q.
retornar x
7
8
9
![Page 27: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/27.jpg)
Complexidade
• A complexidade deste algoritmo é proporcional à quantidade de vezes em que o laço “enquanto(q.prox ≠ nil) ...” será executado. Logo,
T(n) = O (n).
27
T(n) = O (n).
![Page 28: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/28.jpg)
Lista duplamente ligada
5
ant seg
info
28
2 5 4-3
esquerda direita
![Page 29: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/29.jpg)
Lista circular simples
5 23 6
entrada
29
5 23 6
![Page 30: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/30.jpg)
Árvores
Árvores são estruturas de dados que suportam bem muitas operações dinâmicas tais como: busca, inserção, remoção, cálculo do máximo, cálculo do mínimo, cálculo
30
remoção, cálculo do máximo, cálculo do mínimo, cálculo do predecessor, cálculo do sucessor etc..
![Page 31: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/31.jpg)
Árvore enraizada
31
raiz
![Page 32: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/32.jpg)
Definições
32
• O nó no topo da árvore é chamado de raiz. A raiz está conectada a outros nós, os quais estão no nível 1 da hierarquia. Estes nós por sua vez estão conectados a nós no nível 2 e assim por diante. Todas as conexões são entre um nó e o seu único pai. A raiz não tem nenhum pai. pai.
• A principal propriedade de uma árvore é que ela não tem ciclo. Como consequência, existe apenas uma única rota (caminho) ligando quaisquer dois nós na árvore.
• Um nó conectado ao seu superior é dito ser filho deste nó.
![Page 33: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/33.jpg)
Definições
33
• O maior número de filhos entre todos os nós da árvore é denominado grau da árvore.
• Um nó sem nenhum filho é chamado de folha.
• A altura de uma árvore é o nível máximo da árvore. Em outras palavras, é a distância máxima entre a raiz e as folhas. Por definição a raiz está no nível 0.
![Page 34: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/34.jpg)
Árvore binária
34
• Árvore cujo grau é 2, isto é, cada nó pode ter no máximo 2 filhos.
• Tendo um nó no máximo dois filhos eles serão chamados de filho esquerdo e filho direito conforme a sua posição em relação a um observador que olha para a hierarquia.
![Page 35: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/35.jpg)
Representações
• Por meio de ponteiros;
• Por meio de um vetor;
35
• Por meio de uma matriz de adjacências;
• Por meio de uma lista de adjacências;
• Outras
![Page 36: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/36.jpg)
Por meio de ponteiros
36
5
esq dirregistro nó
info: inteiro; 5
info
info: inteiro;esq, prox: ponteiro;
.
![Page 37: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/37.jpg)
37
Por meio de ponteiros
5
raiz
3
2 5
7
8
![Page 38: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/38.jpg)
38
Por meio de um vetor
1 2 3 4 5 6 7
5 3 7 2 5 8
(1) a a raiz é o elemento A [1].(2) Os filhos esquerdo e direito do elemento A [i] são, respectivamente, A [2i] e A [2i + 1].
![Page 39: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/39.jpg)
39
• Vantagem: economiza espaço por não usar ponteiros.
Vantagem e desvantagem da representação por meio de um vetor
• Desvantagem: se a árvore é desbalanceada então muitos nós não existentes são representados. A ilustração abaixo mostra que é necessário um vetor de tamanho igual a 30 para armazenar os 8 nós da árvore representada, gerando desperdício.igual a 30 para armazenar os 8 nós da árvore representada, gerando desperdício.
Fonte: MANBER, U. Introduction to Algorithms: A Creative Approach. Boston: Addison Wesley, 1989.
![Page 40: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/40.jpg)
Árvore binária de busca
• Uma árvore binária de busca implementa eficientemente as seguintes operações:- busca (x): procura o elemento de valor igual a x na estrutura de dados ou
determina que x não está presente;- inserção (x): insere o elemento x na estrutura de dados.- remoção (x): remove o elemento de valor igual a x da estrutura de dados.
40
• Estruturas de dados que implementam eficientemente estas operações são referenciadas na literatura como sendo dicionários.
![Page 41: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/41.jpg)
Seja A uma árvore binária cuja raiz é r.Sejam Ae e Ad as subárvores esquerda e direita de A.
Nós dizemos que A é uma árvore binária de busca se ela satisfizer as seguintes propriedades:
- x < r < y para todo elemento x pertencente a Aee para todo elemento y pertencente a Ad;
- A e A são também árvores binárias de busca.
Propriedade
41
d- Ae e Ad são também árvores binárias de busca.
Fonte: CORMEN, T.; LEISERSON, C.; RIVEST, R.; STEIN, C. Introduction to Algorithms. New York: MIT Press, 2004.
![Page 42: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/42.jpg)
Percursos
• Inorder• Preorder• Posorder• Por níveis (ou em largura)
42
• Por níveis (ou em largura)• Outros
![Page 43: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/43.jpg)
Inorder
1. Visita a sub-árvore esquerdaVisita a raizVisita a sub-árvore direita
43
Ordem do percurso: 2, 3, 4, 6, 7, 9, 13, 15, 17, 18, 20
Fonte: CORMEN, T.; LEISERSON, C.; RIVEST, R.; STEIN, C. Introduction to Algorithms. New York: MIT Press, 2004.
![Page 44: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/44.jpg)
Preorder
1. Visita a raizVisita a sub-árvore esquerdaVisita a sub-árvore direita
44
Ordem do percurso: 15, 6, 3, 2, 4, 7, 13, 9, 18, 17, 20
![Page 45: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/45.jpg)
Posorder
1. Visita a sub-árvore esquerdaVisita a sub-árvore direitaVisita a raiz
45
Ordem do percurso: 2, 4, 3, 9, 13, 7, 6, 17, 20, 18, 15
![Page 46: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/46.jpg)
Por níveis (em largura)
46
Ordem do percurso: 15, 6, 18, 3, 7, 17, 20, 2, 4, 13, 9
![Page 47: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/47.jpg)
Algoritmos e complexidades
47
![Page 48: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/48.jpg)
Teorema
A altura h de uma árvore binária com n ≥ 1 vértices variasegundo a relação abaixo:
Ω (log n) ≤ h ≤ O (n)
48
Mínima: ocorre para a árvore binária é cheia.
Máxima: ocorre quando a árvore binária está estritamente desbalanceada, por exemplo, para a direita.
![Page 49: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/49.jpg)
Árvore binária cheia
Nível Qde nós
0 1
1 2
2 22
49
...
3 23
h 2h
n = 1 + 2 + 22 + 23 + ... + 2h = 2h+1 - 1h = log (n + 1) - 1 = Ω ( log n )
... ...
![Page 50: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/50.jpg)
Árvore estritamente desbalanceada à direita
Nível Qde nós
0 1
1 1
50
...
h 1
... ...
1 1
n = (h – 0 + 1) . 1 = h + 1h = n - 1= O ( n )
![Page 51: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/51.jpg)
Busca
51
Para achar o elemento 13 na árvore deve-se seguir a rota 15 -> 6 -> 7 -> 13.
![Page 52: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/52.jpg)
Algoritmo e complexidade
52
![Page 53: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/53.jpg)
InserçãoInserir o elemento 13.
53
Fonte: CORMEN, T.; LEISERSON, C.; RIVEST, R.; STEIN, C. Introduction to Algorithms. New York: MIT Press, 2004.
![Page 54: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/54.jpg)
Algoritmo e complexidade
54
![Page 55: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/55.jpg)
Remoção
Caso 1: elemento a ser removido não tem filhos.
55
Fonte: CORMEN, T.; LEISERSON, C.; RIVEST, R.; STEIN, C. Introduction to Algorithms. New York: MIT Press, 2004.
![Page 56: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/56.jpg)
Remoção
Caso 2: elemento a ser removido tem um filho.
56
Fonte: CORMEN, T.; LEISERSON, C.; RIVEST, R.; STEIN, C. Introduction to Algorithms. New York: MIT Press, 2004.
![Page 57: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/57.jpg)
RemoçãoCaso 3: elemento a ser removido tem dois filhos.
Desengatar o sucessor de z, o qual tem no máximo um filho (digamos, y), e substituír o conteúdo de zpelo conteúdo de y.
57
Observações:1) Em vez do sucessor, poderiamos também eleger o predecessor;2) O sucessor de z tem no máximo um filho (veja exercício na lista).
Fonte: CORMEN, T.; LEISERSON, C.; RIVEST, R.; STEIN, C. Introduction to Algorithms. New York: MIT Press, 2004.
![Page 58: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/58.jpg)
Complexidade
58
![Page 59: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/59.jpg)
Outros resultados
• Se elementos são inseridos em uma árvore binária de busca segundo uma ordem aleatória, então a altura esperada da árvore é O (log n).
• O desbalanceamento da árvore pode ser amenizado se, em vez de escolher sempre o nó sucessor para ser removido, nós alternarmos entre o predecessor e o
59
n
• Remoções podem aumentar a altura da árvore. Se existirem freqüentesremoções seguidas por inserções, a altura da árvore é O ( ), mesmo para inserções e remoções aleatórias.
sempre o nó sucessor para ser removido, nós alternarmos entre o predecessor e o sucessor.
![Page 60: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/60.jpg)
Árvores balanceadas
• 2-3• AVL• Graduadas• Rubro-negras
60
• Rubro-negras• B• Outras
Obs.: Estas árvores oferecem uma solução ao problema de degradação, motivada por possíveis desbalanceamentos, da complexidade de algoritmos que operam sobre árvores binárias de busca.
![Page 61: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/61.jpg)
Árvore 2-3
• Uma árvore 2-3 é uma árvore com as seguintes propriedades:
- toda folha está na mesma altura;
- todo nó que não é uma folha (nó interno) possui 2 ou 3 filhos;
- todo nó interno possui dois valores ve v ;
61
- todo nó interno possui dois valores v1 e v2;. v1 é o maior valor encontrado na subárvore esquerda do nó; . v2 é o maior valor encontrado na subárvore intermediária do nó.
![Page 62: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/62.jpg)
Árvore 2-3Nós internos: usados como índice
62
Fonte: AHO, A. V.; HOPCROFT, J. E.; ULLMAN, J. D. Data Structures and Algorithms. Reading: Addison-Wesley, 1982.
Folhas: contêm informação
![Page 63: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/63.jpg)
Busca
T(n) = O (log n)
63
![Page 64: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/64.jpg)
Inserção
Caso 1: inserção sob um pai com dois filhos.
Por exemplo, inserir o elemento 2.
64
![Page 65: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/65.jpg)
InserçãoCaso 2: inserção sob um pai com três filhos.
Por exemplo, inserir o elemento 4.
65
![Page 66: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/66.jpg)
ComplexidadeBuscar
posição a inserir
T(n) = O (log n)
Recompor os nós internos
T(n) = O (log n)
66
T(n) = O (log n) + O (log n) = O (2 log n) = O (log n)
![Page 67: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/67.jpg)
RemoçãoCaso 1: remoção sob um pai com três filhos: trivial.
Caso 2: remoção sob um pai com dois filhos
Por exemplo, remover o elemento 4.
67
![Page 68: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/68.jpg)
ComplexidadeBuscar
elemento a remover
T(n) = O (log n)
T(n) = O (log n)
68
Recompor os nós internos
T(n) = O (log n) + O (log n) = O (2 log n) = O (log n)
![Page 69: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/69.jpg)
• Nós índice: servem de referências para a informação;
Qual é a relação entre a quantidade de
• Nós folha: informação propriamente.
Memória consumida
69
memória gasta por nós índice e a quantidade de memória gasta com nós folha?
![Page 70: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/70.jpg)
Heap
Seja A uma árvore binária cuja raiz é r.Sejam Ae e Ad as subárvores esquerda e direita de A, respectivamente.
Nós dizemos que A é um heap se ele satisfizer às seguintes propriedades:- r > x para todo elemento x pertencente a Ae e a Ad;- Ae e Ad são também heaps.
70
- Ae e Ad são também heaps.
![Page 71: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/71.jpg)
Filas de prioridade
Um heap é uma estrutura de dados útil para implementar filas de prioridade.
Filas de prioridade requerem eficiência na execução das seguintes operações: - Inserção (x): insere um elemento x na estrutura de dados;- Remoção (x): remove o maior elemento da estrutura de dados.
71
- Remoção (x): remove o maior elemento da estrutura de dados.
![Page 72: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/72.jpg)
Inserção
Seja, por exemplo, inserir o número 15
16
14
8 7
10
9 3
72
7
2 4 1
9 3
16 14 10 8 7 9 3 2 4 1
1 2 3 4 5 6 7 8 9 10 = n
16 14 10 8 7 9 3 2 4 1 15
1 2 3 4 5 6 7 8 9 10 11
16
14
8 7
2 4 1
10
9 3
15
![Page 73: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/73.jpg)
16
14
8
72 4 1
10
9 315
Inserção
73
16 14 10 8 15 9 3 2 4 1 7
1 2 3 4 5 6 7 8 9 10 11
16 15 10 8 14 9 3 2 4 1 7
1 2 3 4 5 6 7 8 9 10 11
16
148
72 4 1
10
9 3
15
![Page 74: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/74.jpg)
InserçãoAlgoritmo InserirHeap (A, n, x)Entrada: A, um heap de n ≥ 1 elementos representado como um vetor e x, um
elemento a inserir.Saída: o heap com o elemento x inserido.
n := n + 1; A[n] := x;
// Restabelece a propriedade de heap para toda árvore.
74
// Restabelece a propriedade de heap para toda árvore.filho := n; pai := filho / 2 ;enquanto ( pai ≥ 1 e A[filho] > A[pai] )
troca := A [pai]; A[pai] := A[filho]; A[filho] := troca;filho := pai; pai := filho / 2
![Page 75: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/75.jpg)
Complexidade
A variável “pai” controla o laço e assume valores segundo a P.G. n, n/2, n/4, ..., 2, 1.
A quantidade k de valores assumidos pela variável é igual a quantidade de
A complexidade deste algoritmo pe proporcional à quantidade de vezes que o laço “enquanto” é executado.
75
A quantidade k de valores assumidos pela variável é igual a quantidade de vezes em que o laço será executado no pior caso.
ak = a1 . r k-1
1 = n . (1/2) k-1
2 k -1 = nk – 1 = lognk = log (n) + 1. O laço é executado, no pior caso, log (n) + 1 vezes.
T(n) = O (log n).
![Page 76: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/76.jpg)
Remoção
16
14
8 7
2 4 1
10
9 3
76
16 14 10 8 7 9 3 2 4 1
1 2 3 4 5 6 7 8 9 10 = n
1 14 10 8 7 9 3 2 4
1 2 3 4 5 6 7 8 9
14
8 7
2 4
10
9 3
1
![Page 77: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/77.jpg)
Remoção
14
8 7
2 4
10
9 3
1
14
77
14 1 10 8 7 9 3 2 4
1 2 3 4 5 6 7 8 9
14 8 10 1 7 9 3 2 4
1 2 3 4 5 6 7 8 9
14
8
7
2 4
10
9 31
![Page 78: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/78.jpg)
Remoção
14
8 10
78
7
2
4 9 3
14 8 10 4 7 9 3 2 1
1 2 3 4 5 6 7 8 9
1
![Page 79: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/79.jpg)
Remoção
Escrita do algoritmo será deixada como exercício.
Complexidade: No pior caso serão realizadas tantas trocas quanto a altura (h) da árvore. Cada troca envolve duas comparações.
79
da árvore. Cada troca envolve duas comparações.
h = O (log n) para árvores binárias balanceadas.
T(n) = 2 h = 2 O (log n) = O (log n).
![Page 80: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/80.jpg)
Tabelas de dispersão (ou espalhamento)(Hash tables)
80
Motivação: tabelas de acesso direto
n números inteiros (não repetidos) no intervalo de 1 a m, onde m é pequeno (é possível alocar memória de tamanho igual a m)
U
x x x x
1 2 3 4 5 6 7 m
...
2
U (conjunto universo com números situados de 1 até m)
4
5
7
Conjunto de n números atualmente na tabela
![Page 81: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/81.jpg)
Um problema
E se n >>>> m?
Exemplo: 100 milhões de CPFs para serem inseridos em
81
Exemplo: 100 milhões de CPFs para serem inseridos em uma tabela indexada de 0 a 999 elementos.
![Page 82: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/82.jpg)
Formalizando
1
2
2
U (conjunto universo com M números)
4
5
70
2
Função de dispersão
3, 5, 6
Possíveis colisões
82
3
4
5
m
...
n números em um certo instante na tabela
Função de dispersão4, 10, 15, 18
14, 23
![Page 83: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/83.jpg)
Necessidades
• Função de dispersão que mapeia uniformemente;
• Estratégias para resolver as colisões.
83
![Page 84: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/84.jpg)
Funções de dispersão
• h (x) = x modm (para m primo);
• Se m não puder ser ajustado para um número primo:
h (x) = (x modp) modm (para algum p primo, p > m);
84
h (x) = (x modp) modm (para algum p primo, p > m);
• Outras existem.
![Page 85: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/85.jpg)
Resolvendo as colisões
• Por encadeamento exterior;
• Busca linear na tabela;
85
• Outras estratégias existem.
![Page 86: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/86.jpg)
Encadeamento exterior
0 7
16
0
1
2
Sejamh (x) = x mod 7
E o conjunto de elementos:27, 25, 16, 0, 17, 5, 7, 3,
86
162
3
4
5
6
17 3
25 32
27 48
5
27, 25, 16, 0, 17, 5, 7, 3, 48, 32
![Page 87: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/87.jpg)
Busca
Algoritmo Busca (T, x)Entrada: T, uma tabela de dispersão e x um valor.Saída: um ponteiro para o elemento da tabela T cujo valor é igual a x ou
nil, caso tal elemento não exista.
i := x modm; // m é tamanho da tabela, indexada de 0 a m – 1.
87
i := x modm; // m é tamanho da tabela, indexada de 0 a m – 1.
retornar Busca ( T[i], x) // Busca x na lista apontada por T[i].
![Page 88: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/88.jpg)
Complexidade
Supondo que a função mapeia uniformemente, então cada lista terá n/melementos.
A complexidade do algoritmo é proporcional à busca em uma das listas.
Logo,
88
Logo,
T(n, m) = O (n/m).
Se for possível controlar o valor de m para que n ≤ c m, para c constante, então T(n) = O (1).
![Page 89: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/89.jpg)
Inserção e remoção
• Algoritmos similares.
• ComplexidadeA mesma da busca.
89
A mesma da busca.
![Page 90: Estruturas de Dados - FACCAMP · Listas ligadas (ou encadeadas) • Existem muitas aplicações na qual o número de elementos envolvidos pode variar durante a execução do algoritmo](https://reader030.vdocuments.pub/reader030/viewer/2022040310/5f33b6df4d98075e27117b25/html5/thumbnails/90.jpg)
Controlando o fator de carga(tabelas de dimensão dinâmica)
• Fator de carga f = n / m.
• Seja f = 4 (listas terão tamanho máximo esperado de 4 elementos)
1 - Inserir elementos na tabela.
90
1 - Inserir elementos na tabela.
2 - Quando f = 4, dobrar o tamanho da tabela.
3 – Voltar ao passo 1.