Você está na página 1de 31

rvores Binrias Balanceadas

Elisa Maria Pivetta Cantarelli elisa@fw.uri.br

rvores Balanceadas
Uma rvore dita balanceada quando as suas subrvores esquerda e direita possuem a mesma altura. Todos os links vazios esto no mesmo nvel, ou seja, que a rvore est completa. A rvore que no est balanceada, define-se como degenerada
d b
b

c d e a
(c) b

f c e g

f a c e g
(b)

a
(a)

rvore binria balanceada.

rvore binria Degenerada

rvore binria Incompleta Balanceada

rvores Balanceadas
Balanceamento Esttico
O balanceamento esttico de uma rvore binria consiste em construir uma nova verso, reorganizando-a.

Balanceamento Dinmico: AVL


rvore AVL em homenagem aos matemticos russos (AdelsonVelskii e Landism -1962) Uma rvore AVL uma rvore binria de pesquisa onde a diferena em altura entre as subrvores esquerda e direita no mximo 1 (positivo ou negativo). A essa diferena chamamos de fator de balanceamento de n (FatBal (n)). Essa informao dever constar em cada n de uma rvore balanceada

rvores AVL
Assim, para cada nodo podemos definir um fator de balanceamento (FB), que vem a ser um nmero inteiro igual a
FB(nodo p) = altura(subrvore direita p) altura(subrvore esquerda p)
O Fator de uma folha sempre Zero (0)

rvores Balanceadas
Exemplos de rvores AVL e rvores no-AVL. Os nmeros nos nodos representam o FB para cada nodo. Para uma rvore ser AVL os fatores de balano devem ser necessariamente -1, 0, ou 1. Exemplos de rvores AVL

Exemplos de rvores no AVL

BALANCEAMENTO DE RVORES AVL


Inicialmente inserimos um novo nodo na rvore. A insero deste novo nodo pode ou no violar a propriedade de balanceamento. Caso a insero do novo nodo no viole a propriedade de balanceamento podemos ento continuar inserindo novos nodos. Caso contrrio precisamos nos preocupar em restaurar o balano da rvore. A restaurao deste balano efetuada atravs do que denominamos ROTAES na rvore.

rvores AVL
Se quisermos manter a rvore balanceada a cada insero, devemos ter um algoritmo que ajuste os fatores de balanceamento O algoritmo corrige a estrutura atravs de movimentao dos ns, ao que chamamos de rotao.

BALANCEAMENTO DE RVORES AVL


Exemplos Vamos considerar a seguinte rvore (os nmeros ao lado dos nodos so o FB de cada nodo):

A rvore acima est balanceada, como podemos observar pelos FB de cada nodo. Os casos possveis de desbalanceamento so 2. Veremos cada um deles.

Tipo 1 - ROTAO DUPLA


Ao inserir o nmero 5 na rvore. Esta insero produziria a seguinte rvore:

O nodo 8 fica com o FB -2 e tem um filho com FB +1. Neste caso o balanceamento atingido com duas rotaes, tambm denominada ROTAO DUPLA. Primeiro rotaciona-se o nodo com FB 1 para a esquerda.

Tipo 1 - ROTAO DUPLA


A rvore fica:

A seguir rotaciona-se o nodo que tinha FB -2 na direo oposta (direita neste caso).

Tipo 1 - ROTAO DUPLA


A rvore fica:

Os FB nos nodos voltaram a ficar dentro do esperado das rvores AVL. O caso simtrico ao explicado acima acontece com os sinais de FB trocados, ou seja, um nodo com FB +2 com um filho com FB -1. Tambm utilizariamos uma rotao dupla, mas nos sentidos contrrios, ou seja, o nodo com FB -1 seria rotacionado para a direita e o nodo com FB +2 seria rotacionado para a esquerda.

Tipo 2 - ROTAO Simples


Suponha que queremos inserir o nodo 3 na rvore inicial. A insero produziria a seguinte rvore:

A insero do nodo 3 produziu um desbalano no nodo 8 verificado pelo FB -2 neste nodo. Neste caso, como os sinais dos FB so os mesmos (nodo 8 com FB -2 e nodo 4 com FB -1) significa que precisamos fazer apenas uma ROTAO SIMPLES direita no nodo com FB -2. No caso simtrico (nodo com FB 2) faramos uma rotao simples esquerda.

Tipo 2 - ROTAO Simples


Aps a rotao simples a rvore ficaria:

Observe que os FB esto dentro do esperado para mantermos a propriedade de balanceamento de rvores AVL.

A descrio do algoritmo em pseudo-cdigo para construo de uma rvore AVL:


1. Insira o novo nodo normalmente (ou seja, da mesma maneira que inserimos numa ABB); 2. Iniciando com o nodo pai do nodo recm-inserido, teste se a propriedade AVL violada neste nodo, ou seja, teste se o FB deste nodo maior do que abs(1). Temos aqui 2 possibilidades: 2.1 A condio AVL foi violada
2.1.1 Execute as operaes de rotao conforme for o caso (Tipo 1 ou Tipo 2) 2.1.2 Volte ao passo 1

2.2 A condio AVL no foi violada.


Se o nodo recm-testado no tem pai, ou seja, o nodo raiz da rvore, volte para inserir novo nodo (Passo 1)

Dicas: rvores AVL


1. Para identificarmos quando uma rotao simples ou dupla observamos os sinais de FatBal: se o sinal for igual, a rotao simples. se o sinal for diferente a rotao dupla. 2. Se FB+ rotao para esquerda 3. Se FB- rotao para direita

Exerccios

Exerccio 1
Considere a insero dos seguintes valores (nesta ordem) em uma rvore AVL: 5,3,8,2,4,7,10,1,6,9,11. Para essas inseres nenhuma rotao necessria. Desenhe a rvore AVL resultante e determine o fator de balanceamento de cada n.

Exerccio 2
Construir uma rvore AVL com os seguintes dados: Inserir inicialmente 10, 20, 30 Se necessrio fazer balanceamento Inserir 25 e 27 Se necessrio fazer balanceamento

Resoluo do Exerccio 2
A insero dos 3 primeiros nmeros resulta na seguinte rvore:
10
+2

20

+1 0

30

Aps a insero do elemento 30 a rvore fica desbalanceada. O caso acima do Tipo 2. Fazemos uma rotao para a esquerda no nodo com FB 2. A rvore resultante fica:
20
0

10

30

Resoluo do Exerccio 2
O passo seguinte inserir os nodos 25 e 27. A rvore fica desbalanceada apenas aps a insero do nodo 27 Este caso do Tipo 1. O nodo 30 tem FB -2 e o seu nodo filho tem FB 1. Precisamos efetuar uma rotao dupla, ou seja, uma rotao simples esquerda do nodo 25, resultando:
20
+2

20

+2

10

30

-2

25

+1

27

10

30

-2

27

-1

25

Resoluo do Exerccio 2
seguida de uma rotao simples direita do nodo 30, resultando:
20

+1

10

27

25

30

e a rvore est balanceada.

Exerccio 3
Determinado sistema armazena registros por chaves numricas em uma rvore AVL. Nessa rvore so inseridos os seguintes valores: 20,10,5,30,25,27 e 28 nessa ordem. Apresente passo a passo como a rvore vai sendo construda. Realize as rotaes necessrias e indique qual rotao foi realizada em cada caso.

Resoluo: Exerccio 3
1) Insero das chaves 20 e 10, nessa ordem A rvore ficou pendendo para a esquerda O fator de balanceamento do n cuja chave 20 -1. O fator de uma folha sempre 0 (zero). 2) ...Continuar as inseres

20 10
(0)

(-1)

rvores Multivias (Multiway tree)

rvores Multivias
Em uma rvore binria, cada n possui um item de dado e pode ter at dois filhos. Se permitirmos o uso de mais itens de dados e filhos por n, o resultado uma rvore Multivias ou M-vias (multiway tree). Uma Estrutura Multivia com algoritmo eficiente deve considerar:
Tempo de acesso a cada n Balanceamento da rvore.

As rvores 2-3-4, so rvores multivias que podem ter at quatro filhos e trs itens de dados por n.

rvores 2-3-4
rvores 2-3-4 so interessantes por vrias razes:
So rvores balanceadas. Fceis de programar. Servem como uma introduo para rvores B.

rvores 2-3-4
A figura mostra uma pequena rvore 2-3-4. Cada n pode conter um, dois ou trs itens de dados.
50

30

60 70 80

10 20

40

55

62 64 66

75

83 86

rvores 2-3-4
Um n interno deve sempre ter um filho a mais que seus itens de dados. Um n folha, ao contrrio, no possui filhos, mas ele pode conter um, dois ou trs itens de dados. Ns vazios no so permitidos. Devido a uma rvore 2-3-4 possuir ns com at quatro filhos, ela chamada de rvore multivias de ordem 4 (multiway tree of order 4).

