árvores balanceadas - avl

92
Árvores Balanceadas AVL Prof: Sergio Souza Costa

Upload: sergio-souza-costa

Post on 23-Jun-2015

1.740 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Árvores balanceadas - AVL

Árvores BalanceadasAVL

Prof: Sergio Souza Costa

Page 2: Árvores balanceadas - AVL

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

[email protected]

https://sites.google.com/site/profsergiocosta/home

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

http://www.slideshare.net/skosta/presentations?order=popular

Page 3: Árvores balanceadas - AVL

Introdução

● As árvores binárias de busca permitem a organização da informação com o objetivo a otimizar as buscas.

Page 4: Árvores balanceadas - AVL

Introdução

● As árvores binárias de busca permitem a organização da informação com o objetivo a otimizar as buscas.

● Ela permite o acesso mais rapido aos elementos dado que os elementos estão organizados na árvore, obedecendo uma certa propriedade.

■ Esquerda são os menores que a raiz■ Direita são os maiores que a raiz

Page 5: Árvores balanceadas - AVL

Introdução

● As Árvores binárias de busca (ABB) estudadas têm uma séria desvantagem que pode afetar o tempo necessário para recuperar um item armazenado.

Page 6: Árvores balanceadas - AVL

Introdução

Insiram os seguintes valores em uma árvore binária de busca (ABB):

1, 2, 3, 4, 5, 6, 7 4, 6, 2, 5, 1, 7, 3

O que vocês concluem com isso ?

Page 7: Árvores balanceadas - AVL

IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.

Page 8: Árvores balanceadas - AVL

IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.

Idealmente, deseja-se que a árvore esteja balanceada, para qualquer nó p da árvore.

Page 9: Árvores balanceadas - AVL

IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.

Idealmente, deseja-se que a árvore esteja balanceada, para qualquer nó p da árvore.

Como saber se a árvore está balanceada ?

Page 10: Árvores balanceadas - AVL

IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.

Idealmente, deseja-se que a árvore esteja balanceada, para qualquer nó p da árvore.

Como saber se a árvore está balanceada ?

A altura dos nós é um importante dado.

Page 11: Árvores balanceadas - AVL

AVL

● O nome AVL vem de seus criadores Adelson Velsky e Landis (1962).

● Uma árvore binária de pesquisa T é denominada AVL se:

○ Para todos nós de T, as alturas de suas duas sub-árvores diferem no máximo de uma unidade.

20

3010

40

35

20

3010

4035

Qual é AVL ? Que nó esta desbalanceado ?

a) b)

Page 12: Árvores balanceadas - AVL

AVL

● Como saber se a árvore está desbalanceada?

Page 13: Árvores balanceadas - AVL

AVL

● Como saber se a árvore está desbalanceada?○ Verificando se existe algum nodo “desregulado”.

Page 14: Árvores balanceadas - AVL

AVL

● Como saber se a árvore está desbalanceada?○ Verificando se existe algum nodo “desbalanceado”.

● Como saber se um nodo está desbalanceado ?

Page 15: Árvores balanceadas - AVL

AVL

● Como saber se a árvore está desbalanceada?○ Verificando se existe algum nodo “desbalanceado”.

● Como saber se um nodo está desbalanceado ?○ Subtraindo-se as alturas das suas sub-árvores.

Page 16: Árvores balanceadas - AVL

Fator de balanceamento

● O fator de balanceamento é dado por:○ altura (SAE) – altura(SAD)

● Ou,○ altura (SAD) – altura(SAE)

Page 17: Árvores balanceadas - AVL

Fator de balanceamento

● O fator de balanceamento é dado por:○ altura (SAE) – altura(SAD)

● Ou,○ altura (SAD) – altura(SAE)

● O fator de balanceamento de um nodo é dado pelo seu peso em relação a sua sub-árvore.

○ Um nodo pode ter um fator balanceado de 1, 0, ou -1.○ Um nodo com fator de balanceamento -2 ou 2 (diferença de

2 elementos) é considerado desbalanceado e requer um balanceamento.

