Árvores vla -...

Post on 16-Feb-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Árvores AVL

Letícia Rodrigues Bueno

2 de agosto de 2013

Relembrando: árvores binárias de busca

I Objetivo: minimizar tempo de acesso no pior caso.

I Idéia: Para cada chave, separe as restantes em maiores oumenores.

I Estrutura hierárquica com divisão binária: uma árvore binária.

3

1 6

2 4 7

5

Relembrando: árvores binárias de busca

I Objetivo: minimizar tempo de acesso no pior caso.I Idéia: Para cada chave, separe as restantes em maiores ou

menores.

I Estrutura hierárquica com divisão binária: uma árvore binária.

3

1 6

2 4 7

5

Relembrando: árvores binárias de busca

I Objetivo: minimizar tempo de acesso no pior caso.I Idéia: Para cada chave, separe as restantes em maiores ou

menores.I Estrutura hierárquica com divisão binária: uma árvore binária.

3

1 6

2 4 7

5

Relembrando: árvores binárias de busca

I Objetivo: minimizar tempo de acesso no pior caso.I Idéia: Para cada chave, separe as restantes em maiores ou

menores.I Estrutura hierárquica com divisão binária: uma árvore binária.

3

1 6

2 4 7

5

Relembrando: complexidade da busca em árvore binária

I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).

3

1 6

2 4 7

5

h

I Pior caso: maior caminho da raiz até folha = altura da árvoreI Complexidade pior caso: O(h) (como otimizar pior caso?)

Relembrando: complexidade da busca em árvore binária

I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).

3

1 6

2 4 7

5

h

I Pior caso: maior caminho da raiz até folha

= altura da árvoreI Complexidade pior caso: O(h) (como otimizar pior caso?)

Relembrando: complexidade da busca em árvore binária

I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).

3

1 6

2 4 7

5

h

I Pior caso: maior caminho da raiz até folha = altura da árvore

I Complexidade pior caso: O(h) (como otimizar pior caso?)

Relembrando: complexidade da busca em árvore binária

I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).

3

1 6

2 4 7

5

h

I Pior caso: maior caminho da raiz até folha = altura da árvoreI Complexidade pior caso: O(h)

(como otimizar pior caso?)

Relembrando: complexidade da busca em árvore binária

I Busca em árvore binária = caminho da raiz até chave desejada(ou até uma folha, caso chave não exista).

3

1 6

2 4 7

5

h

I Pior caso: maior caminho da raiz até folha = altura da árvoreI Complexidade pior caso: O(h) (como otimizar pior caso?)

Relembrando: árvore binária de busca ótima

I Árvore ótima: minimiza tempo de busca (no pior caso)

I Árvore completa, altura: h = blog nc+ 1

4

2 6

3 5 71

I complexidade temporal no pior caso: O(log n)

Relembrando: árvore binária de busca ótima

I Árvore ótima: minimiza tempo de busca (no pior caso)I Árvore completa, altura: h = blog nc+ 1

4

2 6

3 5 71

I complexidade temporal no pior caso: O(log n)

Relembrando: árvore binária de busca ótima

I Árvore ótima: minimiza tempo de busca (no pior caso)I Árvore completa, altura: h = blog nc+ 1

4

2 6

3 5 71

I complexidade temporal no pior caso: O(log n)

Relembrando: construção de árvore ótima

I após inserções, árvore binária de busca pode degenerar emuma lista

1

5

2

3

4

7

6

I tempo de busca pior caso: O(n)

Relembrando: construção de árvore ótima

I Estrutura �xa: chaves pré-determinadas.

I Dado um conjunto com n chaves, é possível construir a árvoreótima em tempo O(n3) (ou O(n2) se usarmos um algoritmomais elaborado).

I Para manter a árvore ótima, deveríamos executar o algoritmo acada inserção: impraticável!

I Podemos manter complexidade de pior caso da inserção emO(log n)?

Árvores �su�cientemente boas�

I Árvore com altura 2 log n, complexidade temporal no pior casoO(. . .)

I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso

I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.

De�nição: Árvore binária balanceada é aquela com altura O(log n)

Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?

