• Nenhum resultado encontrado

Árvores. Conceitos sobre Árvores

N/A
N/A
Protected

Academic year: 2021

Share "Árvores. Conceitos sobre Árvores"

Copied!
22
0
0

Texto

(1)

Árvores

Notas de aula da disciplina IME 04-10820

ESTRUTURAS DE DADOS I

Paulo Eustáquio Duarte Pinto

(pauloedp arroba ime.uerj.br)

junho/2018

Conceitos sobre Árvores

Servem para representar estruturas hierarquiza-das, notadamente Bancos de Dados.

Def:

Uma árvore enraizadaTé um conjunto finito de vértices (nós) tais que:

-Té um conjunto vazio, ou

-existe um nó r (raiz) tal que os demais nós são particionados em m > 1 conjuntos não vazios, as subárvores de r e sendo cada um desses conjuntos uma árvore.

Árvores

Representações de Árvores

a) Diagramas de Inclusão:

A B C D E

b) Representação Hierárquica:

A D E B C Árvores

Representações de Árvores

c) Diagramas de Barras:

d) Parênteses Aninhados:

( A ( C ( D ) ) ( B ) ( E ) ) A--- D--- B--- C--- E---Árvores

Conceitos

A é pai de C, B, E; C é pai de D; A é avô de D; A

D

E B

C

B é filho de A; D é filho de C; B é tio deD;

B é irmão de C; D é sobrinho de E;

D, B e E são folhas; A e C são nós intermediários; Árvores

Conceitos

A D E B C

A está no nível 1; D, no nível 3;

O caminho entre A e D tem comprimento 2; entre

D e E, comprimento 3;

A altura da árvore é 3;

Uma Florestaé um conjunto de árvores; Árvores

(2)

Árvores Binárias

Def:

Uma árvore binária enraizadaT é um conjunto finito de vértices (nós) tais que: -Té um conjunto vazio, ou

-existe um nó r (raiz) tal que os demais nós são particionados em 2 conjuntos, as

subár-vores esquerda (Te) e direita (Td) de r, sendo

cada uma delas uma árvore binária. A D E B C F Exemplo: Árvores binárias

Conceitos de Árvores Binárias

Em uma árvore estritamente binária cada nó tem0 ou 2 filhos.

Em uma árvore binária completa as subárvores nulas estão todas nos dois últimos níveis da árvore; Em uma árvore binária cheia as subárvores (ares-tas, links) nulasestão todas no último nível;

+ A -B * C / E D Árvores binárias

Exercícios

Desenhar todas as árvores binárias distintas para as chaves A B e C.

Desenhar uma árvore estritamente bináriacom 11

nós e altura 5.

Árvores binárias

EXS10:

Exercícios

Quantos nós tem uma árvore binária cheia de

altura h?

Qual o número mínimo de nós em uma árvore binária completa de altura h?

+ A -B * C / E D

Quantas formas de árvores binárias completas distintas existem contendon nós?

Árvores binárias

Conceitos

O número de subárvores nulas (links nulos) em uma árvore binária com nnós é n+1.

A árvore binária que representa uma expressão aritmética é uma árvore estritamente binária com os operandos nas folhas e operadores em nós intermediários.

+ A -B * C / E D

Existe umúnico caminhoentre dois nós de uma árvore.

Árvores binárias

Conceitos

Altura h de uma árvore árvore binária completa com n nós: 2h - 1n  2h - 1  h = log2n + 1 = = log2(n+1) + A -B * C / E D

Altura de uma árvore bináriacom n nós:

log2n + 1  h  n Árvores binárias

(3)

Representação

Representação computacional:

C/C++

typedef struct No* Arv; struct No {char chave;

Arv le, ld;} Arv p, q; + A -B * C / E D chave le ld Árvores binárias Tupy tipo Arv: caracter chave Arv le, ld; Arv p, q;

Percursos

Percursosem árvores binárias são formas sistemáticasde percorrer (visitar) os nós da árvore.

-Percurso em nível

-Percurso em pré-ordem

-Percurso in-ordem (ordem simétrica)

-Percurso em pós-ordem ... + A -B * C / E D Árvores binárias

Percursos

Percurso em nível:

a idéia é visitar um nível a cada vez, de cima para baixo e da esquerda para a direita

+ A -B * C / E D

+ * - A B C / D E

Árvores

Percurso em nível

Percurso_nivel(T): Esvazia (Q); Enfila (T); enquanto (f  0): p  Q[f] Visita (p) Enfila (p.le) Enfila (p.ld) p  Desenfila() + A -B * C / E D Árvores

Percurso em nível

Percurso_nivel(T): #Dados: Árvore binária T

Esvazia (Q); Enfila (T); enquanto (f  0): p  Q[f] Visita (p) Enfila (p.le) Enfila (p.ld) p  Desenfila () + A -B * C / E D

+

A

+ *

-*

A B

-A B C / C B /

B

C /

C

D / E

/

D

E

E

Árvores binárias - A B * C / D E

Exercício

Exercício: mostrar a situação da fila na Busca em nível da árvore acima.

+ A -B * C / E D Árvores binárias

(4)

Construção de árvore cheia de altura h

Constroi(h): #Dados: inteiro h