rvores 2-3-4
O 2, 3 e 4 no nome rvore 2-3-4 referem-se a quantos links para filhos podem potencialmente estar contidos em um dado n. Para ns internos (no folhas), trs combinaes so possveis: um n com um item de dado sempre possuir dois filhos; um n com dois itens de dados sempre possuir trs filhos; um n com trs itens de dados sempre possuir quatro filhos.
50

30

60 70 80

10 20

40

55

62 64 66

75

83 86

rvores 2-3-4

Por que uma rvore 2-3-4 no chamada de rvore 1-2-3-4?


Um n no pode ter somente um filho, como os ns na rvore binria Um n com um item de dado precisa sempre ter dois links, a menos que seja uma folha, neste caso, ele no possui links.

rvores 2-3-4
Um n com dois links chamado 2-ns, Um n com trs links chamado 3-ns Um n com quatro links chamado 4-ns
25
0 1

40 62

3-ns
2

2-ns

12

33 37

27 33

51 55 59

83

50 75 95
0 1 2 3

4-ns

30 35

55

78

100 105

rvores 2-3-4 X rvore Binria


Em uma rvore binria, todos os filhos com chaves menores que a chave do n esto enraizados no n filho esquerda, e todos os filhos com chaves maiores ou iguais a chave do n esto enraizados no n filho direita. Na rvore 2-3-4 o princpio o mesmo, mas existe algo mais:

rvores 2-3-4
todos os itens de dados na sub-rvore enraizada no filho 0, possuem valores menores do que a chave 0; todos os itens de dados na sub-rvore enraizada no filho 1, possuem valores maiores do que a chave 0, mas menores do que a chave1; todos os itens de dados na sub-rvore enraizada no filho 2, possuem valores maiores do que a chave 1, mas menores do que a chave2; todos os itens de dados na sub-rvore enraizada no filho 3, possuem valores maiores do que a chave 2. Valores duplicados geralmente no so permitidos. Deste modo ns no necessitamos nos preocupar com a comparao de chaves iguais.
A
0
N com chaves menores do que A

C
2
N com chaves entre B e C

1
N com chaves entre A e B

3
N com chaves maiores do que C

Pesquisa em rvores 2-3-4


Exemplo: Para pesquisar por um item de dado com a chave 64 na rvore da figura, voc inicia na raiz, porm no encontra o item. Por que 64 maior do que 50, voc vai para o filho 1, o qual ns representamos com 60,70 e 80. Voc no encontra o item de dado, assim voc precisa passar para o prximo filho. Aqui, devido a 64 ser maior do que 60, mas menor do que 70, voc vai novamente para o filho 1. Desta vez voc encontra o item especfico no link 62, 64 e 66.
50

30

60 70 80

10 20

40

55

62 64 66

75

83 86

Insero em rvore 2-3-4


Novos itens de dados so sempre inseridos nas folhas. Se os itens foram inseridos em um n com filhos, ento o nmero de filhos necessitar ser mudado para manter a estrutura da rvore, o que estipula que esta rvore deve ter um filho a mais do que os itens de dados em um n. O processo de insero inicia pela pesquisa do n folha apropriado. Se ns que no esto cheios so encontrados durante a pesquisa, a insero fcil. A insero pode envolver a movimentao de um ou dois itens em um n. As chaves devero estar na ordem correta aps o novo item ser inserido.

Exemplo 1: Insero em rvore 2-3-4


- Insero de um item (18) sem diviso

do n

a) Antes da insero 11 5 9 13 23 30

28 42

55 74 44 47 63 67 72 97

- O item 23 vai ser deslocado para direita para abrir espao para inserir o item 18.
b) Depois da insero 28 55

11

42

74

13

18

23

30

44

47

63

67

72

97

18 inserido

23 deslocado para direita

Exemplo 2 - Insero em rvore 2-3-4


Com Diviso de ns
As inseres tornam-se mais complicadas se um n cheio encontrado no caminho abaixo do ponto de insero. Quando isto acontece, o n precisa ser dividido (split). este processo de diviso que mantm a rvore balanceada. O tipo de rvore 2-3-4 que estamos vendo freqentemente chamada de rvore 2-3-4 topdown, por que os ns so divididos de maneira para baixo do ponto de insero.

Insero em rvore 2-3-4


Chamaremos os itens de dados a serem divididos por A, B e C.
assumimos que o n a ser dividido no o raiz, ns examinaremos a diviso da raiz depois

a) Antes da insero

62

insero do 99

29 A 15 21 47 74 87 89

83

92 B

104 C 97

n a ser dividido

112

Insero em rvore 2-3-4


a) Antes da insero 29 A 15 21 47 74 87 89 62 insero do 99 83 92 B 97 104 C 112 n a ser dividido

