arvores-rubro-negras
DESCRIPTION
Aula sobre árvoressTRANSCRIPT
-
Aula 13rvores de Busca Balanceadas
Prof. Marco Aurelio Stefanesmarco em dct.ufms.br
www.dct.ufms.br/ marco
Aula 13 p. 1
rvore Binria de BuscaObjetivo: Implementar operaes de Busca, Incluso,Remoo, Mnimo/Mximo e Predecessor/Sucessor em umconjunto de dados
Representao da rvore binriaEstrutura Ligada
chavedadosesq dir
pai
Aula 13 p. 2
rvore Binria de BuscaPropriedades
Se y est na subrvore esquerda de x entochave(y) chave(x)
Se y est na subrvore direitaa de x entochave(y) chave(x)
52 8
73
5 2
3
5
5
8
7
Aula 13 p. 3
Operaes Busca e SucessorBusca(T, k)Comece na raiz e compare k com a chave do n corrente x1. Se a chave encontrada pare2. Se a k < chave(x) busque na subrvore esquerda de x3. Se a k > chave(x) busque na subrvore direita de x
Sucessor(x): maior elemento menor que chave(x)
Caso 1 dir(x) 6= NULOsucessor o mnino na subrvore direita de xCaso 2 dir(x) = NULOSucessor primeiro n direita subindo pelosancestrais de x
Aula 13 p. 4
-
Operaes na rvore Binria de BuscaComplexidade das operaes
Busca O(h)Incluso O(h)Remoo O(h)Mnimo O(h)Mximo O(h)Predecessor O(h)Sucessor O(h)
Uma rvore Binria de Busca Balanceada se h = O(lg n)
Aula 13 p. 5
rvore Rubro-NegraVariao da rvore binria de busca (balanceada)Cada n possui um campo adicional: a cor do n, quepode ser rubro ou negroOperaes tomam O(lgn) no pior caso
Propiedades de rvores Rubro-Negras1. Cada n rubro ou negro2. A raiz negra3. Cada folha (NIL) negra4. Se um n rubro seus dois filhos so negros5. Todo caminho de um n at uma folha contm o
mesmo nmero de ns negrosAula 13 p. 6
Exemplo de um rvore RN
NIL NIL
NIL
NIL
NIL NIL
NIL
NILNIL
30
38
17
14
26
41
47
53
NIL[T]: Sentinela para todas as folhas e pai da raiz
Aula 13 p. 7
LemaDef.: a altura negra de um n x, hn(x) o nmero de nsnegros de um caminho at uma folha descendenteencluindo-se x.Afirmacao Uma subrvore com raiz em um n x tem pelomenos 2hn(x) 1 ns internosProva: Induo em h(x)Base: h(x) = 0 x folha hn(x) = 0 e 20 1 = 0 nsinternos na subrvorePI: h(x) > 0. A altura negra de cada filho de x hn(x) ouhn(x) 1, mas a altura de cada um de seus filhos menorque h(x). Portanto usando a HI, o nmero de ns internosna subrvore com raiz x pelo menos2.(2hn(x)1 1) + 1 = 2hn(x) 1.
Aula 13 p. 8
-
LemaLema Qualquer rvore RN com n ns internos tem altura 2 lg(n + 1).
Prova: Seja h a altura da rvore RN. Pela Prop. 4 a alturanegra da rvore pelo menos h/2. Portanto, pelaAfirmao temos n 2h/2 1 h = 2 lg(n + 1) 1
Portanto a rvore RN balanceadaComo executar as operaes de Incluso e Remoosem alterar as propriedades?
Aula 13 p. 9
RotaesH dois tipos de rotao para reestruturar a rvore:Esquerda e DireitaHiptese para uma rotao esquerda em um n xPai da raiz NILFilho direito y de x no NIL
x
x y
y
Rotao_Esq(T, x)
Rotao_Dir(T, y)
Aula 13 p. 10
Rotao_Esq(T, x)1: y = Dir[x]2: Dir[x] = Esq[y]3: if Esq[y] 6= NIL then4: p[Esq[y]] = x5: p[y] = p[x]6: if p[x] = NIL then7: root[T ] = y8: else9: if x = Esq[p[y]] then
10: Esq[p[y]] = y11: else12: Dir[p[y]] = y13: Esq[y] = x14: p[x] = y
Aula 13 p. 11
Incluso na rvore Rubro-NegraIdia1. Insira um n z como em uma rvore binria de busca
normal2. Pinte o n de vermelho3. Restaure as propriedades rubro-negras
Devemos subir na rvore at restaurar as propriedades.Olharemos para dois ns, em especial:Notao:x n rubroy tio de x
Aula 13 p. 12
-
Incluso na rvore Rubro-NegraCaso 1: Se y rubrocor[y]=negrocor[p[x]]=negrocor[p[p[x]]]=rubro
11
14
151 7
85
4
2
x
y
Aula 13 p. 13
Incluso na rvore Rubro-NegraCaso 2: Se y negrox filho direitox = p[x]Rotao_Esq(T, x)
11
14
151 7
85
4
2
x
y
Aula 13 p. 13
Incluso na rvore Rubro-NegraCaso 3: y negro e x filho esquerdocor[p[x]] =negrocor[p[p[x]]] =rubroRotao_Dir(T, p[p[x]])
11
14
15
y
1
2
7
8
x
5
4
Aula 13 p. 13
Incluso na rvore Rubro-Negra
y
8
15
1
2
5
4
14
11
7
x
Aula 13 p. 13
-
Insere_RN(T, x)1: Insere(T, x)2: cor[x] = rubro3: while x 6= root[T ] e cor[p[x]] = rubro do4: if p[x] = Esq[p[p[x]]] then5: y = Dir[p[p[x]]]6: if cor[y] = rubro then7: cor[p[x]] = negro Caso 18: cor[y] = negro9: cor[p[p[x]]] =rubro
10: x = p[p[x]]11: else12: if x = Dir[p[x]] then13: x = p[x] Caso 214: Rotacao_Esq(T, x)15: cor[p[x]] = negro q Caso 316: cor[p[p[x]]] = rubro17: Rotacao_Dir(T, p[p[x]])18: else19: simtrico ao anterior20: cor[root[T ]] = negro
Aula 13 p. 14
Anlise da InseroInserir um novo n na rvore: O(lgn)Restaurar propriedades
O lao se repete se somente o Caso 1 executadoCaso 2 seguido sempre do Caso 3Caso 3 resolve o problemaO nmero de vezes que o lao executado O(lgn)
Tempo total O(lg n)
Aula 13 p. 15
Remoo na rvore Rubro-NegraQual a cor do n a ser deletado? rubro?
1. Todo n rubro ou negro. Ok!2. A raiz negra. Ok!3. Toda folha negra. Ok!4. Se um n rubro, seus dois filhos so negros
No criamos dois ns rubros seguidos. Ok!5. Para cada n, todo caminho descendente de uma folha
tem o mesmo nmero de ns negros.No mudamos nenhuma altura negra. Ok!
Aula 13 p. 16
Remoo na rvore Rubro-NegraQual a cor do n a ser deletado? negro?
1. Todo n rubro ou negro. Ok!2. A raiz negra.
Se removermos a raiz seu substituto pode ser rubro3. Toda folha negra. Ok!4. Se um n rubro, seus dois filhos so negros
Podemos criar dois ns rubros seguidos.5. Para cada n, todo caminho descendente de uma folha
tem o mesmo nmero de ns negros.Podemos mudar alguma altura negra.
Aula 13 p. 17
-
Remoo na rvore Rubro-Negra1. Qual a cor do n a z ser deletado? negro2. Troque z pelo seus sucessor y3. Remove y
Idia:
1. Passar a cor de y para seu filho x. Viola a Prop. 1, poisx tem duas cores
2. Mover negro extra para cimaat encontrar um rubro ou at atingir a raizfazer rotaes quando necessriasx sempre aponta para n duplo negro
Complexidade: O(lgn)Aula 13 p. 18
rvore Binria de Buscarvore Binria de BuscaOperaes Busca e Sucessorormalsize Operaes na rvore Binria de Buscarvore Rubro-NegraExemplo de um rvore RNLemaLemaRotaesRotao_Esq($T,x$)Incluso na rvore Rubro-NegraIncluso na rvore Rubro-NegraIncluso na rvore Rubro-NegraIncluso na rvore Rubro-NegraIncluso na rvore Rubro-Negra
Insere_RN($T,x$)Anlise da InseroRemoo na rvore Rubro-NegraRemoo na rvore Rubro-NegraRemoo na rvore Rubro-Negra