Esvazia(Q); Alocar(T); Enfila(T); n  2h-1- 1 T.c  1; T.le  nulo; T.ld  nulo; i  1; enquanto (f  0):

p  Q[f]

q  Arv(); q.c  i+1; q.le  nulo; q.ld  nulo; s  Arv(); s.c  i+2; s.le  nulo; s.ld  nulo; p.le  q; p.ld  s; i  i+2; se (i ≤ n): Enfila (q) Enfila (s) p  Desenfila () 1 4 3 5 2 6 7 Árvores binárias

Exercício

Exercício: modificar o algoritmo de criação de ár-vore binária cheia, para a criação de uma árvore binária completa, para dado n.

1 3 2 6 7 4 8 5 9 10 Árvores binárias

Percursos

Percurso em pré-ordem:

a idéia é visitar, sistematicamente, a raiz, em seguida toda a subárvore esquerda e depois toda a subárvore direita (RED).

+ A -B * C / E D

+

* A B

- C / D E

Árvores binárias

Percurso em pré-ordem

Pré-Ordem(T); #Dados: Árvore binária T

Esvazia(P); PUSH (T); enquanto (topo  0): p  POP () Visita (p) PUSH (p.ld) PUSH (p.le) + A -B * C / E D

*

B

A

Árvores binárias

*

+

+

-

- A

-

B

Percurso em pré-ordem

+ A -B * C / E D Árvores binárias Pré-Ordem(T); #Dados: Árvore binária T

Esvazia(P); PUSH (T); enquanto (topo  0): p  POP () Visita (p) PUSH (p.ld) PUSH (p.le)

B

- -

/

C

B

-

C

/

+ * A

Percurso em pré-ordem

+ A -B * C / E D

+

*

A

B

- C

Árvores binárias Pré-Ordem(T); #Dados: Árvore binária T

Esvazia(P); PUSH (T); enquanto (topo  0): p  POP () Visita (p) PUSH (p.ld) PUSH (p.le)

/ E D

E

/

D

E

(5)

Percursos

+ A -B * C / E D

+

*

A

B

- C

/

D

E

Árvores binárias Pré-Ordem(T); #Dados: Árvore binária T

Esvazia(P); PUSH (T); enquanto (topo  0): p  POP () Visita (p) PUSH (p.ld) PUSH (p.le)

Exercício

Exercício: mostrar a situação da pilha na Busca em pré-ordem da árvore acima.

+ A -B * C / E D Árvores binárias

Percursos

Percurso em ordem simétrica (in-ordem): a idéia é visitar, sistematicamente, toda a subárvore esquerda, a raiz, e em seguida toda a subárvore direita (ERD).

+ A -B * C / E D

A * B

+ C - D / E

Árvores binárias

Percursos em ordem simétrica

In-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  nulo) ou (topo  0)): enquanto (p  nulo): PUSH (p) p  p.le p  POP (); Visita (p); p  p.ld; + A -B * C / E D

A

*

+

A

Árvores binárias

Percurso em ordem simétrica

+ A -B * C / E D

A

* B

B

+

Árvores binárias In-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p) p  p.le

p  POP (); Visita (p); p  p.ld;

Percurso em ordem simétrica

+ A -B * C / E D

A

* B + C

C

-Árvores binárias In-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p) p  p.le

(6)

Percurso em ordem simétrica

+ A -B * C / E D

A

* B + C - D

D

/

Árvores binárias In-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p) p  p.le

p  POP (); Visita (p); p  p.ld;

Percurso em ordem simétrica

+ A -B * C / E D

A

* B + C - D E

/

E

Árvores binárias In-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p) p  p.le

p  POP (); Visita (p); p  p.ld;

Exercício

Exercício: mostrar a situação da pilha na Busca in-ordem da árvore acima.

E A F C B D I G H Árvores binárias

Percursos

Percurso em pós-ordem:

a idéia é visitar, sistematicamente, toda a subárvore esquerda, em seguida toda a subárvore direita e, por fim, a raiz (EDR).

A B *

C D E / - +

+ A -B * C / E D Árvores binárias

Percurso em pós-ordem

Pos-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  Nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p, 1); p  p.le; enquanto ((p = nulo) e (topo  0)):

(p, vez)  POP(); se ((vez = 1) e (p.ld  nulo)): PUSH(p, 2); p  p.ld; senão: Visita (p); p  nulo;

A

*,1

+,1

A,1

+ A -B * C / E D Árvores binárias

Percurso em pós-ordem

A

*,2

+,1

B,1

*,1

B

+ A -B * C / E D Árvores binárias Pos-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  Nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p, 1); p  p.le; enquanto ((p = nulo) e (topo  0)):

(p, vez)  POP(); se ((vez = 1) e (p.ld  nulo)):

PUSH(p, 2); p  p.ld; senão:

(7)

Percurso em pós-ordem

A

B

*

+,1

+ A -B * C / E D Árvores binárias Pos-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  Nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p, 1); p  p.le; enquanto ((p = nulo) e (topo  0)):

(p, vez)  POP(); se ((vez = 1) e (p.ld  nulo)): PUSH(p, 2); p  p.ld; senão: Visita (p); p  nulo;

Percurso em pós-ordem

A

B +,1

*

+,2

-,1

C,1

C

+ A -B * C / E D Árvores binárias Pos-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  Nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p, 1); p  p.le; enquanto ((p = nulo) e (topo  0)):