Page 18: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

Coloque as alturas de cada nó

Page 19: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0

1

Coloque as alturas de cada nó

2

3

0

-1 -1

-1 -1

-1

-1

Page 20: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0

1

Coloque as alturas de cada nó

Calcule o fator de balanceamento

altura (SAE) - altura (SAD)

2

3

0

-1 -1

-1 -1

-1

-1

Page 21: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0

1

altura (SAE) - altura (SAD)

2

3

0

-1 -1

-1 -1

-1

-1

0 - 2 = -2

Page 22: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0

1

altura (SAE) - altura (SAD)

2

3 (-2)

0

-1 -1

-1 -1

-1

-1

0 - 2 = -2

Page 23: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0

1

altura (SAE) - altura (SAD)

2

3 (-2)

0

-1 -1

-1 -1

-1

-1

-1 - 1 = -2

Page 24: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0

1

altura (SAE) - altura (SAD)

2 (-2)

3 (-2)

0

-1 -1

-1 -1

-1

-1

-1 - 1 = -2

Page 25: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0 (0)

1 (1)

altura (SAE) - altura (SAD)

2 (-2)

3 (-2)

0 (0)

-1 -1

-1 -1

-1

-1

Page 26: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0 (0)

1 (1)

altura (SAE) - altura (SAD)

2 (-2)

3 (-2)

0 (0)

-1 -1

-1 -1

-1

-1

Uma árvore binária de pesquisa T é denominada AVL se:

○ Para todos nós de T, as alturas de suas duas sub-árvores diferem no máximo de uma unidade.

Page 27: Árvores balanceadas - AVL

AVL - Calculando o fator

20

3010

40

35

0 (0)

1 (1)

altura (SAE) - altura (SAD)

2 (-2)

3 (-2)

0 (0)

-1 -1

-1 -1

-1

-1

Uma árvore binária de pesquisa T é denominada AVL se:

○ Para todos nós de T, as alturas de suas duas sub-árvores diferem no máximo de uma unidade.

Page 28: Árvores balanceadas - AVL

Atividades

Insira os seguintes valores em uma árvore binária, coloque os fatores de balanceamento e diga se é ou não uma AVL e qual nó esta desbalanceado:

a) [30,15, 50, 5,10, 20]b) [ 80, 40, 100, 120, 90, 30]c) [10, 50, 4, 90, 20, 8]

Page 29: Árvores balanceadas - AVL

Como balancear ?

Page 30: Árvores balanceadas - AVL

Como balancear ?

Através de operações de rotações!!!!

Page 31: Árvores balanceadas - AVL

Rotações

Existem quatro operações de rotações:

Rotação simples à EsquerdaRotação simples à DireitaRotação Dupla à EsquerdaRotação Dupla à Direita

Page 32: Árvores balanceadas - AVL

Rotações

Existem quatro operações de rotações:

Rotação simples à EsquerdaRotação simples à DireitaRotação Dupla à EsquerdaRotação Dupla à Direita

As duplas são derivadas das simples

Page 33: Árvores balanceadas - AVL

Rotações

● Quando usar as Rotações ?○ Na inserção de um elemento○ e na remoção de um elemento

● É provado que no máximo uma rotação é suficiente para realizar o balanceamento de uma árvore quando é inserido ou removido um elemento

Page 34: Árvores balanceadas - AVL

Rotações e balanceamento

Vamos ver primeiro as operações de rotação e depois usa-las para balanceamento.

Page 35: Árvores balanceadas - AVL

Rotações

Rotação a direitaRotação a direita

Rotação a esquerda

Page 36: Árvores balanceadas - AVL

Rotação a direita

Page 37: Árvores balanceadas - AVL

Rotação a direita

30

20

10

Imagine a seguinte árvore....

Page 38: Árvores balanceadas - AVL

Rotação a direita

30

20

10

30

20

10

Imagine a seguinte árvore....

Page 39: Árvores balanceadas - AVL

Rotação a direita

30

20

10

30

20

10

Imagine a seguinte árvore....

