• Nenhum resultado encontrado

Análise de Algoritmos

N/A
N/A
Protected

Academic year: 2022

Share "Análise de Algoritmos"

Copied!
63
0
0

Texto

(1)
(2)

• O que é

▫ Árvore de pesquisa binária

▫ Um bit a mais por nó: VERMELHO ou PRETO

• Esquema bem definido para coloração

 Nenhum caminho será 2x maior que o comprimento de qualquer outro

 Árvore balanceada (aproximadamente)

 A altura será no máximo 2 log(n+1)

(3)

• Regras para balanceamento

▫ O nó raiz é sempre preto

▫ Nós vermelhos possuem apenas filhos pretos

▫ Para cada nó, todos os caminhos do nodo até qualquer folha passa pelo mesmo número de nós pretos

(4)

6

15

3 12

13 7

23

27

25 5

2

17

16 20

1

(5)



x

 y

 

y

  

x

LEFT-ROTATE (T,x)

RIGHT-ROTATE (T,x)

(6)

LEFT-ROTATE(T,x) 1: y  x.dir;

2: x.dir  y.esq;

3: (y.esq).pai  x;

4: if x.pai = NIL then 5: T.raiz  y;

6: else

7: if x = (x.pai).esq then 8: (x.pai).esq  y;

9: else

10: (x.pai).dir  y;

11: end if 12: end if

13: y.esq  x;

14: x.pai  y;

7

11

9 18

14 19

x

(7)

LEFT-ROTATE(T,x) 1: y  x.dir;

2: x.dir  y.esq;

3: (y.esq).pai  x;

4: if x.pai = NIL then 5: T.raiz  y;

6: else

7: if x = (x.pai).esq then 8: (x.pai).esq  y;

9: else

10: (x.pai).dir  y;

11: end if 12: end if

13: y.esq  x;

14: x.pai  y;

7

11

9 18

14 19

x

y

(8)

LEFT-ROTATE(T,x) 1: y  x.dir;

2: x.dir  y.esq;

3: (y.esq).pai  x;

4: if x.pai = NIL then 5: T.raiz  y;

6: else

7: if x = (x.pai).esq then 8: (x.pai).esq  y;

9: else

10: (x.pai).dir  y;

11: end if 12: end if

13: y.esq  x;

14: x.pai  y;

7

11

9 18

14 19

x

y

(9)

LEFT-ROTATE(T,x) 1: y  x.dir;

2: x.dir  y.esq;

3: (y.esq).pai  x;

4: if x.pai = NIL then 5: T.raiz  y;

6: else

7: if x = (x.pai).esq then 8: (x.pai).esq  y;

9: else

10: (x.pai).dir  y;

11: end if 12: end if

13: y.esq  x;

14: x.pai  y;

7

11

9 18

14 19

x

y

(10)

LEFT-ROTATE(T,x) 1: y  x.dir;

2: x.dir  y.esq;

3: (y.esq).pai  x;

4: if x.pai = NIL then 5: T.raiz  y;

6: else

7: if x = (x.pai).esq then 8: (x.pai).esq  y;

9: else

10: (x.pai).dir  y;

11: end if 12: end if

13: y.esq  x;

14: x.pai  y;

7

11

18

9 14

x 19

y

(11)

LEFT-ROTATE(T,x) 1: y  x.dir;

2: x.dir  y.esq;

3: (y.esq).pai  x;

4: if x.pai = NIL then 5: T.raiz  y;

6: else

7: if x = (x.pai).esq then 8: (x.pai).esq  y;

9: else

10: (x.pai).dir  y;

11: end if 12: end if

13: y.esq  x;

14: x.pai  y;

Qual é o custo desta operação?

(12)

LEFT-ROTATE(T,x) 1: y  x.dir;

2: x.dir  y.esq;

3: (y.esq).pai  x;

4: if x.pai = NIL then 5: T.raiz  y;

6: else

7: if x = (x.pai).esq then 8: (x.pai).esq  y;

9: else

10: (x.pai).dir  y;

11: end if 12: end if

13: y.esq  x;

14: x.pai  y;

Como seria o RIGHT-ROTATE?

(13)

VP-INSERT(T,z)

1: TREE-INSERT(T,z);

2: z.cor  VERMELHO;

3: VP-INSERT-FIX(T,z);

(14)

VP-INSERT-FIX(T,z)

1: while (z.pai).cor = VERMELHO do

2: if z.pai = ((z.pai).pai).esq then 3: y  ((z.pai).pai).dir;

4: if y.cor = VERMELHO then