(p, vez)  POP(); se ((vez = 1) e (p.ld  nulo)): PUSH(p, 2); p  p.ld; senão: Visita (p); p  nulo;

Percurso em pós-ordem

A

B

*

+,2

-,2

/,1

C -,1

D,1

D

+ A -B * C / E D Árvores binárias Pos-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  Nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p, 1); p  p.le; enquanto ((p = nulo) e (topo  0)):

(p, vez)  POP(); se ((vez = 1) e (p.ld  nulo)): PUSH(p, 2); p  p.ld; senão: Visita (p); p  nulo;

Percurso em pós-ordem

A

B

*

+,2

-,2

/,2

C

E,1

D /,1

E

+ A -B * C / E D Árvores binárias Pos-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  Nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p, 1); p  p.le; enquanto ((p = nulo) e (topo  0)):

(p, vez)  POP(); se ((vez = 1) e (p.ld  nulo)): PUSH(p, 2); p  p.ld; senão: Visita (p); p  nulo;

Percurso em pós-ordem

+ A -B * C / E D

A

B C D E / - +

*

Árvores binárias Pos-Ordem(T); #Dados: Árvore binária T

Esvazia(S); p  T;

enquanto ((p  Nulo) ou (topo  0)): enquanto (p  nulo):

PUSH (p, 1); p  p.le; enquanto ((p = nulo) e (topo  0)):

(p, vez)  POP(); se ((vez = 1) e (p.ld  nulo)): PUSH(p, 2); p  p.ld; senão: Visita (p); p  nulo;

Exercício

Exercício: mostrar a situação da pilha na Busca em pós-ordem da árvore acima.

+ A -B * C / E D Árvores binárias

(8)

Recursão

É uma técnica de solução de problemas

(

construção de algoritmos

) que procura a

solução

subdividindo

o problema em

sub-problema(s)

menor(es), de

mesma

nature-za

, e

compõe

a solução desses

subproble-mas, obtendo uma solução do problema

ori-ginal.

DIVIDIR PARA CONQUISTAR!!!

Árvores binárias

Recursão

Fatorial(p): se (p = 0): retornar 1 senão: retornar p*Fatorial(p-1) Fib(p): se (p  1 ): retornar p senão: retornar Fib(p-1)+Fib(p-2) Árvores binárias

Recursão

Visões sobre Recursão:

a) Solução de problemas de trás para frente

enfatiza-se os passos finais da solução, após ter-se resolvido

problemas menores. Mas a solução de problemas pequenos (“problemas infantís”) tem que ser mostrada.

b) Analogia com a “Indução finita”

Indução Finita: prova-se resultados matemáticos gerais supondo-os válidos para valores inferiores a ne demonstrando que o resultado vale também para n. Além disso, mostra-se que o resultado é correto para

casos particulares.

Árvores binárias

Recursão

Visões sobre Recursão:

c) Equivalente procedural de Recorrências

Recorrências são maneiras de formular funções para n, utilizando resultados da mesma função para valores menores que n. Além disso uma recorrência deve exibir resultados específicos para determinados valores.

d) Estrutura de um procedimento recursivo

Procedimentos recursivos “chamam a sí mesmos”.Um procedcimento recursivo começa com um “Se”,para separar subproblemas ‘infantís”

dos demais. O procedimento chama a si mesmo pelo menos uma vez. Sempre há uma chamada externa.

Árvores binárias

Recursão

Dinâmica da execução de um procedimento

recursivo.

Sempre que uma chamada recursiva é executada,o sistema operacional empilha asvariáveis locais e ainstrução em execução, desempilhando esses elementos noretorno da chamada.

Chamadas recursivas podem ser expressas através de uma árvore de recursão.

Árvores binárias

Recursão

Árvore de recursão para Fatorial

Fatorial(p): se (p = 0): retornar 1 senão: retornar p*Fatorial(p-1)

5

4

3

2

1

0

1 1.1=1 1.2=2 2.3=6 6.4=24 24.5=120 X  Fatorial(5) Árvores binárias

(9)

Recursão

Fatorialrec(p): se (p = 0): retornar 1 senão retornar p*Fatorial(p-1) Fatorialpil(p): Esvaziar(S); i  p; enquanto (i > 0): PUSH(i); i  i-1; f  1 enquanto (topo > 0): f  f*POP() retornar f Árvores binárias

O algoritmo com uso de uma pilha dá uma idéia mais exata do que ocorre durante a execução do algoritmo recursivo.

Recursão

Fatorialpil(p): Esvaziar(S); i  p; enquanto (i > 0): PUSH(i); i  i-1; f  1 enquanto (topo > 0): f  f*POP() retornar f Árvores binárias

O algoritmo com uso de uma pilha dá uma idéia mais exata do que ocorre durante a execução do algoritmo recursivo. 5 45 3 4 5 2 3 4 5 1 2 3 4 5 45 5 3 4 5 2 3 4 5 f=1 f=1 f=2 f=6 f=12 f=60

Exercício

Impressão de lista Encadeada

Exercício:

Escrever um algoritmo recursivo para imprimir uma lista encadeada em ordem reversa.

Árvores binárias

Recursão

MergeSort em Vetores:

V