Árvores �su�cientemente boas�

I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)

I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso

I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.

De�nição: Árvore binária balanceada é aquela com altura O(log n)

Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?

Árvores �su�cientemente boas�

I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)

I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(. . .)

I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.

De�nição: Árvore binária balanceada é aquela com altura O(log n)

Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?

Árvores �su�cientemente boas�

I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)

I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)

I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.

De�nição: Árvore binária balanceada é aquela com altura O(log n)

Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?

Árvores �su�cientemente boas�

I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)

I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)

I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.

De�nição: Árvore binária balanceada é aquela com altura O(log n)

Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?

Árvores �su�cientemente boas�

I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)

I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)

I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.

De�nição: Árvore binária balanceada é aquela com altura O(log n)

Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?

Árvores �su�cientemente boas�

I Árvore com altura 2 log n, complexidade temporal no pior casoO(log n)

I Árvore com altura c1 log n + c2, complexidade temporal no piorcaso O(log n)

I Nem toda árvore com altura O(log n) é ótima, mas acomplexidade assintótica temporal de pior caso para a busca éigual à de uma árvore ótima.

De�nição: Árvore binária balanceada é aquela com altura O(log n)

Mais fácil de construir que árvore ótima?Como garantir que uma árvore binária é balanceada?

Árvores AVL

Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita

hE hD

I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.

(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)

Árvores AVL

Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita

hE hD

I Propriedade AVL: |hE (x)− hD(x)| ≤ 1

I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.

(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)

Árvores AVL

Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita

hE hD

I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.

I Árvore AVL: todos nós regulados.

(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)

Árvores AVL

Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita

hE hD

I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.

(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)

Árvores AVL

Para cada nó x , de�na:I hE (x): altura sub-árvore à esquerdaI hD(x): altura sub-árvore à direita

hE hD

I Propriedade AVL: |hE (x)− hD(x)| ≤ 1I Nó regulado: satisfaz propriedade AVL.I Árvore AVL: todos nós regulados.

(Curiosidade: AVL = Adelson-Velskii, G. e Landis, E. M.)

Árvores AVL: exemplo

3

1 6

2 4 7

5

3

1 6

2 4

5

AVL NÃO AVL

Árvores AVL: inserção

Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável

Nossa estratégia:

1. Inserção como árvore binária comum.

2. veri�car se existem nós desregulados.

3. se existem, tornar os nós regulados.

Árvores AVL: inserção

Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável

Nossa estratégia:

1. Inserção como árvore binária comum.

2. veri�car se existem nós desregulados.

3. se existem, tornar os nós regulados.

Árvores AVL: inserção

Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável

Nossa estratégia:

1. Inserção como árvore binária comum.

2. veri�car se existem nós desregulados.

3. se existem, tornar os nós regulados.

Árvores AVL: inserção

Queremos inserir nova chave:I mantendo a regulagem de todos os nósI em tempo razoável

Nossa estratégia:

1. Inserção como árvore binária comum.

2. veri�car se existem nós desregulados.

3. se existem, tornar os nós regulados.

Árvores AVL: exemplo de inserção

Inserir chave com valor 1 na árvore abaixo.

10

6 15

1773

42

Árvores AVL: exemplo de inserção

Inserir chave com valor 1 na árvore abaixo.

10

6 15

1773

42

1

Árvores AVL: exemplo de inserção

Inserir chave com valor 1 na árvore abaixo.

10

6 15

1773

42

1

Árvores AVL: exemplo de inserção

Inserir chave com valor 1 na árvore abaixo.

10

3 15

1762

41 7

Árvores AVL: exemplo de inserção

Inserir chave com valor 5 na árvore abaixo.

10

6 15

1773

42

Árvores AVL: exemplo de inserção

Inserir chave com valor 5 na árvore abaixo.

10

6 15

1773

42

5

Árvores AVL: exemplo de inserção

Inserir chave com valor 5 na árvore abaixo.

10

6 15

1773

42

5

Árvores AVL: exemplo de inserção

Inserir chave com valor 5 na árvore abaixo.

10

4 15

1763

2 75

Árvores AVL: regulagem dos nós

Generalizando os casos anteriores.