Page 40: Árvores balanceadas - AVL

Rotação a direita

AtividadesInsiram os seguintes valores e depois rotacione para a direita a partir da raiz:

a) [40,30, 20]b) [40, 30, 20, 35]c) [40, 50, 30, 20, 35]

Page 41: Árvores balanceadas - AVL

Rotação a esquerda

Page 42: Árvores balanceadas - AVL

Rotação a esquerda

AtividadesInsiram os seguintes valores e depois rotacione para a esquerda a partir da raiz:

a)[40, 50, 60]b) [40, 50, 10, 60]c) [40, 20, 10, 50, 60, 70]

Page 43: Árvores balanceadas - AVL

Rotação dupla a esquerda

Page 44: Árvores balanceadas - AVL

Rotação dupla a esquerda

AtividadesInsiram os seguintes valores e depois rotacione dupla a esquerda a partir da raiz:

a)[20, 40, 30]b) [20, 40, 30, 50]c) [20, 10, 40, 30, 50, 12]

Page 45: Árvores balanceadas - AVL

Rotação dupla a direita

Page 46: Árvores balanceadas - AVL

Rotação dupla a direita

AtividadesInsiram os seguintes valores e depois rotacione dupla a direita a partir da raiz:

a) [40, 20, 30]b) [40, 20, 30, 50]c) [40, 20, 30, 10,50, 80]

Page 47: Árvores balanceadas - AVL

Como usar as rotações para manter uma árvore balanceada, ou seja, uma AVL ?

Page 48: Árvores balanceadas - AVL

Balanceamento

Ao inserir um novo elemento em uma árvore, pode ser que um dos seus nós ascendentes se torne desbalanceado, avô, bisavô ...

Page 49: Árvores balanceadas - AVL

Balanceamento

Algoritmo:

A cada inserção, checa-se os nós ascedentes.

Page 50: Árvores balanceadas - AVL

Balanceamento

Algoritmo:

● Aplica-se, o mesmo algoritmo de inserção da árvore binária de busca.

● A cada inserção, checa-se os nós ascedentes.

● Caso o nó esteja desbalanceado, existem quatro diferentes configurações, como veremos a seguir.○ Para cada configração, existe uma rotação indicada.

Page 51: Árvores balanceadas - AVL
Page 52: Árvores balanceadas - AVL

Exemplo

10

altura (SAE) - altura (SAD)

[10, 20, 30]

Page 53: Árvores balanceadas - AVL

Exemplo

10

20

FB: -1 - 0 = -1 OK

altura (SAE) - altura (SAD)

[10, 20, 30]

Page 54: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30]

30

Page 55: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30]

30

FB: -1 - 0 = -1 OK

Page 56: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30]

30

FB: -1 - 1 = -2 Perigo: desbalanceado

Page 57: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30]

30

FB: -1 - 1 = -2 Perigo: desbalanceado

Qual a rotação indicada neste caso ?

Page 58: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30]

30

FB: -1 - 1 = -2 Perigo: desbalanceado

Qual a rotação indicada neste caso ?

Rotação simples a esquerda.

Page 59: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30]

30

Page 60: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40]

30

40

Page 61: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

30

40

35

Page 62: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

30

40

35

FB: -1 - 1 = -2 Perigo: desbalanceado

Page 63: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

30

40

35

FB: -1 - 1 = -2 Perigo: desbalanceado

Qual a rotação indicada neste caso ?

Page 64: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

30

40

35

FB: -1 - 1 = -2 Perigo: desbalanceado

Qual a rotação indicada neste caso ?

Rotação dupla a esquerda.

Page 65: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

30

40

35

rotação direita

Page 66: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

30

35

40

Page 67: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

30

35

40

rotação esquerda

Page 68: Árvores balanceadas - AVL

Exemplo

10

20

altura (SAE) - altura (SAD)

[10, 20, 30, 40, 35]

35

3040

FB: 0 - 1 = -1 OK

continua a checagem com o no ascendente.

Page 69: Árvores balanceadas - AVL

Atividades