a) Dividir o vetor ao meio e ordenar separadamente cada um dos subvetores.

b) Fazer Merge dos subvetores ordenados.

c) O problema infantil é um subvetor de tamanho igual ou inferior a 1 quando, para ordená-lo, nda deve ser feito.

Este é um importante método de ordenação, cuja idéia recursiva é a seguinte:

V1 V2 Merge Árvores binárias

Recursão

MergeSort (e, d): se (d > e): i  (e+d)/2 MergeSort(e, i) MergeSort(i+1, d) Merge(e, i, d)

O algoritmo de Merge a ser usado usa dois vetores auxiliares que recebem metade do vetor inicial. O Merge é colocado no vetor principal.

MergeSort em Vetores:

Árvores binárias

Recursão

MergeSort: exemplo

1 2 3 4 5 6 P R I O M G P R I P R P R I P R I P R O M G O M O M G M O G M O G I M O P R Árvores binárias

(10)

Recursão

MergeSort: exemplo da árvore de recursão

1 6 3 PRIOMG 2 2 - R 1 3 2 PRI 1 2 1 PR 3 3 - I 1 1 - - P GIMOPR PR IPR 5 5 - M 4 6 5 OMG 4 5 4 OM 6 6 - G 4 4 - - O MO GMO Árvores binárias

Exercício

MergeSort

Exercício:

Mostrar a árvore de recursão do Mergesort para o MIXSTRING (10 letras).

Árvores binárias

Análise do Mergesort:

Complexidade:

Pior caso = melhor caso = caso médio: O(n log n) Estabilidade (manutenção da ordem relativa de chaves iguais):

Algoritmo estável Memória adicional:

Vetor de tamanho n para merge intermediário Usos especiais:

Ordenação de listas encadeadas

Minimização de I/O para arquivos grandes. Árvores binárias

A maioria dos percursos em árvores binárias são intrinse-camente recursivos, pois cada percurso se constitui em visitar nós especiais e subárvores (problemas menores).

-Percurso em pré-ordem

-Percurso in-ordem (ordem simétrica)

-Percurso em pós-ordem

O problema infantil é visitar uma árvore nula(nada é feito). + A -B * C / E D

Percursos recursivos

Árvores binárias

Percursos recursivos

Percurso em pré-ordem (RED): -Visitar a raiz,

-Visitar a subárvore esquerda em pré-ordem -Visitar a subárvore direita em pré-ordem.

+ A -B * C / E D

+

* A B

- C / D E

Árvores binárias Pré-Ordem (p): se (p  nulo): Visita (p) Pré-Ordem (p.le) Pré_Ordem (p.ld) Externamente: Pré-Ordem(T) + A -B * C / E D + * A B -C / D E

+ *AB-C/DE

Percurso recursivo em pré-ordem

Árvores binárias

(11)

Percurso in-ordem (ERD):

-Visitar a subárvore esquerda in-ordem, -Visitar a raiz,

-Visitar a subárvore direita in-ordem. + A -B * C / E D

+

*

A

B

C

-

D

/

E

Percursos recursivos

Árvores binárias In-Ordem (p): se (p  nulo): In-Ordem (p.le) Visita (p) In-Ordem (.ld) Externamente: In-Ordem(T) + A -B * C / E D + * A B -C / D E

+

*

A B

C

-

D E

/

Percurso recursivo em ordem simétrica

Árvores binárias

Percurso em pós-ordem (EDR):

-Visitar a subárvore esquerda em pós-ordem, -Visitar a subárvore direita em pós-ordem, -Visitar a raiz. + A -B * C / E D

+

*

A

B

C

D E

/

-Percursos recursivos

Árvores binárias Pós-Ordem (p): se (p  nulo): Pós-Ordem (p.le) Pós-Ordem (p.ld) Visita (p) Externamente: Pós-Ordem(T) + A -B * C / E D + * A B -C / D E

+

*

AB

C

DE

/

-Percurso recursivo em pós-ordem

Árvores binárias

Exercício

Percursos recursivos

Exercício: Dada uma expressão aritmética

com operadores binários, representada em uma árvore binária, escrever a expressão equivalente totalmente parentisada. + A -B * C / E D Árvores binárias

Árvores Binárias de Busca

São árvores constuídas com a regra forçada de que, para cada nóda árvore, todas as chaves da

subárvore esquerda são menoresque a chave desse nó e todas as da subárvore direita, maiores.

20 2 80 16 15 51 101 213 99 Exemplo: Árvores binárias

(12)

Exercício

Exercício:

Desenhar todas as ABBs distintas para as chaves: A, B, C e D, com A na raiz. Árvores binárias CAN ARI ESC SAG AQU LIB VIR LEA GEM TOU PEI

Árvores Binárias de Busca

Inserções: sempre é possível inserir uma chave não existente, através de um processo simples, top-down.

CAP

Exemplo: Árvore dos Signos

CAP, AQU, PEI, ARI, TOU, GEM, CAN, LEA, VIR, LIB, ESC, SAG

Árvores binárias

Exercício

Desenhar ABBs para as chaves incluídas nas seguin-tes ordens:

a) AQU, ARI, CAN, CAP, ESC, VIR, TOU, SAG, GEM, PEI, LEA, LIB b) AQU, VIR, ARI, TOU, CAN, SAG, CAP, PEI, LIB, ESC, GEM, LEA