Nó inserido: q

I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q

Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore esquerda de p

I hE (p) > hD(p)

q

p

Árvores AVL: regulagem dos nós

Generalizando os casos anteriores.Nó inserido: q

I somente sub-árvores que contém q aumentaram altura

I os nós que �caram desregulados são todos ancestrais de q

Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore esquerda de p

I hE (p) > hD(p)

q

p

Árvores AVL: regulagem dos nós

Generalizando os casos anteriores.Nó inserido: q

I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q

Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore esquerda de p

I hE (p) > hD(p)

q

p

Árvores AVL: regulagem dos nós

Generalizando os casos anteriores.Nó inserido: q

I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q

Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore esquerda de p

I hE (p) > hD(p)

q

p

Árvores AVL: regulagem dos nós

Generalizando os casos anteriores.Nó inserido: q

I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q

Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore esquerda de p

I hE (p) > hD(p)

q

p

Árvores AVL: regulagem dos nós

Generalizando os casos anteriores.Nó inserido: q

I somente sub-árvores que contém q aumentaram alturaI os nós que �caram desregulados são todos ancestrais de q

Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore esquerda de p

I hE (p) > hD(p)

q

p

Árvores AVL: regulagem dos nós

I hE (p) > hD(p)

I .

q

p

Árvores AVL: regulagem dos nós

I hE (p) > hD(p)

I .

p

u

Árvores AVL: regulagem dos nós

I hE (p) > hD(p)

I Se hE (u) > hD(u)

p

T1

T2

T3

u

Árvores AVL: regulagem dos nós

I hE (p) > hD(p)

I Se hE (u) > hD(u)

u

T3T2T1

p

Rotação à direita

Árvores AVL: regulagem dos nós

I hE (p) > hD(p)

I Se hE (u) < hD(u)

p

u

Árvores AVL: regulagem dos nós

I hE (p) > hD(p)

I Se hE (u) < hD(u)

p

u

q

T1

T2 T3

T4

Árvores AVL: regulagem dos nós

I hE (p) > hD(p)

I Se hE (u) < hD(u)

q

u p

T1 T2 T3 T4

Rotação dupla à direita

Árvores AVL: exemplo de inserção

E se o nó inserido estiver à direita do nó desregulado?

Inserir 20 na árvore abaixo:

10

6 15

1773

42

Árvores AVL: exemplo de inserção

E se o nó inserido estiver à direita do nó desregulado?Inserir 20 na árvore abaixo:

10

6 15

1773

42 20

Árvores AVL: exemplo de inserção

E se o nó inserido estiver à direita do nó desregulado?Inserir 20 na árvore abaixo:

10

6 15

1773

42 20

Árvores AVL: exemplo de inserção

E se o nó inserido estiver à direita do nó desregulado?Inserir 20 na árvore abaixo:

10

6 17

2073

42

15

Árvores AVL: exemplo de inserção

Inserir 16 na árvore abaixo:

10

6 15

1773

42

Árvores AVL: exemplo de inserção

Inserir 16 na árvore abaixo:

10

6 15

1773

42 16

Árvores AVL: exemplo de inserção

Inserir 16 na árvore abaixo:

10

6 15

1773

42 16

Árvores AVL: exemplo de inserção

Inserir 16 na árvore abaixo:

10

6 16

1773

42

15

Árvores AVL: regulagem de nós

Generalizando os dois casos anteriores.Nó inserido q.Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore direita de p

I hD(p) > hE (p)

q

p

Árvores AVL: regulagem de nós

Generalizando os dois casos anteriores.Nó inserido q.Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore direita de p

I hD(p) > hE (p)

q

p

Árvores AVL: regulagem de nós

Generalizando os dois casos anteriores.Nó inserido q.Seja p o ancestral de q desregulado mais próximo de q.

I q foi inserido na sub-árvore direita de p

I hD(p) > hE (p)

q

p

Árvores AVL: regulagem dos nós

I hD(p) > hE (p)

I .

q

p

Árvores AVL: regulagem dos nós

I hD(p) > hE (p)

I .

p

u

Árvores AVL: regulagem dos nós

