Escolar Documentos
Profissional Documentos
Cultura Documentos
rvores
rvores so estruturas de dados que caracterizam uma relao entre os dados que a compem; A relao existente entre os dados (ns) de uma rvore, uma relao de hierarquia; Formalmente, uma rvore um conjunto finito T de um ou mais ns, tais que:
a. b.
Existe um n denominado raiz da rvore; Os demais ns formam m0 conjuntos separados T1, T2, ..., Tm, onde cada um destes conjuntos uma rvore. As rvores Ti (1i m) recebem a denominao de subrvores.
rvores
Esquematicamente, uma rvore pode ser representada da seguinte forma:
A
B
Prof. Yandre Maldonado - 3
rvores
Terminologia: No exemplo anterior, os quadrados representam os ns da rvore, cuja raiz o n A; Pela definio de rvore, cada n da rvore raiz de uma subrvore. O nmero de subrvores de um n o grau deste n; O grau de uma rvore igual ao grau do n de maior grau pertencente mesma; Um n de grau zero chamado de folha ou n terminal; O nvel do n definido como sendo o igual ao nmero de ns que o separam da raiz; A altura de uma rvore definida como sendo o nvel mais alto da rvore; Um conjunto de zero ou mais rvores disjuntas chamado de floresta;
rvores
Em relao a rvore descrita anteriormente, pode-se observar:
Nodo A B C D E F G H I J K
Prof. Yandre Maldonado - 5
Grau 3 1 2 1 0 0 0 3 0 0 0
Nvel 0 1 1 1 2 2 2 2 3 3 3
rvores
Quando a ordem das subrvores significativa, a rvore chamada de ordenada. Neste caso, h diferena entre as seguintes rvores:
A A
Entretanto, quando a ordem das subrvores no relevante, diz-se que a rvore orientada, uma vez que apenas a orientao dos ns importante (neste caso as duas rvores mostradas acima so iguais);
rvores
A raiz de uma rvore chamada de pai das razes de suas subrvores. As razes das subrvores de um n so chamadas de irmos que, por sua vez, so filhos de seu n pai. Formas de Representao de rvores: rvore convencional (grafos)
Prof. Yandre Maldonado - 7
C A B
F E
ou
F D
rvores
Conjuntos Aninhados ou Diagramas de Venn: A B D
Prof. Yandre Maldonado - 8
C E F
rvores
Barramento ou Tabelas: A B D E C F Notao Decimal (DEWEY): 1.A, 1.1.B, 1.1.1.D, 1.1.2.E, 1.2.C, 1.2.1.F.
Prof. Yandre Maldonado - 9
rvores
Aplicaes de rvores:
Representaes genealgicas; Representao de objetos que possuem relao hierrquica.
Exemplo: uma universidade
Prof. Yandre Maldonado - 10
Universidade
C. Exatas ...
C. Bio. ...
D. Eng. ...
rvores
Aplicaes:
ndices de arquivos; rvores genealgicas ou hereditrias; Organizao de empresa (organograma); Avaliao de expresses; rvores de deciso; Busca em tabelas; Algoritmos e Classificao
rvores
Exerccio: dada a seguinte rvore, encontre:
A raiz da rvore; Todos os ns folha; O grau e o nvel de cada n; A altura da rvore; Todas as relaes entre ns (irmo, pai, filho); Descreva a rvore com todas as representaes estudadas; B A E C F K G L D H I J M N
rvores Binrias
Conjunto finito de ns que, ou vazio, ou consiste de uma raiz ligando duas outras rvores binrias.
So rvores onde o grau de cada n menor ou igual a dois; As subrvores de cada n so chamadas subrvore esquerda e subrvore direita; Assim, se um n possuir apenas uma subrvore, ela deve ser estabelecida como direita ou esquerda; Uma rvore binria pode ser vazia, isto , no possuir nenhum n;
rvores Binrias
Alocao:
Por adjacncia:
Ns representados seqencialmente na memria; Esta alocao no conveniente na maioria dos casos, pois dificulta a manipulao da estrutura;
A
A2B1D1F0C1E1G0
| C E | | G |
B C D | | F |
rvores Binrias
Alocao:
Encadeada:
Mais adequada; Permite melhor manipulao dos dados com diversas ordens de acesso aos ns; Os ns so alocados dinamicamente;
A
typedef struct { int chave; //Outros Campos } Registro; struct Nodo { Registro Reg; Nodo* Dir; Nodo* Esq; };
Item de dado n
| C E | | G |
B D | | F |
rvores Binrias
Caminhamento em rvores Binrias:
a forma de percorrer todos os ns da rvore, com o objetivo de consultar ou alterar suas informaes; Existem vrios mtodos de tal forma que cada n seja visitado apenas uma vez; Um completo percurso da rvore nos d um arranjo linear sobre os ns; So trs os principais caminhos utilizados para percorrer uma rvore binria: visitar os ns em ordem pr-fixada, ps-fixada, ou in-fixa (in-ordem).
rvores Binrias
Formas de caminhar:
Pr-ordem: RED
Visitar a raiz; Percorrer a subrvore esquerda; Percorrer a subrvore direita;
rvores Binrias
Exemplo: dada a seguinte rvore, verifique a seqncia de nos percorridos segundo as trs formas de caminhar sobre rvores binrias.
1
3 5 | | 8 | | 6 | 9 | | 10 | 7 | 11 |
4 |
rvore Binria
Algoritmos de travessia em rvores binrias
observe que os procedimentos so recursivos, devido natureza recursiva da estrutura (rvore).
void voidpre_ordem pre_ordem(Nodo* (Nodo*T) T) {{
Prof. Yandre Maldonado - 19
void voidin_ordem in_ordem(Nodo* (Nodo*T) T) {{ ifif(T!=NULL) (T!=NULL) {{ in_ordem in_ordem(T->Esq); (T->Esq); printf("Item: printf("Item:%d",T->Reg.chave); %d",T->Reg.chave); in_ordem in_ordem(T->Dir); (T->Dir); }} }}
ifif(T!=NULL) (T!=NULL) {{ printf("Item: printf("Item:%d",T->Reg.chave); %d",T->Reg.chave); pre_ordem pre_ordem(T->Esq); (T->Esq); pre_ordem pre_ordem(T->Dir); (T->Dir); }} }}
rvores Binrias
void voidpos_ordem pos_ordem(Nodo* (Nodo*T) T) {{ ifif(T!=NULL) (T!=NULL) {{ pos_ordem pos_ordem(T->Esq); (T->Esq); pos_ordem pos_ordem(T->Dir); (T->Dir); printf("Item: printf("Item:%d",T->Reg.chave); %d",T->Reg.chave); }} }}
Prof. Yandre Maldonado - 20
1. Para cada vrtice na subrvore Esq de v e() < e(v); 2. Para cada vrtice na subrvore Dir de v e() > e(v); 3. Para cada elemento a S, existe exatamente um vrtice v | e(a)=v.
todo registro alocado na sua subrvore esquerda menor do que o n pai; e todo registro alocado na subrvore direita maior do que o n pai.
2 | 1 | | 3 | 4 | | 6 | 7 |
8 10 | 9 | | 11 |
typedef typedef struct struct { { int int chave; chave; //Outros //Outros Campos Campos } } Registro; Registro; struct struct Nodo Nodo { { Registro Registro Reg; Reg; Nodo* Nodo* Dir; Dir; Nodo* Nodo* Esq; Esq; }; };
Nas operaes de alterao, remoo e consulta a busca deve ter sucesso, nas operaes de insero a busca deve fracassar;
2 | 1 | | 3 | | 6 | 7 |
8 10 | 9 | | 11 |
void Remove_elemento (Nodo* T, Registro X) void Remove_elemento (Nodo* T, Registro X) {{ Nodo* A; Nodo* A; ifif (T==NULL) (T==NULL) printf ("Elemento nao encontrado na arvore."); printf ("Elemento nao encontrado na arvore."); else else ifif (X.chave<T->Reg.chave) (X.chave<T->Reg.chave) Remove_elemento (T->Esq, X); Remove_elemento (T->Esq, X); else else ifif (X.chave>T->Reg.chave) (X.chave>T->Reg.chave) Remove_elemento (T->Dir, X); Remove_elemento (T->Dir, X); else else if (T->Dir==NULL) if (T->Dir==NULL) {{ A=T; A=T; T=T->Esq; T=T->Esq; free(A); free(A); }} else else ifif (T->Esq==NULL) (T->Esq==NULL) {{ A=T; A=T; T=T->Dir; T=T->Dir; free(A); free(A); } } else else {{ T->Reg=Maior(T->Esq); T->Reg=Maior(T->Esq); Remove_elemento (T->Esq,T->Reg); Remove_elemento (T->Esq,T->Reg); }} }}
80 |
| 110 |
Capacidade = 2N-1
Sendo N o nmero de nveis da rvore
A rvore Binria tem complexidade igual a pesquisa binria: -Melhor caso: 1 consulta; -Mdia: log2n; -Pior caso: log2n+1. Onde n o nmero de elementos armazenados na rvore.
rvore AVL
rvores no completamente balanceadas:
Uma rvore balanceada uma rvore onde a diferena de altura de qualquer subrvore no mximo 1; O grande esforo exigido para a manuteno de uma rvore completamente balanceada pode no ser compensado pelo ganho de eficincia no processo de busca; rvore no completamente balanceadas beneficiam o processo de busca, exigindo manuteno do balanceamento pouco onerosa.
rvore AVL
Exemplo de rvore no completamente balanceada:
220 120 100 | 80 | | 110 | | 130 150 | 200 | | 140 | 260 | 250 | | 270 | | 350 | 300 400 |
Neste contexto, destacam-se as rvores AVL, concebidas em 1962, por Adelson-Velskii e Landis, caracterizadas pela seguinte propriedade: para todo n de uma rvore AVL, a diferena entre as alturas de suas subrvores no excede a uma unidade.
rvore AVL
130 100 | 80 | | 120 | 150 | 200 | | 80 | 100 | 110 | 120 130 | 200 | | 150 |
| 110 |
rvore AVL
rvore no AVL
As constantes inseres e remoes de ns de uma rvore podem provocar o desbalanceamento da mesma. Para corrigir este problema em uma rvore AVL, necessria a aplicao de uma das quatro rotaes que sero vistas a seguir.
rvore AVL
Rotao Direita:
p
Prof. Yandre Maldonado - 36
Rotao Direita
u h + h 2 + 1 c a h b h h a
rvore AVL
Exemplo de Rotao Direita:
120 120
Rotao Direita
110
150
100
150
100
130
200
80
110
130
200
80
rvore AVL
Rotao Esquerda:
p
Prof. Yandre Maldonado - 38
Rotao Esquerda
z h a h b h c h + h 2 + 1
h h a h b
rvore AVL
Exemplo de Rotao Esquerda:
120 120
Rotao Esquerda
100
130 100
150
80
110
150
80
110
130
200
200
rvore AVL
Rotao Dupla Direita:
p u d h + h a 2 b v a h c ou h h
Prof. Yandre Maldonado - 40
b ou
rvore AVL
Exemplo de Rotao Dupla Direita:
120
Prof. Yandre Maldonado - 41
120
110
150
80
130
200
80
110
130
200
100
rvore AVL
Rotao Dupla Esquerda:
p z h a y h d h + 2 c
Prof. Yandre Maldonado - 42
b ou
b h ou
rvore AVL
Exemplo de Rotao Dupla Esquerda:
120
Prof. Yandre Maldonado - 43
120
100
150
80
110
200
80
110
130
200
150
rvore AVL
Identificao do caso a ser aplicado:
Supondo que o n q foi includo na rvore T, se houver desbalanceamento da rvore, sendo p o n raz do desbalanceamento mais prximo das folhas de T:
|he(p) hd(p)| = 2 he: altura da subrvore esquerda hd: altura da subrvore direita Caso 1: he(p)>hd(p)
Sendo u o filho esquerda de p: 1.1. he(u)>hd(u) rotao direita 1.2. hd(u)>he(u) rotao dupla direita
Prof. Yandre Maldonado - 44
Caso 2: hd(p)>he(p)
Sendo z o filho direita de p: 2.1. hd(z)>he(z) rotao esquerda 2.2. he(z)>hd(z) rotao dupla esquerda
rvore AVL
Exemplo de crescimento de uma rvore AVL (com balanceamento):
Suponhamos a insero das chaves na seguinte seqncia: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
50 50 50
Pilha 50 30
30
50 Pilha
30
Pilha
20
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
50
30
Prof. Yandre Maldonado - 46
30
50 Pilha
50 Pilha
20
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 47
30
20 30
20
50
20
50
Pilha
15
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 48
20
15
50
20 30
20 30 Pilha
15
Pilha
10
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30 30
Prof. Yandre Maldonado - 49
15 15 50 10 10 20 12 20
50
10 15 30 Pilha
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 50
15
10
50
15 30
15 30 Pilha 30 Pilha
10
20
Pilha
12
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
30
Prof. Yandre Maldonado - 51
15
15
50
10
30
10
20
12
20
50
12
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
Prof. Yandre Maldonado - 52
20
10
30
30 15
30 15 Pilha 15 Pilha
12
20
50
Pilha
18
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
18
Prof. Yandre Maldonado - 53
10
30
20 30 15
20 30 15 Pilha
12 18 17
20
50
Pilha
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
Prof. Yandre Maldonado - 54
15
10
30
10
30
12 18 17
20
50
12
18
50
17
20
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
20
Prof. Yandre Maldonado - 55
10
30
18 30
18 30 15 Pilha 30 15 Pilha
12 17
15
18 20
50
Pilha
25
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
15
Prof. Yandre Maldonado - 56
15
10
30
10
20
12 17
18 20
50
12
18
30
17 25
25
50
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
25
15
10
20
30 20
12
18
30
15 Pilha
17
25
50
24
rvore AVL
Seqncia inserida: 50, 30, 20, 15, 10, 12, 18, 17, 25, 24.
20
15
10
20
15
30
12
18
30
10
18
25
50
17
25
50
12
17
24
24
rvore AVL
Exerccio:
Dada a seguinte seqncia de chaves numricas a serem inseridas em uma rvores AVL, mostre a seqncia de rvores AVL produzidas aps a insero de cada uma destas chaves:
50, 40, 45, 70, 80, 60, 90, 85, 82, 55, 75.
rvore AVL
Exerccio
Dada a seguinte rvores AVL, mostre a seqncia de rvores produzidas aps a remoo de cada chave da seguinte seqncia:
50, 60, 55.
rvore AVL
Excluso do 50:
rvore AVL
Excluso do 60:
rvore AVL
Excluso do 55:
Bibliografia
Azeredo, Paulo. Notas de aula de Algoritmos e Estruturas de Dados. INF/UFRGS, 2000; Celes, Waldemar et al. Introduo a Estruturas de Dados. Editora Campus, 2004; Wirth, Niklaus. Algoritmos e Estruturas de Dados. Editora PHB; Ziviani, Nivio. Projeto de Algoritmos. Editora Pioneira.