Árvores binárias

Árvores Binárias de Busca

Convenção de nó terminal: pode-se usar um nó pré-alocado, z, como nó final, em substituição às subárvores nulas. 20 2 80 16 15 51 101 213 99 T z Árvores binárias

Busca em uma ABB (com nó terminal).

Busca(k);

#Dados: Árvore binária T, valor k z.chave  k; p  T; enquanto (p.chave  k): se (k < p.chave): p  p.le senão: p  p.ld se (p = z): p  nulo retornar p Árvores binárias

Inserção uma ABB (com nó terminal).

Insere(k):

#Dados: Árvore binária T, valor k z.chave  k; p  T; f  T; enquanto (p.chave  k): f  p se (k < p.chave): p  p.le senão: p  p.ld se (p = z):

p  Arv(); p.chave  k; p.le  z; p.ld  z; se (T = z): T  p senão se (k < f.chave): f.le  p senão: f.ld  p Inicializa; Alocar (z); z.le  z; z.ld  z; T  z; Fim; Árvores binárias

(13)

Propriedade fundamental de uma ABB:

O percurso in-ordem obtem as chaves ordenadas.

20 2 80 16 15 51 101 213 99 Exemplo: In-ordem: 2 15 16 20 51 80 99 101 213

Essa propriedade conduz ao método de ordenação

TreeSort!!!

Árvores binárias

Exercício

Criar uma ABB para o MIXSTRING (sem repe-tições) e checar a propriedade fundamental de uma ABB.

Árvores binárias

Exercício:

colocar as chaves A,B,C,D,E,F,G,H,I,J,K,Lna estrutura abaixo, tal que tenhamos uma ABB.

Árvores binárias

Altura de uma ABB:

20 2 80 16 15 51 101 213 99

Altura mínima:árvore completa. h = log2n + 1 = = log2(n+1)

Altura máxima:árvore degenerada. h = n 2

15 101

213 Altura média (Knuth 73):h  1,4 log2 n

Árvores binárias

Enumeração de ABBs.

T(n) =número de ABBs distintas para n chaves

T(n) = Comb(2n, n)/(n+1).(Número de Catalão!!) T(0) =1; T(1) =1; T(2) =2; T(3) =5;

T(n) =Ti.T(n-1-i), 0  i < n;

Idéia da recorrência: fixar progressivamente cada uma das n chaves como raiz e somar os produtos do número de ABBs distintas à esquerda com i chaves, pelo número de ABBS distintas à direita com n-1-i chaves.

Árvores binárias

Exercício:

Calcular T(6) = número de distintas ABBs c/ 6 chaves:

a) usando a recorrência

b) usando o número de Catalão.

(14)

V P T R K H B D

Árvore de Decisão da Pesquisa Binária (ADPB)

A Pesquisa Binária pode ser melhor compreendida por uma ABB, que representa o processo de busca no vetor.

Exemplo: 1 2 3 4 5 6 7 8 9 B D H K M P R T V M (1+9)/2 = 5 < (1+4)/2= 2 < (1+1)/2= 1 > (3+4)/2= 3 > (4+4)/2= 4 > (6+9)/2=7 < (6+6)/2=6 > (8+9)/2=8 > (9+9)/2=9 Árvores binárias V P T R K H B D

Árvore de Decisão da Pesquisa Binária

(ADPB)

A Árvore de Decisão da Pesquisa Binária é uma árvore binária completae pode ser construida recursivamente.

Exemplo: 1 2 3 4 5 6 7 8 9

B D H K M P R T V

M Árvores binárias

Construção Recursiva da ADPB

Constroi(e, d, p): se (e > d): p  nulo senão: i  (e+d)/2 p  Arv() p.chave  V[i] Constroi(e, i-1, p.le) Constroi(i+1, d, p.ld)

Externamente:

Constroi(1, n, T)

Árvores binárias

Exercício:

Desenhar a ADPB para n = 11.

Árvores binárias

Árvores Balanceadas

Para evitar a degeneração em ABB, foram cria-das as árvores balanceadas. A idéia é a de, a cada inserção em uma ABB, checar se a árvore está tendendo à degeneração e acertar ime-diatamente, se necessário (balanceara árvore).

Tipos de árvores balanceadas: AVL

B/B+

Rubronegras 2-3, etc

O balanceamento é baseado na altura.

Árvores binárias

Árvores AVL (Adel’son-Vels’ii-Landis)

Árvores binárias onde, para cada nó, a alturadas duas subárvores difere no máximo em 1.

A

B

C

D

F

G

H

I

J

K

P

N

L

M

-0 -0 0 0 0 + + 0 0 -0 -Árvores binárias

O

0

(15)

Exercício:

a) Desenhar uma árvore AVL de altura 6,

com o menor número de nós possível.

b) Desenhar todas as AVLs para as chaves

A, B, C, D.

Árvores binárias

Balanceamento de AVL's

Caso 1 - Rotação Simples

Sit. Inicial: Desbalanceamento Rotação Simples

Na (h) 0 + Nb    (h) (h) Na (h) + ++ Nb   ’ (h) (h+1) Na (h) 0 0 Nb   ’ (h) (h+1) Árvores binárias

a) Preservação da ordem de busca Busca in-ordem antes: .Na..Nb.’