Um novo n vazio criado. Ele parente (sibling) do n que est sendo dividido, e colocado a sua direita;
O item de dado C movido para o novo n; O item de dado B movido para o pai do n que est sendo dividido; O item de dado A fica aonde ele est; Os dois filhos mais direita so desconectados do n que est sendo dividido e so conectados no novo n.
b) Aps a insero 62 83 fica no lugar 29 83 A 15 21 47 74 87 89 92 B 92 movido para cima 104 foi p/ direita 104 C 97 99 112 99 inserido

novo n

Exemplo 3 - Insero em rvore 2-3-4


Dividindo a raiz
Quando uma raiz cheia encontrada no inicio da pesquisa para encontrar o ponto de insero, o resultado da diviso ligeiramente mais complicado:
insero do 41

a) Antes da insero A 9 13 31 35

26

49 B

72 C 52 61

raiz a ser dividido

82

Insero em rvore 2-3-4


um novo n criado, tornandose a nova raiz, e os pais do novo n so divididos; um segundo novo n criado, tornando-se parente (sibling) do n que est sendo dividido;
9 13 a) Antes da insero insero do 41 26 A 31 35 49 B 52 72 C 61 82 raiz a ser dividido

o item de dado C movido para o novo n parente; o item de dado B movido para a nova raiz; o item de dado A deixado aonde est; os dois filhos mais a direita do n que est sendo dividido so desconectados dele e conectados no novo n do lado direito.
b) Aps a insero 49 movido p/cima 49 B 26 fica no lugar 26 A 9 13 31 35 41 52 41 inserido 61 72 movido p/ direita 72 C 82 novo n direita novo n raiz

rvores B

rvore B
So rvores de pesquisa balanceadas especialmente projetadas para a pesquisa de informao em discos magnticos e outros meios de armazenamento secundrio. Minimizam o nmero de operaes de movimentao de dados (escrita/leitura) numa pesquisa ou alterao. O grau de um n pode ser alto. Podem ser consideradas como uma generalizao natural das rvores de pesquisa binrias.

rvores B
As rvores so uma boa abordagem para dados em memria. Mas, as rvores trabalham com arquivos?
Elas trabalham, mas um tipo diferente de rvore precisa ser usado para dados externos do que para dados em memria.

A rvore apropriada um rvore mltivias, parecida com uma rvore 2-3-4, mas com muito mais itens de dados por n Ela se chama rvore B (tree-B). As rvores B foram concebidas como estrutura apropriada para armazenamento externo por R. Bayer e E. M. McCreight em 1972. rvores M-Vias permanentemente balanceadas so chamadas de rvore B.

rvores B - Um bloco por n


O acesso a disco mais eficiente quando o dado lido ou escrito em um bloco de uma s vez. Em uma rvore, a entidade que contm dados o n. Ideal: armazenar um bloco inteiro de dados em cada n da rvore. Deste modo, ler um n acessa um conjunto mximo de dados em um curto espao de tempo.

rvores B - Links
Em uma rvore, precisamos tambm armazenar os links para outros ns. Em uma rvore em memria, estas ligaes so referncias (ou ponteiros, em linguagens como Pascal e C) para os ns em outras partes da memria. Para as rvores armazenadas em um arquivo em disco, as ligaes (links) so nmeros de blocos em um arquivo.

rvores B x rvores 2-3-4


Dentro de cada n os dados so ordenados seqencialmente pela chave, como nas rvores 2-3-4. A estrutura de uma rvore B similar a de uma rvore 2-3-4, exceto que na rvore B existem mais itens de dados por n e mais links para ns filhos.

rvores B Caractersticas
A raiz tem no mnimo uma chave e dois filhos Uma folha tem no mnimo d chaves e no tem filhos Todas as folhas esto no mesmo nvel (balanceamento)

Pesquisa em rvores B
Primeiro, o bloco contendo a raiz lido. O algoritmo de pesquisa ento inicia a verificao de cada um dos registros (se ele no estiver cheio, tantos quantos o n atualmente armazena) iniciando pelo registro 0. Quando ele encontra um registro com chave maior, ele sabe que deve ir para o filho que reside entre este registro e o precedente. Este processo continua at o n correto ser encontrado. Se uma folha alcanada sem encontrar a chave especfica, a pesquisa no obteve sucesso.

Insero em rvores B
Em uma rvore B importante manter um n to cheio quanto possvel; deste modo cada acesso disco, o qual l uma entrada de um n, pode adquirir o mximo de quantidade de dados.

Construo de uma pequena rvore B