I hD(p) > hE (p)

I Se hE (u) < hD(u)

p

T3

T2

T1

u

Árvores AVL: regulagem dos nós

I hD(p) > hE (p)

I Se hE (u) < hD(u)

u

T1 T2 T3

p

Rotação à esquerda

Árvores AVL: regulagem dos nós

I hD(p) > hE (p)

I Se hE (u) > hD(u)

p

u

Árvores AVL: regulagem dos nós

I hD(p) > hE (p)

I Se hE (u) > hD(u)

p

u

q

T4

T3T2

T1

Árvores AVL: regulagem dos nós

I hD(p) > hE (p)

I Se hE (u) > hD(u)

q

up

T4T3T2T1

Rotação dupla à esquerda

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)

I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direita

I Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)

I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerda

I Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).

Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)

Regular p torna a árvore AVL. Por quê?

Árvores AVL: regulagem de nós

q nó inserido, p ancestral desregulado, u �lho de p na mesmasubárvore de q.Resumo dos casos:

I Caso 1: hE (p) > hD(p)I Caso 1.1: hE (u) > hD(u)⇒ rotação direitaI Caso 1.2: hE (u) < hD(u)⇒ rotação dupla direita

I Caso 2: hE (p) < hD(p)I Caso 2.1: hE (u) < hD(u)⇒ rotação esquerdaI Caso 1.2: hE (u) > hD(u)⇒ rotação dupla esquerda

Operação de rotação: O(1) (ajustar ponteiros p.esq, p.dir , u.esq,u.dir).Encontrar p: O(log n) (caminhar de q na direção da raiz)Regular p torna a árvore AVL. Por quê?

Árvores AVL: algoritmo para inserção

InsereAVL(no, chave)

if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)

elseno ↑ .ptesq = NovoNó(chave)

else {chave > no ↑ .chave}. . .

Árvores AVL: algoritmo para inserção

InsereAVL(no, chave)if chave < no ↑ .chave then

if no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)

elseno ↑ .ptesq = NovoNó(chave)

else {chave > no ↑ .chave}. . .

Árvores AVL: algoritmo para inserção

InsereAVL(no, chave)if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)

elseno ↑ .ptesq = NovoNó(chave)

else {chave > no ↑ .chave}. . .

Árvores AVL: algoritmo para inserção

InsereAVL(no, chave)if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)

elseno ↑ .ptesq = NovoNó(chave)

else {chave > no ↑ .chave}. . .

Árvores AVL: algoritmo para inserção

InsereAVL(no, chave)if chave < no ↑ .chave thenif no ↑ .ptesq 6= λ thenInsereAVL(no ↑ .ptesq, chave)if hE (no) > hD(no) + 1 then {Caso 1}

u ← no ↑ .ptesqif hE (u) > hD(u) + 1 then {Caso 1.1}RotaçãoDireita(no, u)

else {Caso 1.2}v ← u ↑ .ptdirRotaçãoDuplaDireita(no, u, v)

. . .else

no ↑ .ptesq = NovoNó(chave)

Árvores AVL: Detalhes de implementação

I O cálculo de hE e hD demanda tempo O(log n).

I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas

apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço

de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se

algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.I Um novo nó tem balanço 0.

Árvores AVL: Detalhes de implementação

I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.

I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas

apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço

de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se

algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.I Um novo nó tem balanço 0.

Árvores AVL: Detalhes de implementação

I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!

I Na verdade, não preciso saber exatamente hE e hD , masapenas se um nó está desregulado e qual subárvore é a maior.

I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balançode cada nó: bal := hD − hE .

I A cada inserção, atualizo o balanço dos ancestrais de q. Sealgum balanço tornar-se −2 ou 2, faço as rotações apropriadas.

I Um novo nó tem balanço 0.

Árvores AVL: Detalhes de implementação

I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas

apenas se um nó está desregulado e qual subárvore é a maior.

I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balançode cada nó: bal := hD − hE .

I A cada inserção, atualizo o balanço dos ancestrais de q. Sealgum balanço tornar-se −2 ou 2, faço as rotações apropriadas.

I Um novo nó tem balanço 0.