depois: .Na..Nb.’

b) Preservação da altura

Antes: max(h, max(h, h)+1)+1 = h+2 Depois: max(max(h, h) +1, h+1)+1 = h+2 c) Balanceamento

Subárvores ,  e ’ balanceadas, por hipótese. Nós Na e Nb balanceados (esquema); restante da árvore balanceada, por b).

Árvores binárias

Balanceamento de AVL's

Caso 1 Rotação Simples

-Árvores AVL

Balanceamento - Caso 2 - Rotação

Dupla

Sit. Inicial: Desbalanceamento Rotação Dupla

(h) Na (h) 0 + Nb   Nx (h-1) (h-1)   0 Na (h) -++ Nb   (h) Nx (h-1|h) (h|h-1) ’ -|+’ Nx (h) +|0 0 Nb   (h) Na (h-1|h) (h|h-1) ’ ’ 0| -Árvores

Correção da Rotação Dupla

a) Preservação da ordem de busca

Busca in-ordem antes: .Na.’.Nx.’.Nb. depois: .Na.’.Nx.’.Nb.

Árvores AVL

b) Preservação da altura

Antes: max(h, max(max(h-1, h-1)+1, h)+1)+1 = h+2 Depois: max(max(h, h| h-1)+1, max(h-1| h, h)+1)+1 = h+2 c) Balanceamento

Subárvores , ’, ’ e  balanceadas, por hipó-tese. Nós Nx, Na e Nb balanceados (esquema); res-tante da árvore balanceada, por b).

Árvores

Árvores AVL

Exercício:

Criar e balancear, passo a passo, o

MIXSTRING.

(16)

Árvores AVL

Exercício: balancear a árvore abaixo, após a inserção da chave E.

A

B

C

D

E

F

G

H

I

J

K

P

N

L

M

-0 -0 0 0 0 + + 0 0 -0

-O

0 Árvores

Resumo do algoritmo de Inserção/Balanceamento:

Busca_Insercao(k, p, h); se (p = nulo): Insere(k) h  verdadeiro senão se (k < p.chave): Busca_Insercao(k, p.le, h); se (h): caso (p.bal): 1: p.bal  0; h  falso; 0: p.bal  -1 -1: se (p.le.bal = -1): RotSimplEsq(p) senão: RotDuplEsq (p) p.bal  0; h  falso;

Árvores AVL

continua... Árvores

Resumo do algoritmo de Inserção/Balanceamento:

Busca_Insercao(k, p, h): ... senão se (k > p.chave): Busca_Insercao(k, p.ld, h) se (h): caso (p.bal): -1: p.bal  0; h  falso; 0: p.bal  1 1: se (p.ld.bal = 1): RotSimplDir(p) senão RotDuplDir (p) p.bal  0; h  falso; senão: h  falso

Árvores AVL

continua... Árvores

Resumo do algoritmo de Inserção/Balanceamento:

RotSimplEsq(p); pf  p.le; p.le  pf.ld; pf.ld  p; p.bal  0; p  pf; p.bal  0; h  falso; RotDuplEsq(p); pf  p.le; pn  pf.ld;

pf.ld  pn.le; pn.le  pf; p.le  pn.ld; pn.ld  p; se (pn.bal = -1): p.bal  1 senão: p.bal  0 se (pn.bal = 1): pf.bal  -1 senão: pf.bal  0 p  pn; p.bal  0; h  falso;

Árvores AVL

Árvores

Árvores AVL Mínimas

Problema: determinar a maior altura possívelpara uma AVL com n chaves.

Árvores AVL

Solução: resolver o problema dual:

Determinar o número mínimo de chavesem uma AVL de altura h.

Árvores

Árvores AVL Mínimas

Recorrência: T(h) =

núm. mínimo de chaves numa AVL de altura h

Árvores AVL

T(0) = 0; T(1) = 1; T(h) = 1 + T(h-1) + T(h-2); h 0 1 2 3 4 5 6 7 8 9 T(h) 0 1 2 4 7 12 20 33 54 88 Fib(h) 0 1 1 2 3 5 8 13 21 34 T(h) = Fib(h+2)-1; Árvores

(17)

Árvores AVL Mínimas

Recorrência: T(h) =

núm. mínimo de chaves numa AVL de altura h

Árvores AVL

T(0) = 0; T(1) = 1;

T(h) = 1 + T(h-1) + T(h-2); T(h) = Fib(h+2)-1;

 h  1,4 log n,

a altura máxima da AVL é 1,4 log n a altura média da AVL é log n.

Árvores

Árvores B (Bayer)

Árvores m-árias de busca (de ordem d) , para ar-mazenamento em disco, que obedecem a quatro regras básicas:

1)A raiz tem entre 1 e 2d chaves.

2)Nós intermediários têm um mínimo de d chaves e um máximo de 2d chaves.

3)Nó intermediário com k chaves tem k+1 filhos.

4)As folhas estão todas no mesmo nível. Árvores

Exemplo de árvore B de ordem 2:

A B D E F H I J K P S V L C G M N O Q R T U W X Regra 1 Regra 2 Regra 3 Regra 4 Árvore é de busca!

Árvores B (Bayer)

Árvores Exercício:

Desenhar uma árvore B de ordem 1, para as 26 letras do alfabeto, com altura 4.

Árvores B (Bayer)

Árvores Busca na árvore: A B D E F H I J K P T W L C G M N O Q R S U V X Y R R > L P <R < T R

Árvores B (Bayer)

Árvores

A inserção é sempre feita nas folhas. Isso implica um processo de crescimento de baixo para cimae a necessidade de um método especial de inserção: Split e Promoção.

Exemplo: Criar Árvore B de ordem 2 para E B C A D.

A B C E +D A B D E

C

SPLIT PROMOÇÃO

Árvores B (Bayer) - Inserções

(18)

1) a inserção é sempre feita numa folha. Se houver “overflow”, faz-se Split e Promoção.

A E I O

+R

A E O U I

Ex: Criar árvore B de ordem 2 para:

A E I O U D W Q F R J P K T C B G H L M S V Z N Y X

+D,W,Q,F

A D E F O Q U W I +U

Árvores B (Bayer) - Inserções

(Regras)

Árvores

A E I O

+R

A E O U I

Ex: Criar árvore B de ordem 2 para:

A E I O U D W Q F R J P K T C B G H L M S V Z N Y X +D,W,Q,F A D E F O Q U W I +U A D E F U W I R O Q A D E F U W I R J O P Q +J,P +K

Árvores B (Bayer) - Inserções

Árvores

Ex: Criar árvore B de ordem 2 para:

A E I O U D W Q F R J P K T C B G H L M S V Z N Y X A D E F U W I R J O P Q +K A D E F U W I O R J K P Q A D E F T U W I O R J K P Q +T +C

Árvores B (Bayer) - Inserções

Árvores

Ex: Criar árvore B de ordem 2 para:

A E I O U D W Q F R J P K T C B G H L M S V Z N Y X +B,G,H,L,M, S E F T U W D I O R J K P Q A C E F G H ST U W D I O R J K L M P Q A B C +V

Árvores B (Bayer) - Inserções

Árvores

Ex: Criar árvore B de ordem 2 para:

A E I O U D W Q F R J P K T C B G H L M S V Z N Y X E F G H V W D I O R U P Q S T A B C +V J K L M E F G H P Q S T V W A B C J K L M O D I R U

Árvores B (Bayer) - Inserções

Árvores

1) a inserção é sempre feita numa folha. Se houver “overflow”, faz-se Split e Promoção. 2) Se houver “overflow” em nó intermediário, faz-se split e promoçãono nível intermediário e

redis-tribuiçãode subárvores. 2d+1 / 2d+2 d / d+1 d / d+1 +1 / +1 x x x x x x x x x x

Árvores B (Bayer) - Inserções

(19)

Exercício:

Criar, passo a passo, árvores B de ordens 1 e 2 para o MIXSTRING.

Árvores B (Bayer) - Inserções

Árvores

Porque se usa árvore m-ária em disco?

R: Para otimizar acesso a disco. Quando se acessa disco para leitura ou gravação, sempre se trabalha com uma trilha inteira devido ao “seek” do disco.

Ex: tamanho da trilha = 10k tamanho da chave + link = 50 d = 10000/2*50 = 100

A ordem da árvore é calculada a partir do tamanho da trilha.

Árvores B (Bayer) - Inserções

Árvores

Resumo do algoritmo de Inserção

Atualiza(): T  nulo;

enquanto (houver chaves): Ler(x); BuscaInserção(x, T, h, u); se (h): q  T; T  Arv(); T.m  1; T.le  q; Vv[1]  u;

Árvores B

Árvores continua...

Resumo do algoritmo de Inserção:

Busca_Insere(k, p, h, v); se (p = Nulo): v.c  x; v.ld  nulo; senão: i  PB(x, p) se (i  nulo): h  falso senão: se (i = 0): q  p.le senão: q  p.Vv[i].ld Busca_Insere(x, q, h, u) se (h): Insere();

Árvores B

continua... Árvores

Resumo do algoritmo de Inserção:

Insere(): se (p.m < 2d):

p.m++; h  falso; Faz shift em Vv; Vv[i]  u; senão:

b  ArvB();

v  item a ser promovido;

Transfere a metade direita de p para b;

Acerta a metade esquerda de p e limpa sua metade direita; p.m  d; b.m  d; b.le  v.ld; v.ld  b;

Árvores B

Árvores

Árvores B Mínimas

Problema: determinar a maior altura possível para uma árvore B, ordem d, com n chaves.

Solução: resolver o problema dual:

Determinar o número mínimo de chaves em uma árvore B de ordem d e altura h.

Árvores B (Bayer) - Inserções

(20)

Árvores B Mínimas - Estrutura da árvore .d+1.. .d+1.. .d+1.. .d+1.. 2 1 d d d d d d d d d d h

Árvores B (Bayer) - Inserções

Árvores

Árvores B Mínimas

Solução: resolver o problema dual: determinar o número mínimo de chaves em uma árvore B de ordem d e altura h. n = 1 + 2(d + d(d+1) +... +d(d+1)(h-2) ) = = 1 + 2d((d+1)(h-1) -1)/(d+1-1) = 2(d+1)(h-1)-1  h-1 = log d+1(n+1)/2 ou h  log d+1(n+1)/2

Árvores B (Bayer) - Inserções