5: (z.pai).cor  PRETO;

6: y.cor  PRETO;

7: ((x.pai).pai).cor  VERMELHO;

8: z  (z.pai).pai;

9: else if z = (z.pai).dir then

10: z  z.pai;

11: LEFT-ROTATE(T,z);

12: (z.pai).cor  PRETO;

13: ((z.pai).pai).cor  VERMELHO;

14: RIGHT-ROTATE(T,(z.pai).pai);

15: else (igual ao “if” trocando “dir” e “esq”) 16: end if

17: (T.raiz).cor  PRETO;

(15)

VP-INSERT-FIX(T,z)

1: while (z.pai).cor = VERMELHO do

2: if z.pai = ((z.pai).pai).esq then 3: y  ((z.pai).pai).dir;

4: if y.cor = VERMELHO then

5: (z.pai).cor  PRETO;

6: y.cor  PRETO;

7: ((x.pai).pai).cor  VERMELHO;

8: z  (z.pai).pai;

9: else if z = (z.pai).dir then

10: z  z.pai;

11: LEFT-ROTATE(T,z);

12: (z.pai).cor  PRETO;

13: ((z.pai).pai).cor  VERMELHO;

14: RIGHT-ROTATE(T,(z.pai).pai);

15: else (igual ao “if” trocando “dir” e “esq”) 16: end if

17: (T.raiz).cor  PRETO;

O tio y de z é vermelho

(16)

VP-INSERT-FIX(T,z)

1: while (z.pai).cor = VERMELHO do

2: if z.pai = ((z.pai).pai).esq then 3: y  ((z.pai).pai).dir;

4: if y.cor = VERMELHO then

5: (z.pai).cor  PRETO;

6: y.cor  PRETO;

7: ((x.pai).pai).cor  VERMELHO;

8: z  (z.pai).pai;

9: else if z = (z.pai).dir then

10: z  z.pai;

11: LEFT-ROTATE(T,z);

12: (z.pai).cor  PRETO;

13: ((z.pai).pai).cor  VERMELHO;

14: RIGHT-ROTATE(T,(z.pai).pai);

15: else (igual ao “if” trocando “dir” e “esq”) 16: end if

17: (T.raiz).cor  PRETO;

O tio y de z é preto

e z é um filho da direita

(17)

VP-INSERT-FIX(T,z)

1: while (z.pai).cor = VERMELHO do

2: if z.pai = ((z.pai).pai).esq then 3: y  ((z.pai).pai).dir;

4: if y.cor = VERMELHO then

5: (z.pai).cor  PRETO;

6: y.cor  PRETO;

7: ((x.pai).pai).cor  VERMELHO;

8: z  (z.pai).pai;

9: else if z = (z.pai).dir then

10: z  z.pai;

11: LEFT-ROTATE(T,z);

12: (z.pai).cor  PRETO;

13: ((z.pai).pai).cor  VERMELHO;

14: RIGHT-ROTATE(T,(z.pai).pai);

15: else (igual ao “if” trocando “dir” e “esq”) 16: end if

17: (T.raiz).cor  PRETO;

O tio y de z é preto e z é um filho da esq.

(18)

VP-INSERT-FIX(T,z)

1: while (z.pai).cor = VERMELHO do

2: if z.pai = ((z.pai).pai).esq then 3: y  ((z.pai).pai).dir;

4: if y.cor = VERMELHO then

5: (z.pai).cor  PRETO;

6: y.cor  PRETO;

7: ((z.pai).pai).cor  VERMELHO;

8: z  (z.pai).pai;

9: else if z = (z.pai).dir then

10: z  z.pai;

11: LEFT-ROTATE(T,z);

12: (z.pai).cor  PRETO;

13: ((z.pai).pai).cor  VERMELHO;

14: RIGHT-ROTATE(T,(z.pai).pai);

15: else (igual ao “if” trocando “dir” e “esq”) 16: end if

17: (T.raiz).cor  PRETO;

(19)

4

1

5 8

7 15

2

11

14

z

(20)

4 1

5 8

7 15

2

11

14

z

(21)

4 1

5 8

7 15

2

11

14

z

y

Caso 1

o tio y de z é vermelho

(22)

4 1

5 8

7 15

2

11

14

z

y

pai de z  preto y  preto

avo de z  vermelho

(23)

4 1

5 8

7 15

2

11

14

z

y Atualiza z e y

(24)

4 1

5 8

7 15

2

11

14

z

y

Caso 2

o tio y de z é preto z é um filho da direita

(25)