A partir de uma árvore AVL, insiram os seguintes valores:

a) [10, 20,15,45,67,81,91,10]b) [1, 5,80,20,67,91,8,10]c) [10,20,30, 50, 5, 15, 30]

Page 70: Árvores balanceadas - AVL

Codificação

Transformando uma árvore binária de busca em AVL ...

Page 71: Árvores balanceadas - AVL

Codificação

Transformando uma árvore binária de busca em AVL ...

baixem o seguinte código:

https://sites.google.com/site/skosta/teaching/2011-2/sif-120/arquivos/arvore_binaria.c?attredirects=0&d=1

Page 72: Árvores balanceadas - AVL

Rotações

Os algoritmos de rotação serão os primeiros a serem codificados:

● rotação a esquerda● rotação a diretia

Page 73: Árvores balanceadas - AVL

Rotação a esquerda

Page 74: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

Page 75: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

r

10

20

30

5

40

15

Page 76: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

r

10

20

30

5

40

15

Page 77: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

r

10

20

30

5

40

15

aux

Page 78: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

r

10

20

30

5

40

15

aux

Page 79: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

r

10

20

30

5

40

15

aux

Page 80: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

r

10

20

30

5

40

15

aux

Page 81: Árvores balanceadas - AVL

BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;

}

Rotação a esquerda

r

10

20

30

5

40

15

aux

Page 82: Árvores balanceadas - AVL

BTNode* rightRotation (BTNode* r) {BTNode* aux = getLeft(r);setLeft(r, getRight(aux));setRight(aux, r);return aux;

}

Rotação a esquerda

Page 83: Árvores balanceadas - AVL

Rotações duplas

// rotação dupla a direitaBTNode* rightDoubleRotation (BTNode* r) {

setLeft(r, leftRotation(getLeft(r)));return rightRotation (r);

}

// rotação dupla a esquerdaBTNode* leftDoubleRotation (BTNode* r) {

setRight(r, rightRotation(getRight(r)));

return leftRotation (r);}

Page 84: Árvores balanceadas - AVL

BTNode* balance (BTNode* r) {int fb;if (r == NULL) return NULL;fb = height (getLeft(r)) - height (getRight(r));

if (fb < -1) { if (height( getRight (getRight(r))) > height( getLeft (getRight(r))))

return leftRotation (r);else

return leftDoubleRotation (r);}else if (fb > 1) {

if (height( getLeft (getLeft(r))) > height( getRight (getLeft(r))))return rightRotation (r);

elsereturn rightDoubleRotation (r); }

return r;}

Page 85: Árvores balanceadas - AVL

Como usar o algoritmo de balanceamento ?

Page 86: Árvores balanceadas - AVL

Nas operações de inserção e remoção

// inserçãoBTNode *BSTinsert (BTNode *r, int x) { if (r == NULL) r = Node (x, NULL, NULL); else if (x < getElement(r) ) setLeft( r, BSTinsert(getLeft(r), x ) ); else setRight( r, BSTinsert(getRight(r), x ) ); return balance(r);}

Page 87: Árvores balanceadas - AVL

Qual o problema SÉRIO com este nosso algoritmo ?

Page 88: Árvores balanceadas - AVL

Qual o problema SÉRIO com este nosso algoritmo ?

A operação que calcula a altura da árvore não está eficiente.

Sua complexidade é linear, como torná-la constante ?

Page 89: Árvores balanceadas - AVL

Uma verdadeira AVL

A codificação de uma AVL necessita que o cálculo da altura seja constante, caso contrário ela será eficiente na busca porém MUITO ineficiente nas inserções e remoções.

Page 90: Árvores balanceadas - AVL

AVLtypedef struct AVL {

int e;int height;struct AVL *l;struct AVL *r;

} AVL;

int height (AVL* r) {if ( r == NULL ) return -1;else return r->height;

}

adiciona mais uma variavel a estrutura

a função altura agora tem complexidade constante

Page 91: Árvores balanceadas - AVL

AVL

Contudo, teremos atualizar a altura para cada:

● inserção● remoção● rotações