Árvores

Árvores B Máximas

Problema: determinar a menor altura possível para uma árvore B, ordem d, com n chaves.

Solução: resolver o problema dual:

Determinar o número máximo de chavesem uma árvore B de ordem d e altura h.

Árvores B (Bayer) - Inserções

Árvores

Árvores B Máximas - Estrutura da árvore

.2d+1.. .2d+1.. .2d+1.. .2d+1.. ..2d+1.. 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d h

Árvores B (Bayer) - Inserções

Árvores

Árvores B Máximas

Solução: resolver o problema dual: determinar o número máximo de chavesem uma árvore B de ordem d e altura h.

n = 2d + 2d(2d+1) + ... +2d(2d+1)(h-1) ) =

= 2d((2d+1)h-1)/(2d+1-1) = (2d+1)h -1

h = log 2d+1(n+1)

Árvores B (Bayer) - Inserções

Árvores

Árvores B - Alturas máxima e mínima

n\d 10 50 60 102 2 2 1 103 4 3 2 106 6 4 3 ÁRVORE MÍNIMA 10 50 60 2 2 1 4 3 2 6 4 3 ÁRV. MÁXIMA

mínima ~ máxima valores baixos !!!

Árvores B (Bayer) - Inserções

(21)

Regras para Deleções

1. Se a chave está na folha e não há “underflow”, a chave é deletada na folha. 2. Se a chave está na folha e há “underflow”, faz-se “fusão” ou “recombinação”.

3. Se a chave está em nó intermediário, substitui a mesma pela sucessora(na folha) e elimina esta.

4. Se ocorrer “underflow” em nó intermediário, faz-se “fusão” ou “recombinação” no nível.

Árvores B (Bayer) - Inserções

Árvores

Arquivos Sequenciais Indexados

chaves + dados chaves (índice)

Árvores B+

Árvores Árvores B+ de ordem 2 A B C D E F H I J O S V J C F M N O Q R S U V X Y

Árvores B+

Árvores Árvores B+ - Inserções

Semelhante à inserção na árvore B. A diferença é que, nos splits de folha, a chave promovida tam-bém permanece na folha.

Exemplo: Criar Árvore B+ de ordem 2 para E B C A D.

A B C E +D A B C D E C SPLIT PROMOÇÃO

Árvores B+

Árvores Árvores B+ A E I O +F A E I O U I

Ex: Criar árvore B de ordem 2 para:

A E I O U D W Q F R J K T C B +D,W,Q,F A D E I O Q U W I +U

Árvores B+

Árvores A E I O +F A E I O U I

Ex: Criar árvore B+ de ordem 2 para:

A E I O U D W Q F R J K T C B +D,W,Q A D E I O Q U W I +U A D E O Q U W E I F I +R

Árvores B+

Árvores

(22)

Ex: Criar árvore B+ de ordem 2 para: A E I O U D W Q F R J K T C B A D E U W E I R F I O Q R A D E U W E I R F I J O Q R +J +K

Árvores B+

Árvores

Ex: Criar árvore B+ de ordem 2 para:

A E I O U D W Q F R J K T C B F I U W E I O R J K O Q R A D E +T,C F I T U W E I O R J K O Q R A C D E +B

Árvores B+

Árvores

Ex: Criar árvore B de ordem 2 para:

A E I O U D W Q F R J K T C B D E T U W C E I O R J K O Q R A B C +B F I D E J K O Q R T U W A B C F I I C E O R

Árvores B+

Árvores

1) a inserção é sempre feita numa folha. Se houver “overflow”, faz-se Split e Promoção, mantendo a chave promovida na folha. 2) Se houver “overflow” em nó intermediário, faz-se split e promoçãono nível intermediário e

redis-tribuiçãode subárvores. 2d+1 / 2d+2 d / d+1 d / d+1 +1 / +1 x x x x x x x x x x

Árvores B+ - Inserções

Árvores Exercício:

Criar, passo a passo, árvores B+ de ordens 1 e 2 para o MIXSTRING.

Árvores B+ - Inserções

Árvores

FIM

Referências

Documentos relacionados

A licença simples é transmissível por morte do seu titular para os seus herdeiros legais, sendo válida para o ano a que disser respeito. Para o caso de pessoas colectivas a

reprodução realizados tendo em conta os requisitos em matéria de dados aplicáveis às substâncias activas, protectores de fitotoxicidade e agentes sinérgicos, bem como noutros dados

Bromeliaceae Dyckiacabrerae smith et reitz gravatá, bromélia Em perigo. Bromeliaceae Dyckiadistachya hassler gravatá, bromélia

- Uma boa condição de equilíbrio consiste em definir uma árvore equilibrada em altura como sendo uma árvore em que a diferença das alturas entre as subárvores esquerda

- Uma boa condição de equilíbrio consiste em definir uma árvore equilibrada em altura como sendo uma árvore em que a diferença das alturas entre as subárvores esquerda

Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.. It

Utilizar árvores binárias com altura da mesma ordem de grandeza ( O(log 2 n) ) que a de uma árvore completa de mesmo número de nós (1+log 2 n). É desejável também que

As árvores onde cada nó que não seja folha numa árvore binária tem sub- árvores esquerda e direita não vazias são conhecidas como árvores estritamente binárias.. apresenta