4 1

5 8

7 15

2

11

14

Troca z pelo pai z

(26)

4 1

5 8

7 15

2

11

z LEFT-ROTATE será 14

aplicado em z

(27)

2 8 15 7

11

14

z

1

4

5 LEFT-ROTATE(T,z)

(28)

2 8 15 7

11

14

1

4 5

Caso 3

o tio y de z é preto z é um filho da esq.

z

y

(29)

2 8 15 7

11

14

1

4 5

z

y Pai de z  preto

(30)

2 8 15 7

11

14

1

4 5

z

y

Avô de z  vermelho

(31)

2 8 15 7

11

14

1

4 5

z

y

RIGHT-ROTATE será aplicado no avô de z

(32)

RIGHT-ROTATE(T,(z.pai).pai))

1

4 15

5 8 14

2

7

11

(33)

• É um pouco mais complexa do que a inserção

• Executa a remoção simples da árvore de pesquisa binária e resolve inconsistências

• Passos:

▫ Encontre o nó v a ser removido

▫ Remova o nó v da mesma forma que em uma árvore binária de pesquisa

▫ Ajuste os critérios da árvore rubro-negra

(34)

possibilidade z sucessor

1 vermelho vermelho

2 preto vermelho

3 preto preto

4 vermelho preto

(35)

• z é vermelho e seu sucessor também

▫ Remoção simples

1

4 5 2

7

z

s

1 5

4

7

(36)

• z é preto e seu sucessor é vermelho

9 2

4

10 14

12 20 28

8

16

z 24

s

(37)

• z é preto e seu sucessor é vermelho

▫ Remove z

2

4

10 14

12 20 28

9

16

24

(38)

• z é preto e seu sucessor é vermelho

▫ Remove z

▫ Pinta o antigo sucessor de preto

2

4

10 14

12 20 28

9

16

24

(39)

• z e seu sucessor s são pretos

• Caso 1

▫ s é preto

▫ O irmão w de s é vermelho

▫ O pai de s é preto

• Procedimento

▫ Faça uma rotação a esquerda sobre pai de s

▫ Pinte w de preto

▫ Pinte o pai de s de vermelho

▫ Remova z

(40)

• Caso 1

▫ s é preto

▫ O irmão w de s é vermelho

▫ O pai de s é preto

25 27 29 31

22 26 30

20 28

24

s w

(41)

• Rotação a esquerda sobre pai de s

25 27 29 31

22 26 30

20 28

24

s w

20 26 29 31

24 30

28

s

w

22 25 27

(42)

• Rotação a esquerda sobre pai de s

• Pinta w de preto

20 26 29 31

24 30

28

s

w

22 25 27

(43)

• Rotação a esquerda sobre pai de s

• Pinta w de preto

• Pinta o pai de s de vermelho

20 26 29 31

24 30

28

s

w

22 25 27

Agora z pode ser removido

(44)

• z e seu sucessor s são pretos

• Caso 2a

▫ s é preto

▫ O irmão w de s é preto

▫ Os filhos de w são pretos

▫ O pai de s é preto

• Procedimento

▫ Pinte w de vermelho

▫ Remova z

(45)

• Caso 2a

▫ s é preto

▫ O irmão w de s é preto

▫ Os filhos de w são pretos

▫ O pai de s é preto

25 27 29 31

22 26 30

20 28

24

s w

(46)

• Pinte w de vermelho

25 27 29 31

22 26 30

20 28

24

s w

25 27 29 31

22 26 30

20 28

24

s w

(47)

• Pinte w de vermelho

25 27 29 31

22 26 30

20 28

24

s w

Agora z pode ser removido

(48)

• z e seu sucessor s são pretos

• Caso 2b

▫ s é preto

▫ O irmão w de s é preto

▫ Os filhos de w são pretos

▫ O pai de s é vermelho

• Procedimento

▫ Pinte w de vermelho

▫ Pinte o pai de s de preto

▫ Remova z

(49)

• Caso 2b

▫ s é preto

▫ O irmão w de s é preto

▫ Os filhos de w são pretos

▫ O pai de s é vermelho

25 27 29 31

22 26 30

20 28

24

s w

(50)

• Pinte w de vermelho e o pai de s de preto

25 27 29 31

22 26 30

20 28

24

s w

25 27 29 31

22 26 30

20 28

24

s w

(51)

• Pinte w de vermelho e o pai de s de preto

25 27 29 31

22 26 30

20 28

24

s w

Agora z pode ser removido

(52)

• z e seu sucessor s são pretos

