Buscar

17_Arvore PV

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
Árvores Preto e Vermelho
Prof. Cláudio Campelo, PhD
Departamento de Sistemas & Computação / UFCG
Estrutura de Dados e 
Algoritmos
Árvore PV
2
� É uma árvore binária de busca cujo nó contém uma
informação extra: cor.
� Através de restrições (invariantes ou propriedades) 
é possível se atingir uma configuração
aproximadamente balanceada. 
� Todo caminho em uma árvore vermelho-preto nunca é 
maior que o dobro de qualquer outro caminho.
2
Árvore PV
3
� Invariantes (propriedades)
� Cada nó possui uma cor: ou preta ou vermelha
� Toda folha (NIL) é preta
� A raiz é preta
� Todos os filhos de um nó vermelho são pretos
� Todo caminho simples de um nó a uma folha
descendente contém o mesmo número de nós pretos.
� Black-height
Árvore PV
4
� Exemplo
3
Exercício 
5
� Quais destas árvores são preto-vermelho?
42
5044
42
5040
42
5040
Black Height
6
� Black-height de um elemento X:
� Não contamos X;
� Contamos NIL;
� Black-height da raiz é o black-height da árvore;
4
Exercício
7
Black-Height do nó X =
Black-Height da raiz =
X
Exercício
8
Black-Height do nó X = 2
Black-Height da raiz = 3
X
5
POSCOMP 2009
9
POSCOMP 2009
10
6
Árvore PV
11
� Lema: uma árvore preto-vermelho com n nós 
internos tem no máximo a altura de:
� Consequência imediata:
� Busca, Máximo e Mínimo podem ser implementados em
O(lg n).
� Inserções e remoções são um pouco diferente: 
devem garantir as propriedades de uma árvore PV.
h ≤ 2.lg(n+1)
Árvore PV (Exercício)
12
� Desenhe uma árvore binária completa com os
valores {1, 2, …, 15}, e os nós vazios. 
� Em seguida pinte os nós de três formas diferentes
tal que o black-height das arvores PV resultantes
sejam 2, 3 e 4.
7
Árvore PV (Exercício)
13
8
4 12
2
1 3
6
5 7
10 14
9 11 13 15
Árvore PV (Exercício)
14
8
4 12
2
1 3
6
5 7
10 14
9 11 13 15
Bh= 2
8
Árvore PV (Exercício)
15
8
4 12
2
1 3
6
5 7
10 14
9 11 13 15
Bh= 3
Árvore PV (Exercício)
16
8
4 12
2
1 3
6
5 7
10 14
9 11 13 15
Bh= 3
9
Árvore PV (Exercício)
17
8
4 12
2
1 3
6
5 7
10 14
9 11 13 15
Bh= 3
Árvore PV (Exercício)
18
8
4 12
2
1 3
6
5 7
10 14
9 11 13 15
Bh= 4
10
Árvore PV
19
� Como representar o nó e uma árvore PV em Java?
� É possível reusar algo anterior?
Árvore PV
20
� Como representar o nó e uma árvore PV em Java?
� É possível reusar algo anterior?
public class RBNode<T extends Comparable<T>> 
extends BSTNode<T> {
enum Color {BLACK, RED};
protected Color color;
public RBNode() {
this.color = Color.BLACK;
}
@Override
public boolean equals(Object obj) { 
return super.equals(obj) 
&& this.colour == ((RBNode<T>) obj).getColour();
}
}
11
Árvore PV
21
� Como representar o nó e uma árvore PV em Java?
� É possível reusar algo anterior?
...
@Override
public String toString(){
String resp = "NIL";
if(!isEmpty()){
resp = "(" + data.toString();
if(colour == Colour.RED){
resp = resp + ",R)"; 
}else{
resp = resp + ",B)";
}
}
return resp;
}
Árvore PV
22
� Como representar o nó e uma árvore PV em
Java?
� É possível reusar algo anterior?
public interface RBTree<T extends Comparable<T>> 
extends AVLTree<T>{
public RBNode<T>[] extendedPreOrder();
}
public class RBTreeImpl<T extends Comparable<T>> 
extends AVLTreeImpl<T> implements RBTree<T> {
}
12
Árvore PV
23
� Como representar o nó e uma árvore PV em
Java?
� É possível reusar algo anterior?
public interface RBTree<T extends Comparable<T>> 
extends AVLTree<T>{
public RBNode<T>[] extendedPreOrder();
}
public class RBTreeImpl<T extends Comparable<T>> 
extends AVLTreeImpl<T> implements RBTree<T> {
}
Que métodos precisarão ser sobrescritos?
Árvore PV
24
� Como representar o nó e uma árvore PV em
Java?
� É possível reusar algo anterior?
public interface RBTree<T extends Comparable<T>> 
extends AVLTree<T>{
public RBNode<T>[] extendedPreOrder();
}
public class RBTreeImpl<T extends Comparable<T>> 
extends AVLTreeImpl<T> implements RBTree<T> {
public void insert(T elem);
public void remove(T elem); //não implementar
}
Que métodos auxiliares precisam ser implementados?
13
Árvore PV
25
public class RBTreeImpl<T extends Comparable<T>> 
extends AVLTreeImpl<T> implements RBTree<T> {
public void insert(T elem);
public void remove(T elem);
int blackHeight();
protected boolean verifyProperties(){
return verifyNodesColour() &&
verifyNILNodeColour() && 
verifyRootColour() && 
verifyChildrenOfRedNodes() && 
verifyBlackHeight();
}
void fixUpInsert(RBNode<T> node);
}
Árvore PV
26
� Como é feita a pesquisa em uma árvore PV?
14
Árvore PV
27
� Como é feita a pesquisa em uma árvore PV?
� A pesquisa realizada em uma árvore preto-vermelho é 
igual a realizada em uma árvore binária de pesquisa
� Tempo = O(log n)
Árvore PV
28
� Inserções
� Insira o nó 51 na árvore abaixo. 
� Qual a melhor cor para o novo nó? Por quê?
15
Árvore PV
29
� Inserções
� Insira o nó 51 na árvore abaixo. 
� Qual a melhor cor para o novo nó? Por quê?
51
Árvore PV
30
� Inserções
� Insira o nó 87. Preserva o invariante?
16
Árvore PV
31
� Inserções
� Insira o nó 87. Preserva o invariante?
87
Árvore PV
32
� Inserções
� Insira o nó 87. Preserva o invariante?
87Como manter o invariante de uma
árvore PV após uma inserção?
17
Árvore PV
33
� Inserções
� Novo nó tem sempre cor vermelha
� Insere o novo elemento normalmente como na BST
� Se violar invariantes tem que consertar a árvore
� Considerar 5 casos sequenciais: 1 � 2 � 3 � 4 � 5
� Dica: focar no tio do novo nó
Árvore PV
34
� Inserções
RB-INSERT(N)
TREE-INSERT(N)
color[N] ← RED
FIXUP_CASE1(N)
18
Árvore PV
35
� Inserções
FIXUP_CASE1(N){
if (N is root)
N.color = BLACK
else
FIXUP_CASE2(N)
}
N N
Árvore PV
36
� Inserções
FIXUP_CASE2(N){
if (N.parent.color = BLACK)
//OK.
else
FIXUP_CASE3(N)
}
N
P
OK
19
Árvore PV
37
� Inserções
FIXUP_CASE3(N){
if (U.color = RED)
P.color = BLACK
U.color = BLACK
G.color = RED
FIXUP_CASE1(G)
else
FIXUP_CASE4(N)
}
FIXUP_CASE4(N){
Next = N
if (N is right child and P is left child)
leftRotation(P)
Next = N.left
else if (N is left child P is right child)
rightRotation(P)
Next = N.right
FIXUP_CASE5(Next)
}
Árvore PV
38
20
Árvore PV
39
FIXUP_CASE4(N){
Next = N
if (N is right child and P is left child)
leftRotation(P)
Next = N.left
else if (N is left child P is right child)
rightRotation(P)
Next = N.right
FIXUP_CASE5(Next)
}
Árvore PV
40
//N is left child and P is left child
FIXUP_CASE5(N){
P.color = BLACK
G.color = RED
if (N is left child)
rightRotation(G)
else
leftRotation(G)
}
21
Árvore PV
41
//N is left child and P is left child
FIXUP_CASE5(N){
P.color = BLACK
G.color = RED
if (N is left child)
rightRotation(G)
else
leftRotation(G)
}
Exemplo
42
� Insira o nó 8
8
FIXUP_CASE1(8)
22
Exemplo
43
� Insira o nó 8
8
FIXUP_CASE1(8)
Exemplo
44
� Insira o nó 4
8
FIXUP_CASE1(4)
FIXUP_CASE2(4)
4
23
Exemplo
45
� Insira o nó 4
8
FIXUP_CASE1(4)
FIXUP_CASE2(4)
if P.color = BLACK
//OK4
Exemplo
46
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
if P.color = BLACK
//OK
else
FIXUP_CASE3(2)
4
2
24
Exemplo
47
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
FIXUP_CASE3(2)
if (U.color = RED)
...
else
FIXUP_CASE4(N)
4
2
Exemplo48
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
FIXUP_CASE3(2)
if (U.color = RED)
...
else
FIXUP_CASE4(N)
4
2
N
25
Exemplo
49
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
FIXUP_CASE3(2)
FIXUP_CASE4(N)4
2
N
Exemplo
50
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
FIXUP_CASE3(2)
FIXUP_CASE4(2)
Next = 2
if (N is right child and P is left child)
...
else if (N is left child P is right child)
...
FIXUP_CASE5(Next)
4
2
N
26
Exemplo
51
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
FIXUP_CASE3(2)
FIXUP_CASE4(2)
FIXUP_CASE5(2)
P.color = BLACK
G.color = RED
if (N is left child)
rightRotation(G)
else
leftRotation(G)
4
2
N
P
G
Exemplo
52
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
FIXUP_CASE3(2)
FIXUP_CASE4(2)
FIXUP_CASE5(2)
P.color = BLACK
G.color = RED
if (N is left child)
rightRotation(G)
else
leftRotation(G)
4
2
N
P
G
27
Exemplo
53
� Insira o nó 2
8
FIXUP_CASE1(2)
FIXUP_CASE2(2)
FIXUP_CASE3(2)
FIXUP_CASE4(2)
FIXUP_CASE5(2)
P.color = BLACK
G.color = RED
if (N is left child)
rightRotation(G)
else
leftRotation(G)
4
2
Árvore PV (Remoções)
54
� Como remover um nó de uma árvore PV?
� Podemos usar a remoção de BST?
� As remoções da BST preservam os invariantes da
árvore PV?
� Que tipos de remoções causam problema?
28
Árvore PV (Remoções)
55
� Remover uma folha vermelha (6)
Árvore PV (Remoções)
56
� Remover uma folha vermelha (6)
29
Árvore PV (Remoções)
57
� Remover um nó interno vermelho (17) com filho 
substituto vermelho (22)
Árvore PV (Remoções)
58
� Remover um nó interno vermelho (17) com filho 
substituto vermelho (22)
30
Árvore PV (Remoções)
59
� Remover um nó interno vermelho (17) com filho 
substituto vermelho (22)
Árvore PV (Remoções)
60
� Remover folha preta (11)
31
Árvore PV (Remoções)
61
� Remover folha preta (11)
� Violação do black-height � foca no irmão (1) e sobrinho 
mais próximo (6)
Árvore PV (Remoções)
62
� Remover nó interno preto (13) com substituto preto 
(15)
32
Árvore PV (Remoções)
63
� Remover nó interno preto (13) com substituto preto 
(15)
� Violação do black-height � foca no irmão (25) e sobrinho 
mais próximo (22)
Remoção
64
� Caso 1: Irmão preto e filho vermelho
� Rotação + troca de cores
� Caso 2: Irmão preto e filhos pretos
� Troca cor
� Caso 3: Irmão vermelho
� Rotação
33
Remoção
65
� Caso 1: Irmão preto e filho vermelho
Remoção
66
� Caso 2: Irmão preto e filhos pretos
� Troca cor
34
Remoção
67
� Caso 3: Irmão vermelho
� Rotação
Referências
68
� Capítulo 14
� 1a edição

Outros materiais