A figura (a) mostra um n raiz que j est cheio; Itens com chaves 20,40,60 e 80 j foram inseridas na rvore. Um novo item de dado com a chave 70 deve inserido, resultando na diviso de um n. A raiz est sendo dividida, dois novos ns so criados: uma nova raiz e um novo n para a direita do que est sendo dividido.

(a)

20

40

60

80

70

20

40

60

70 80

Construo de uma pequena rvore B


Na figura (b) inserimos mais dois itens: 10 e 30. Eles preenchem totalmente o filho da esquerda, tal como apresentado nas figura (c). O prximo item a ser inserido, 15, divide o filho esquerda, como visto na figura (d). Aqui o item 20 foi promovido para cima, na raiz.
10 60 (b) 20 40 70 80 30

60 (c) 10 20 30 40 70 80

15 10 15 20 30 40

20 (d) 10 15

60

30

40

70

80

Construo de uma pequena rvore B


Na fig. (e) trs itens, 75,85 e 90, so inseridos O terceiro filho dividido, causando a criao de um novo n e a promoo do item intermedirio, 80, para a raiz. O resultado disto visto na figura (f).
20 (e) 10 15 30 40 70 80 60 75 85 90 70 75 80 85 90

20 (f)

60

80

10

15

30

40

70

75

85

90

Construo de uma pequena rvore B


Novamente trs itens, 25, 35 e 50, so adicionados fig. (g) Os primeiros dois itens enchem totalmente o segundo filho E o terceiro filho divido, provocando a criao de um novo n e a promoo do item intermedirio, 35, para a raiz, como pode ser visto na figura (h).
20 (g) 60 80 25 35 50 25 30 35 40 50

10

15

30

40

70

75

85

90

20 (h)

35

60

80

10

15

25

30

40

50

70

75

85

90

Construo de uma pequena rvore B


Agora a raiz est cheia. Contudo, inseres subseqentes no necessariamente causaro a diviso do n, porque os ns so divididos somente quando uma nova insero em um n cheio efetuada, no quando um n cheio encontrado em uma pesquisa sobre a rvore. Assim, 22 e 27 so inseridos no segundo filho sem causar qualquer diviso, como apresentado na figura (j).
20 (i) 35 60 80 22 27

10

15

25

30

40

50

70

75

85

90

20 (j)

35

60

80

10

15

22

25

27

30

40

50

70

75

85 90

O prximo item a ser inserido, 32, no causa uma diviso, na realidade, ele causa duas divises. O segundo n filho, est cheio, deste modo, ele dividido, como visto na figura (l). O item 27, promovido a partir da diviso, no foi colocado no seu lugar porque a raiz est cheia. Portanto a raiz tambm precisa ser dividida, resultando no arranjo presente na figura (M).
20 (k) 35 60 80 32 22 25 27 30 32

10

15

22

25

27

30

40

50

70

75

85 90

20 (l) 10 15 22

35

60

80

27 20 27 35 60 80

25

40

50

70

75

85 90

35 (M) 20 27 60 80

10 15

22 25

30 32

40 50

70 75

85 90

Implementao em rvore B mais Eficiente


Considerar
T= ordem da rvore (ou grau) T>=2 Cada n contm no mnimo T-1 chaves e T filhos Cada n pode ter no mximo 2T-1 chaves e 2T filhos Todos os ns folhas esto no mesmo nvel.
Ex: t=2 Mx: t-1= 1 chave 2t-1= 3 chaves t= 2 filhos 2t= 4filhos

Insero:
sempre feita nas folhas Percorrer a rvore em busca da chave Verificar se o n esta cheio: se contm (2T-1) chaves Se o n estiver cheio: Dividir ao meio Colocar chave no n pai Se este tambm estiver cheio repetir o processo

Arvores B+
uma variante da rvore B Os ns internos so indexados para acesso rpido aos dados. As folhas possuem estrutura diferente da rvore B. Elas formam um conjunto de seqncia, de modo que varrer essa lista de folhas resulta nos dados obtidos na ordem ascendente. Ela um ndice implementado como uma rvore B regular mais uma lista ligada de dados.

Arvores B+
Inserir em uma folha que tenha espao, significa colocar a folha em ordem Inserir em uma folha cheia: A folha dividida, o novo n includo no conjunto de seqncias. A primeira chave do nono n copiada (no movida como na rvore B) para o ascendente. Poder exigir reorganizao no nodo ascendente Se o ascendente est cheio, ocorre mesmo processo da rvore B

Exemplo: Insero em B+

Exemplo: Remoo em B+

Você também pode gostar