• Caso 3

▫ s é preto

▫ O irmão w de s é preto

▫ O filho esquerdo de w é vermelho e o direto preto

▫ O pai de s é vermelho ou preto

• Procedimento

▫ Trocar as cores de w com seu filho esquerdo

▫ Rotação a direita sobre w

▫ Remova z

(53)

• Caso 3

▫ s é preto

▫ O irmão w de s é preto

▫ O filho esquerdo de w é vermelho e o direto preto

▫ O pai de s é vermelho ou preto

25 27 29 31

22 26 30

20 28

24

s w

(54)

• Troca a cor de w com o filho da esquerda

25 27 29 31

22 26 30

20 28

24

s w

(55)

• Troca a cor de w com o filho da esquerda

• Rotação a direita sobre w

29 31

27 30

22 25 28

20

24

26

25 27 29 31

22 26 30

20 28

24

s w

s w

(56)

• Troca a cor de w com o filho da esquerda

• Rotação a direita sobre w

29 31

27 30

22 25 28

20

24

s w 26

Agora z pode ser removido

(57)

• z e seu sucessor s são pretos

• Caso 4

▫ s é preto

▫ O irmão w de s é preto

▫ O filho esquerdo de w é de qualquer cor

▫ O filho direito de w é vermelho

▫ O pai de s é preto

• Procedimento

▫ Rotação a esquerda sobre pai de s

▫ Pinte o pai de preto

▫ Pinte w com a cor anterior do pai

▫ Pinte o filho direito de w de preto

▫ Remova z

(58)

• Caso 4

▫ s é preto

▫ O irmão w de s é preto

▫ O filho esquerdo de w é de qualquer cor

▫ O filho direito de w é vermelho

▫ O pai de s é preto

25 27 29 31

22 26 30

20 28

24

s w

(59)

• Rotação a esquerda sobre pai de s

25 27 29 31

22 26 30

20 28

24

s w

22 25 27 26

20 31

24 30

28

s

w

29

(60)

• Rotação a esquerda sobre pai de s

• Pinte o pai de s de preto

22 25 27 26

20 31

24 30

28

s

w

29

(61)

• Rotação a esquerda sobre pai de s

• Pinte o pai (vermelho) de s de preto

• Pinte w com a cor anterior do pai de s

22 25 27 26

20 31

24 30

28

s

w

29

(62)

• Rotação a esquerda sobre pai de s

• Pinte o pai (vermelho) de s de preto

• Pinte w com a cor anterior do pai de s

• Pinte o filho direito de w de preto

22 25 27 26

20 31

24 30

28

s

w

29

Agora z pode ser removido

(63)

• z é vermelho e seu sucessor s é preto

• Similar à possibilidade 3

• Procedimento

▫ Pinte s de vermelho

▫ Proceda como na Possibilidade 3

Referências

Documentos relacionados

دروفرذر ةبرجت لثمت ةيلاتلا ةروصلا ( ةملاع عضوب ةيلاتلا ةروصلا ي  عم.. جتانلا بكرملا عونام  يئابرهكلا رايتلا هيعيبطلا هتلاح ىلع لصوي لهو.

O produto a ser ofertado pela MultiFit Gourmet será um tipo de alimentação voltada para pessoas que fazem musculação, que precisam se alimentar de maneira

variáveis “potência de UV irradiada” e pH , quando a variável [CN - ]0 está em seu nível inferior e a variável “razão molar [H2O2]:[CN - ]” estão em seu nível superior

Curvas de rarefação (Coleman) estimadas para amostragens de espécies de morcegos em três ambientes separadamente (A) e agrupados (B), no Parque Estadual da Ilha do Cardoso,

CENTROS ECORREGIONAIS: Embrapa Amazônia Ocidental; Embrapa Cerrados; Embrapa Clima Temperado; Embrapa Acre; Embrapa Amapá; Embrapa Rondônia; Embrapa Roraima; Embrapa Meio-Norte;

N EGOCIAIS EGOCIAIS atos atos administrativos negociais são todos aqueles que contêm uma administrativos negociais são todos aqueles que contêm uma declaração de

Corporate Control and Policies Page 12 UNIVERSIDAD DE PIURA UNIVERSIDAD DEL PACÍFICO UNIVERSIDAD ESAN UNIVERSIDAD NACIONAL AGRARIA LA MOLINA UNIVERSIDAD NACIONAL

Diante da necessidade de desenvolvimento de tecnologias que auxiliam na vida dos deficientes visuais, juntamente com a importância e benefícios que elas trazem