Árvores AVL: Detalhes de implementação

I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas

apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço

de cada nó: bal := hD − hE .

I A cada inserção, atualizo o balanço dos ancestrais de q. Sealgum balanço tornar-se −2 ou 2, faço as rotações apropriadas.

I Um novo nó tem balanço 0.

Árvores AVL: Detalhes de implementação

I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas

apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço

de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se

algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.

I Um novo nó tem balanço 0.

Árvores AVL: Detalhes de implementação

I O cálculo de hE e hD demanda tempo O(log n).I Esse cálculo é feito uma vez para cada nó entre q e a raiz.I Número de operações: O(log n log n) excede o desejado!I Na verdade, não preciso saber exatamente hE e hD , mas

apenas se um nó está desregulado e qual subárvore é a maior.I Uso de um campo bal ∈ {−1, 0, 1} para armazenar o balanço

de cada nó: bal := hD − hE .I A cada inserção, atualizo o balanço dos ancestrais de q. Se

algum balanço tornar-se −2 ou 2, faço as rotações apropriadas.I Um novo nó tem balanço 0.

Árvores AVL: Detalhes de implementação

10

6 15

1773

42 00

000

-1 1

-1

Árvores AVL: Detalhes de implementação

10

6 15

1773

42

1

0-1

00-1

-2 1

-2

0

Árvores AVL: Detalhes de implementação

10

6 15

1773

42

1

0-1

00-1

-2 1

-2

0

Árvores AVL: Detalhes de implementação

10

3 15

1762

41 70

00-1

0 1

-1

0 0

Árvores AVL: remoção

1. faça a remoção como na árvore de busca binária: O(log n)

2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)

3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)

Total: O(log n).

Árvores AVL: remoção

1. faça a remoção como na árvore de busca binária: O(log n)

2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)

3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)

Total: O(log n).

Árvores AVL: remoção

1. faça a remoção como na árvore de busca binária: O(log n)

2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)

3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)

Total: O(log n).

Árvores AVL: remoção

1. faça a remoção como na árvore de busca binária: O(log n)

2. se outro nó ocupar o lugar do nó removido, atualize osbalanços desde o pai desse nó até a posição atual do nó:O(log n)

3. percorra o caminho desde o pai do nó removido até a raiz,fazendo as operações de rotação aprorpiadas (pode ser mais deuma): O(log n)

Total: O(log n).

Árvores AVL: remoção

10

5 17

197

4

15

20

3

13 16

12

Árvores AVL: remoção

10

5 17

197

4

15

20

3

13 16

12

Árvores AVL: remoção

10

5 17

19

4

15

20

3

13 16

12

Árvores AVL: remoção

10

4 17

195 15

20

3

13 16

12

Árvores AVL: remoção

10

4 17

195 15

20

3

13 16

12

Árvores AVL: remoção

15

10 17

1913 16

20

4

3 5 12

Conclusão

I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.

I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.

TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.

I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).

Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).

Conclusão

I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.

I Árvore binária balanceada: alternativa su�cientemente boa.

I Árvores balanceadas são muito usadas na vida real: ex.TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.

I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).

Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).

Conclusão

I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.

I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.

TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.

I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).

Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).

Conclusão

I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.

I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.

TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.

I Árvore AVL: tipo de árvore balanceada.

I Busca, inserção, remoção em árvore AVL: O(log n).

Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).

Conclusão

I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.

I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.

TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.

I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).

Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).

Conclusão

I Árvore binária de busca ótima: inserções/remoções não sãoviáveis.

I Árvore binária balanceada: alternativa su�cientemente boa.I Árvores balanceadas são muito usadas na vida real: ex.

TreeMap e TreeSet do Java.util. Em C++, Map e Set doSTL.

I Árvore AVL: tipo de árvore balanceada.I Busca, inserção, remoção em árvore AVL: O(log n).

Próxima aula: mais árvores balanceadas � Árvores vermelho-pretas(red-black trees).

Bibliogra�a Utilizada

SZWARCFITER, J. L. e MARKENZON, L. Estruturas de Dados e seus

Algoritmos, LTC, 1994.

top related