Árvore AVL

download Árvore AVL

of 36

description

Trabalho sobre Árvore AVL: Fator de Balanceamento; Estrutura de Dados; Rotações; Inserção; Remoção; Busca; Impressão.

Transcript of Árvore AVL

  • UNIVERSIDADE FEDERAL DO AMAZONAS

    FACULDADE DE TECNOLOGIA

    ENGENHARIA DA COMPUTAO

    ALGORITMO E ESTRUTURA DE DADOS II

    RVORE AVL

    Manaus AM

    2014

  • 1

    AMANDA PGO DE PAULA - 21354614

    JOELINE DUTRA DA SILVA - 21353194

    REBECA NUNES RODRIGUES - 21350689

    RVORE AVL

    Manaus AM

    2014

    Esse trabalho foi solicitado

    como forma de obteno de

    nota parcial para a disciplina

    Algoritmo e Estrutura de Dados

    II, ministrado pelo Prof. Edson

    Nascimento.

  • 2

    SUMRIO

    NDICE DE ILUSTRAES ........................................................................................ 3

    INTRODUO ............................................................................................................ 5

    1. O QUE UMA RVORE AVL ................................................................................. 6

    2. FATOR DE BALANCEAMENTO ............................................................................. 7

    3. ESTRUTURA DE DADOS ....................................................................................... 9

    4. ROTAES .......................................................................................................... 11

    4.1. Rotao simples para a direita ........................................................................ 11

    4.1.1. Como funciona .......................................................................................... 11

    4.1.2. Passo a passo .......................................................................................... 12

    4.2. Rotao simples para a esquerda ................................................................... 14

    4.2.1. Como funciona .......................................................................................... 14

    4.2.2. Passo a passo .......................................................................................... 15

    4.3. Rotao dupla direita-esquerda ...................................................................... 17

    4.3.1. Como funciona .......................................................................................... 17

    4.3.2. Passo a passo .......................................................................................... 18

    4.4. Rotao dupla esquerda-direita ...................................................................... 21

    4.3.1. Como funciona .......................................................................................... 21

    4.3.2. Passo a passo .......................................................................................... 22

    5. BUSCA EM UMA RVORE AVL ........................................................................... 26

    6. INSERO EM UMA RVORE AVL .................................................................... 27

    7. REMOO EM UMA RVORE AVL ..................................................................... 29

    8. IMPRESSO EM UMA RVORE AVL .................................................................. 30

    8.1. Imprimir todas as chaves ................................................................................ 30

    8.2. Imprimir em ordem crescente.......................................................................... 30

    8.3. Imprimir em ordem decrescente ...................................................................... 31

    CONCLUSO ............................................................................................................ 32

    REFERNCIAS ......................................................................................................... 33

  • 3

    NDICE DE ILUSTRAES

    Figura 1: rvore AVL com lado esquerdo maior.......................................................... 7

    Figura 2: rvore AVL com lado direito maior. .............................................................. 7

    Figura 3: rvores AVL desbalanceadas. ..................................................................... 8

    Figura 4: Insero em AVL e FB aps a insero. .................................................... 11

    Figura 5: Rotao simples para direita na AVL. ........................................................ 12

    Figura 6: Passo 1 da rotao para direita. ................................................................ 12

    Figura 7: Passo 2 da rotao para direita. ................................................................ 12

    Figura 8: Passo 3 da rotao para direita. ................................................................ 13

    Figura 9: Passo 4 da rotao para direita. ................................................................ 13

    Figura 10: Antes e depois da rotao para direita. .................................................... 14

    Figura 11: Insero em AVL e FB. ............................................................................ 14

    Figura 12: Rotao simples para esquerda na AVL. ................................................. 15

    Figura 13: Passo 1 da rotao para esquerda. ......................................................... 15

    Figura 14: Passo 2 da rotao para esquerda. ......................................................... 15

    Figura 15: Passo 3 da rotao para esquerda. ......................................................... 16

    Figura 16: Passo 4 da rotao para esquerda. ......................................................... 16

    Figura 17: Antes e depois da rotao para esquerda. ............................................... 17

    Figura 18: Insero em AVL e FB. ............................................................................ 17

    Figura 19: Primeira parte da rotao dupla Direita-Esquerda - Rotao esquerda.

    .................................................................................................................................. 18

    Figura 20: Segunda parte da rotao dupla Direita-Esquerda - Rotao direita .... 18

    Figura 21: Passo 1 da rotao Direita-Esquerda. ...................................................... 18

    Figura 22: Passo 2 da rotao Direita-Esquerda. ...................................................... 19

    Figura 23: Passo 3 da rotao Direita-Esquerda. ...................................................... 19

    Figura 24: Passo 4 da rotao Direita-Esquerda. ...................................................... 19

    Figura 25: Passo 5 da rotao Direita-Esquerda. ...................................................... 20

    Figura 26: Passo 6 da rotao Direita-Esquerda. ...................................................... 20

    Figura 27: Antes e depois da rotao dupla Direita-Esquerda. ................................. 21

    Figura 28: Insero em AVL e FB. ............................................................................ 21

    Figura 29: Primeira parte da rotao dupla Esquerda-Direita - Rotao direita. .... 22

  • 4

    Figura 30: Segunda parte da rotao dupla Esquerda-Direita - Rotao esquerda.

    .................................................................................................................................. 22

    Figura 31: Passo 1 da rotao Esquerda-Direita. ...................................................... 22

    Figura 32: Passo 2 da rotao Esquerda-Direita. ...................................................... 23

    Figura 33: Passo 3 da rotao Esquerda-Direita. ...................................................... 23

    Figura 34: Passo 4 da rotao Esquerda-Direita. ...................................................... 23

    Figura 35: Passo 5 da rotao Esquerda-Direita. ...................................................... 24

    Figura 36: Passo 6 da rotao Esquerda-Direita. ...................................................... 24

    Figura 37: Antes e depois da rotao dupla Esquerda-Direita. ................................. 25

  • 5

    INTRODUO

    Eficincia algo que todos procuram em algoritmos, porm no algo fcil de

    obter. s vezes, um cdigo eficiente para busca pode ter um tempo muito alto na

    hora de remover um item. A rvore binria de busca (ABB) eficiente na busca, mas

    conforme dados vo sendo inseridos e/ou removidos, seu sistema de busca acaba

    no sendo to eficiente quanto em uma rvore binria considerada equilibrada.

    Uma rvore equilibrada tem o tamanho do lado esquerdo e lado direito, a

    partir de sua raiz, muito parecidos. Para que a ABB fique equilibrada, necessrio

    um balanceamento esttico: criar uma nova rvore e inserir os dados da rvore

    desequilibrada e ento apaga-la. Todo esse processo custa muito tempo.

    A rvore de Adelson-Velsky e Landis (AVL) prope uma mudana s rvores

    estticas. Elas so rvores dinmicas, ou seja, o seu balanceamento (a busca por

    seu equilibrio) feito dentro da rvore aps a insero ou remoo de dados.

  • 6

    1. O QUE UMA RVORE AVL

    Os matemticos soviticos Georgy Adelson-Velsky e Evgenii Landis

    publicaram em Algoritmos para organizao de informao, em 1962, a proposta

    de uma rvore que fosse balanceada dinamicamente.

    Essa rvore, conforme dados fossem inseridos e removidos, iria se balancear

    automaticamente. Com isso, a rvore sempre teria uma complexidade baixa.

    O fator principal da AVL o balanceamento, que traz equilbrio a rvore. Se

    ela est maior para um lado do que para o outro, dependendo de seu tipo, pode no

    estar em equilbrio. O balanceamento feito por rotaes, que podem ser simples

    ou duplas, para a direita ou para a esquerda.

    A complexidade da rvore AVL, em notao O, :

    Mdia Pior Caso

    Espao n n

    Busca Log n Log n

    Insero Log n Log n

    Remoo Log n Log n

    Tabela 1: Complexidade da AVL em notao O.

  • 7

    2. FATOR DE BALANCEAMENTO

    O fator de balanceamento o que o computador utiliza para verificar o nvel de

    equilbrio da rvore AVL. Enquanto para ns algo visual, a mquina apenas

    processa dados, logo o fator de balanceamento se torna necessrio.

    Para ser considerada uma rvore AVL equilibrada, o fator de balanceamento tem

    que ser 1, 0 ou -1. Ao inserir um dado, ele se torna uma folha, cujo fator de

    balanceamento sempre 0.

    Para calcular o fator de balanceamento, necessrio saber a altura da sub-

    rvore esquerda (sae) e da sub-rvore direita (sad). O fator pode ser calculado de

    duas maneiras:

    FB = h(sad)-h(sae)

    Figura 1: rvore AVL com lado esquerdo maior.

    FB = h(sae)-h(sad)

    0

    -1

    +1

    0

    Figura 2: rvore AVL com lado direito maior.

  • 8

    Uma rvore AVL desequilibrada, ou desbalanceada, ir ter o fator de

    balanceamento menor que -1 ou maior que 1, como nos exemplos abaixo:

    0

    +2

    +2

    -1

    0

    -2

    -4

    -2

    0

    -1

    0

    Figura 3: rvores AVL desbalanceadas.

  • 9

    3. ESTRUTURA DE DADOS

    A estrutura de uma arvore AVL bem semelhante a estrutura de uma arvore

    binria de busca. As diferenas ficam por conta das informaes que contribuiro

    para que a arvore passe por balenceamento. Assim, um n de uma AVL pode ser:

    typedef struct no {

    int chave;

    int fb;

    struct no *Pai; //Opcional

    struct no *FilhoEsquerdo;

    struct no*FilhoDireito;

    } no;

    Onde fb representa a varivel que armazena o valor do fator de

    balanceamento do n.

    Outra forma de implementar esta estrutura :

    typedef struct arvore{

    int info;

    struct arvore *dir, *esq;

    int altura; //Altura mxima entre a altura das sub-rvores esquerda e

    direita

    }AVL;

  • 10

    A altura da maior das sub-rvores declarada na estrutura, de forma que o

    fator de balanceamento calculado a partir dessas informaes e no precisa ser

    constantemente atualizado dentro da prpria estrutura.

  • 11

    4. ROTAES

    Rotaes so as operaes que permitem o rebalanceamento das rvores

    AVL. As rotaes alteram a posio dos ns envolvidos em seu processo. Existem

    quatro tipos de rotao:

    Rotao simples direita

    Rotao simples esquerda

    Rotao dupla esquerda ou rotao direita-esquerda

    Rotao dupla direita ou rotao esquerda-direita

    4.1. Rotao simples para a direita

    4.1.1. Como funciona

    Abaixo se percebe uma situao em que uma rvore balanceada recebe um

    novo n. Ocorre desbalanceamento para o n C cujo fator de balanceamento passa

    de -1 para -2, sendo necessrio uma rotao.

    Sabe-se que a rotao deve ser para a direita, pois o ramo mais pesado da

    rvore o esquerdo como indica o sinal negativo do FB de C.

    Figura 4: Insero em AVL e FB aps a insero.

    Insere a

    a

    c

    b

    FB(a)=0 FB(b)=-1 FB(c)=-2

    c

    b

  • 12

    Balanceando:

    Figura 5: Rotao simples para direita na AVL.

    A rotao torna B o pai de A e C e balanceia a rvore.

    4.1.2. Passo a passo

    Endereos de B e C so guardados em

    variveis auxiliares. Note que os filhos esquerdos de B

    e C apontam para NULO.

    O filho esquerdo de C passa a receber o filho

    direito de B.

    c a

    b

    a

    c

    b

    Rotaciona FB(a)=0 FB(c)=0 FB(b)=0

    a

    c

    b

    AuxC

    AuxB

    a

    c b

    AuxC

    AuxB

    Figura 6: Passo 1 da rotao para direita.

    Figura 7: Passo 2 da rotao para direita.

  • 13

    O filho direito de B passa a ser C.

    O AuxC que indica incio da rvore

    aponta para B.

    B agora raiz.

    Em linhas gerais, a partir do exemplo tem-se o pseudocdigo:

    Ap = P; //Pai guardado em varivel que indica raiz da rvore

    Af = Ap->FilhoEsquerdo; //(F) Filho Esquerdo guardado em varivel auxiliar

    Ap->FilhoEsquerdo = Af->FilhoDireito;

    Af->FilhoDireito = Ap; //Pai torna-se filho

    a

    c b

    AuxC

    AuxB

    a c

    b

    AuxC AuxB

    Figura 8: Passo 3 da rotao para direita.

    Figura 9: Passo 4 da rotao para direita.

  • 14

    Ap = Af; //Filho torna-se raiz da rvore

    Figura 10: Antes e depois da rotao para direita.

    4.2. Rotao simples para a esquerda

    4.2.1. Como funciona

    Assim como no exemplo para Rotao simples, na imagem abaixo ocorre o

    desbalanceamento da rvore aps a insero de um elemento.

    Neste caso a rotao deve ser para a esquerda, pois o ramo mais pesado da

    rvore o direito como indica o sinal positivo do FB de A.

    Figura 11: Insero em AVL e FB.

    a

    b

    Insere c

    c

    a

    b

    FB(c)=0 FB(b)=+1 FB(a)=+2

    P

    F

    P

    F

  • 15

    Balanceando:

    Figura 12: Rotao simples para esquerda na AVL.

    A rvore fica balanceada com a rotao.

    4.2.2. Passo a passo

    O primeiro passo o mesmo do da rotao para a

    direita: endereos de B e C so guardados em variveis

    auxiliares.

    O filho direito de A passa a receber o filho

    esquerdo de B.

    c a

    b

    c

    a

    b

    Rotaciona

    FB(a)=0 FB(c)=0 FB(b)=0

    c

    a

    b

    AuxB

    AuxA

    c

    a b

    AuxB AuxA

    Figura 13: Passo 1 da rotao para esquerda.

    Figura 14: Passo 2 da rotao para esquerda.

  • 16

    O filho esquerdo de B passa a ser A.

    O AuxA que indica incio da rvore aponta

    para B.

    B agora raiz.

    O pseudocdigo para rotao esquerda ento:

    Ap = P;

    Af = Ap->FilhoDireito; //(F)

    Ap->FilhoDireito= Af->FilhoEsquerdo;

    Af->FilhoEsquerdo = Ap;

    Ap = Af;

    c

    a b

    AuxB AuxA

    c a

    b

    AuxB AuxA

    Figura 15: Passo 3 da rotao para esquerda.

    Figura 16: Passo 4 da rotao para esquerda.

  • 17

    Figura 17: Antes e depois da rotao para esquerda.

    4.3. Rotao dupla direita-esquerda

    4.3.1. Como funciona

    A insero de B desbalanceia a rvore tornando o ramo esquerdo mais

    pesado.

    Desta vez, a rotao da sub-rvore(filho) deve ser esquerda. Abaixo, pode-

    se ver que em relao a A, o ramo direito pesa mais. A rotao seguinte, aplicada

    rvore (pai), deve ser direita.

    Figura 18: Insero em AVL e FB.

    O primeiro passo do balanceamento a rotao esquerda da sub-rvore:

    Insere b

    FB(b)=0 FB(a)=+1 FB(c)=-2

    c

    a

    b

    c

    a

    P

    F

    P

    F

  • 18

    Figura 19: Primeira parte da rotao dupla Direita-Esquerda - Rotao esquerda.

    Tem-se ento uma rvore como a vista em rotao para a direita:

    Figura 20: Segunda parte da rotao dupla Direita-Esquerda - Rotao direita

    A rvore est ento balanceada com B por raiz.

    4.3.2. Passo a passo

    Variveis guardam os endereos de C

    (pai), A (filho) e B (neto).

    c a

    b Rotao para a direita

    FB(a)=0 FB(c)=0 FB(b)=0

    a

    c

    b

    FB(c)=0 FB(b)=-1 FB(a)=-2

    b

    a

    a

    b

    Resultando Rotao para a esquerda

    a

    c

    b

    b

    c

    a

    AuxC

    AuxA

    AuxB

    Figura 21: Passo 1 da rotao Direita-Esquerda.

  • 19

    Filho direito de A aponta para filho

    esquerdo de B.

    Filho direito de B aponta para A.

    Filho direito de C aponta para

    filho esquerdo de B.

    b

    c

    a

    AuxC

    AuxA

    AuxB

    b

    c

    a

    AuxC

    AuxA

    AuxB

    b

    c

    a

    AuxC AuxA AuxB

    Figura 22: Passo 2 da rotao Direita-Esquerda.

    Figura 23: Passo 3 da rotao Direita-Esquerda.

    Figura 24: Passo 4 da rotao Direita-Esquerda.

  • 20

    Filho esquerdo de B passa a

    ser C.

    O AuxA que indica incio da rvore

    aponta para B.

    B agora raiz.

    Pseudocdigo:

    Ap = P;

    Af = Ap->FilhoEsquerdo; //(F)

    An = Af->FilhoDireito; //(N)

    Af->FilhoDireito = An->FilhoEsquerdo;

    An->FilhoEsquerdo = Af;

    Ap->FilhoEsquerdo = An->FilhoDireito;

    An->FilhoDireito = Ap;

    b

    c

    a

    AuxC AuxA

    AuxB

    b

    c a

    AuxC

    AuxA AuxB

    Figura 25: Passo 5 da rotao Direita-Esquerda.

    Figura 26: Passo 6 da rotao Direita-Esquerda.

  • 21

    Ap = An;

    Figura 27: Antes e depois da rotao dupla Direita-Esquerda.

    4.4. Rotao dupla esquerda-direita

    4.3.1. Como funciona

    A insero de B desbalanceia a rvore tornando o ramo direito mais pesado.

    Repare que o fator de balanceamento da rvore tem sinal oposto ao da sub-

    rvore (filho), isto indica rotao dupla.

    A rotao dupla trata-se de duas rotaes seguidas de sentido oposto. A

    primeira rotao aplicada sub-rvore e a segunda rvore.

    A rotao da sub-rvore(filho) deve ser direita. No exemplo a seguir, pode-

    se ver que em relao a C, o ramo esquerdo pesa mais.

    A rotao seguinte, aplicada rvore, deve ser esquerda.

    Figura 28: Insero em AVL e FB.

    a

    c

    Insere b

    b

    a

    c

    FB(b)=0 FB(c)=-1 FB(a)=+2

    N

    P

    F

    N

    P F

  • 22

    O primeiro passo do balanceamento a rotao direita da sub-rvore:

    Figura 29: Primeira parte da rotao dupla Esquerda-Direita - Rotao direita.

    Tem-se ento uma rvore como a vista em rotao para esquerda:

    Figura 30: Segunda parte da rotao dupla Esquerda-Direita - Rotao esquerda.

    A rvore est ento balanceada com B por raiz.

    4.3.2. Passo a passo

    Variveis guardam os endereos de A

    (pai), C (filho) e B (neto).

    c a

    b

    c

    a

    b

    Rotao para

    esquerda

    FB(a)=0 FB(c)=0 FB(b)=0

    FB(c)=0 FB(b)=+1 FB(a)=+2

    c

    b

    b

    c

    Resultando

    c

    a

    b Rotao para a direita

    b

    a

    c

    AuxC AuxA

    AuxB

    Figura 31: Passo 1 da rotao Esquerda-Direita.

  • 23

    Filho esquerdo de C aponta para filho

    direito de B.

    Filho direito de B aponta para C.

    Filho direito de A aponta para filho

    esquerdo de B.

    b

    a

    c

    AuxC AuxA

    AuxB

    b

    a

    c

    AuxC AuxA

    AuxB

    b

    a

    c

    AuxC

    AuxA

    AuxB

    Figura 32: Passo 2 da rotao Esquerda-Direita.

    Figura 33: Passo 3 da rotao Esquerda-Direita.

    Figura 34: Passo 4 da rotao Esquerda-Direita.

  • 24

    Filho esquerdo de B passa a ser A.

    O AuxA que indica incio da rvore

    aponta para B.

    B agora raiz.

    Pseudocdigo:

    Ap = P;

    Af = Ap->FilhoDireito; (F)

    An = Af->FilhoEsquerdo; (N)

    Af->FilhoEsquerdo = An->FilhoDireito;

    An->FilhoDireito = Af;

    Ap->FilhoDireito = An->FilhoEsquerdo;

    An->FilhoEsquerdo = Ap;

    b

    a c

    AuxC

    AuxA

    AuxB

    b

    a c

    AuxC

    AuxA

    AuxB

    Figura 35: Passo 5 da rotao Esquerda-Direita.

    Figura 36: Passo 6 da rotao Esquerda-Direita.

  • 25

    Ap = An;

    Figura 37: Antes e depois da rotao dupla Esquerda-Direita.

    N

    P

    F

    N

    P F

  • 26

    5. BUSCA EM UMA RVORE AVL

    A Busca em uma AVL ocorre tal qual em uma rvore Binria de Busca. A

    razo disto que a busca no depender da Altura da rvore. Uma rvore binria de

    busca T uma rvore de deciso, onde a pergunta feita ao n v se a chave k

    menor, igual ou maior que a chave armazenada v. O pseudocdigo ficaria como:

    Algoritmo BuscaArvore (k,v):

    Entrada: Uma chave de busca k e um n v de uma arvore binria de busca T.

    Sada: Um n w da subarvore T(v) da raiz T em v, tal que w um n interno

    que armazena k ou w um n externo encontrado na travessia InOrder de T(v)

    depois de todos os ns internos com chaves menores que k e antes de todos os ns

    internos com chaves maiores que k.

    IF v um n externo ento

    Retorne v

    IF k = chave (v) ento

    Retorne v

    Seno, se k chave (v)}

    Retorne BuscaArvore (k, T.FilhoDireito (v))

  • 27

    6. INSERO EM UMA RVORE AVL

    Insero em uma rvore AVL deve ser dada pela insero do nodo seguida

    de uma verificao na propriedade do fator de balanceamento. Caso no obedea a

    essa propriedade, deve-se fazer uma rotao conveniente.

    Suponha que uma rvore T AVL e que um novo n X seja inserido em T

    causando um desbalanceamento na rvore. A fim de mantermos a rvore T como

    AVL, precisamos de um rebalanceamento dos ns. Este rebalanceamento

    realizado atravs de rotaes no primeiro ancestral de X cujo fator de

    balanceamento torna-se 2. Seja A o primeiro ancestral de X cujo fator de

    balanceamento torna-se 2 aps a incluso de um novo elemento.

    Rotao (LL): O novo n X inserido na sub-rvore da esquerda do filho

    esquerdo de A;

    Rotao (LR): X inserido na sub-rvore da direita do filho esquerdo de A;

    Rotao (RR): X inserido na sub-rvore da direita do filho direito de A;

    Rotao (RL): X inserido na sub-rvore da esquerda do filho direito de A.

    Para inserir um n X em uma rvore AVL, basta os seguintes passos:

    1. Inserir X na rvore AVL usando o mesmo algoritmo de insero de um n em

    uma rvore de busca binria. Recursivamente, empilhar cada n que

    visitado a partir do n raiz at X, exceto o prprio X;

    2. Verificar se a pilha est vazia:

    Se sim, o algoritmo termina.

    Seno, seguir para o passo (3).

    3. Desempilhar um n e verificar se a diferena de altura entre a sub-rvore da

    esquerda e da direita desse n maior que 1.

    Se sim, voltar para o passo (2).

  • 28

    Seno, ser necessrio rotacionar os ns. Depois de realizada a rotao,

    o algoritmo termina.

    Nota-se que a operao de incluso pode ser realizada em tempo O(lg(n)).

    Aps as rotaes, a rvore possui a mesma altura que antes da incluso do novo

    elemento, logo os fatores de balanceamento dos elementos que no esto

    envolvidos nas rotaes no mudam.

  • 29

    7. REMOO EM UMA RVORE AVL

    A remoo deve ser dada por uma rotao em torno do n a ser removido, a

    fim de torn-lo folha para que ento possa ser removido. Em alguns casos, aps a

    remoo so necessrias rotaes para ajustar o fator de balanceamento.

    Para remover um n s de uma rvore AVL, basta seguir os seguintes passos:

    1. Remover X da rvore AVL usando o mesmo algoritmo de remoo de um n

    em uma rvore de busca binria. Recursivamente, empilhar cada n que

    visitado a partir do n raiz at o n X, incluindo-o;

    2. Verificar se a pilha est vazia

    Se sim, o algoritmo termina.

    Seno, seguir para o passo (3).

    3. Desempilhar um n e verificar se a diferena de altura entre a sub-rvore da

    esquerda e da direita desse n maior que 1.

    Se sim, ser necessrio rotacionar os ns. Dependendo do tipo de rotao

    realizada, o algoritmo pode no terminar aqui. Se ele no terminar, voltar

    para o passo (2).

    Seno, v para o passo (2).

    Nota-se que a operao de remoo pode ser realizada em tempo O(lg(n)).

    Na remoo de um elemento em uma rvore AVL, pode haver a necessidade de

    realizar mais de duas rotaes (o que no acontece na insero), podendo se

    estender para uma rotao em cada nvel (O(log(n))) no pior caso.

  • 30

    8. IMPRESSO EM UMA RVORE AVL

    Tal qual a busca, na rvore AVL o mtodo para impresso dos dados o

    mesmo de uma rvore Binria de Busca.

    8.1. Imprimir todas as chaves

    Algoritmo Imprime(*R):

    Entrada: referncia de uma rvore AVL R.

    Sada: Trata-se um procedimento. Sero impressos todos os ns em Pr-

    Ordem, ou seja, primeiro a raiz e depois as subrvores. Outra forma de expressar a

    ordem de processamento dos ns pode ser: r-e-d (raiz, subrvore esquerda,

    subrvores direita).

    IF R diferente de NULL ento

    Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo

    Imprime (R.FilhoEsquerdo) //imprime chaves da subrvore esquerda

    Imprime (R.FilhoDireito) // imprime chaves da subrvore direita

    8.2. Imprimir em ordem crescente

    Algoritmo Imprime(*R):

    Entrada: referncia de uma rvore AVL R.

    Sada: Trata-se um procedimento. Sero impressas primeiramente todas as

    chaves da subrvore esquerda, depois a chave da raiz, e por fim as chaves da

    subrvore direita. Este tipo de percurso dos ns de uma rvore se chama In-Ordem,

    ou seja, raiz no meio (in) das subrvores.

  • 31

    IF R diferente de NULL ento

    Imprime (R.FilhoEsquerdo) //imprime chaves da subrvore esquerda

    Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo

    Imprime (R.FilhoDireito) // imprime chaves da subrvore direita

    8.3. Imprimir em ordem decrescente

    Algoritmo Imprime(*R):

    Entrada: referncia de uma rvore AVL R.

    Sada: Trata-se de um procedimento. Sero impressas primeiramente todas

    as chaves da subrvore direita, depois a chave da raiz e depois as chaves da

    subrvore esquerda.

    IF R diferente de NULL ento

    Imprime (R.FilhoDireito) // imprime chaves da subrvore direita

    Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo

    Imprime (R.FilhoEsquerdo) //imprime chaves da subrvore esquerda

  • 32

    CONCLUSO

    A rvore AVL considerada uma das mais eficientes, em questo da

    complexidade, quando comparada a outros tipos de rvores. So utilizadas em

    redes de comunicao e na codificao para compactao de arquivos.

    Nas redes de comunicao, os dados so fragmentados e enviados vrias

    vezes. Pode ocorrer do pacote de dados no chegar inteiro ao destino ou de ter

    dados que j foram recebidos. Por utilizar uma rvore binria, fcil pesquisar e ter

    acesso aos dados recebidos e inseri-los a lista. Ao utilizar uma AVL, fica garantida

    uma maior rapidez ao acesso de dados.

    A principal codificao que utiliza conceitos de rvores binrias conhecida

    como Algoritmo de Huffman, que armazena letras e a quantidade delas. Com a

    rvore binria fica fcil diminuir a quantidade antes necessria do arquivo.

    Mas ainda assim, a rvore AVL pode acabar sendo custosa devido

    necessidade de rotaes para o balanceamento da rvore. Quando maior for a

    rvore, mais rotaes sero necessrias para poder chegar ao ponto de remover um

    dado, e ainda mais rotaes para equilibr-la novamente.

  • 33

    REFERNCIAS

    ANDRADE, Lvia. rvores AVL. Disponvel em:

    http://www.passeidireto.com/arquivo/1012626/aula-5_arvore-avl. Acesso em 14 de

    Junho de 2014.

    BORGES, Henrique. Algoritmo de Huffman. Disponvel em:

    http://www.youtube.com/watch?v=2yWfo50jZiw. Acesso em 14 de Junho de 2014.

    BUENO, Letcia. rvores AVL. Disponvel em:

    http://professor.ufabc.edu.br/~leticia.bueno/classes/aed2/materiais/avl.pdf. Acesso

    em 14 de Junho de 2014.

    COSTA, Jean. Algoritmo de Huffman. Disponvel em:

    http://www.youtube.com/watch?v=MXI4LWgDucA. Acesso em 14 de Junho de 2014.

    DUTRA, Caio. rvore Binria AVL. Disponvel em:

    http://www.vivaolinux.com.br/script/Arvore-binaria-AVL. Acesso em 14 de Junho de

    2014.

    FERRARI, Roberto. Estruturas de dados Unidade 16: rvores Binrias de

    Busca Parte 1. Disponvel em: http://www2.dc.ufscar.br/~bsi/materiais/ed/u16.html.

    Acesso em: 24 de Junho de 2014.

    HARGROVE, John. The AVL Tree Rotations Tutorial. Disponvel em:

    http://pages.cs.wisc.edu/~paton/readings/liblitVersion/AVL-Tree-Rotations.pdf.

    Acesso em 14 de Junho de 2014.

    KRUSE, Robert; RYBA, Alex. Data Structures and Program Design in C++.

    Section 10.4, Height Balance: AVL tree. Disponvel em:

    http://cs.gmu.edu/~setia/cs310/slides/avl.pdf. Acesso em 18 de Junho de 2014.

    MORRIS, John. AVL trees. Disponvel em:

    https://www.cs.auckland.ac.nz/software/AlgAnim/AVL.html. Acesso em 14 de Junho

    de 2014.

  • 34

    NASCIMENTO, Edson. rvore AVL. Disponvel em:

    http://colabweb.ufam.edu.br/pluginfile.php/14107/mod_resource/content/3/aed2_10_

    Arvore%20AVL.pdf. Acesso em 14 de Junho de 2014.

    NONATO, Luiz. Algoritmo de Insero. Disponvel em:

    http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho

    de 2014.

    NONATO, Luiz. Implementao da Remoo. Disponvel em:

    http://www.lcad.icmc.usp.br/~nonato/ED/AVL/algo-remocao.html. Acesso em: 24 de

    Junho de 2014.

    NONATO, Luiz. Insero em uma rvore AVL. Disponvel em:

    http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho

    de 2014.

    PARLANI, Nick. BInary Trees. Disponvel em:

    http://cslibrary.stanford.edu/110/BinaryTrees.html. Acesso em: 24 de Julho de 2014.

    PROSSER, Patrick. AVL Trees. Disponvel em:

    http://www.dcs.gla.ac.uk/~pat/52233/slides/AVLTrees1x1.pdf. Acesso em: 24 de

    Junho de 2014.

    SOUZA, Jairo. rvore AVL. Disponvel em:

    http://www.ufjf.br/jairo_souza/files/2009/12/5-Indexa%C3%A7%C3%A3o-Arvore-

    AVL.pdf. Acesso em 18 de Junho de 2014.

    TOFFOLO, Tlio. rvores AVL. Disponvel em:

    http://www.decom.ufop.br/toffolo/site_media/uploads/2011-1/bcc202/slides/25._

    arvores_%28parte_2%29.pdf. Acesso em 14 de Junho de 2014.

    WALKER, Julienne. AVL trees. Disponvel em:

    http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx. Acesso em

    14 de Junho de 2014.

    WIKIPDIA. rvore AVL Insero. Disponvel em:

    http://pt.wikipedia.org/wiki/%C3%81rvore_AVL#Inser.C3.A7.C3.A3o. Acesso em: 24

    de Junho de 2014.

  • 35

    WIKIPDIA. Codificao de Huffman. Disponvel em:

    http://pt.wikipedia.org/wiki/Codifica%C3%A7%C3%A3o_de_Huffman. Acesso em 14

    de Junho de 2014.

    WIKIPEDIA. Evgenii Landis. Disponvel em:

    http://en.wikipedia.org/wiki/Evgenii_Landis. Acesso em 14 de Junho de 2014.

    WIKIPEDIA. Georgy Adelson-Velsky. Disponvel em:

    http://en.wikipedia.org/wiki/Georgy_Adelson-Velsky. Acesso em 14 de Junho de

    2014.

    rvore AVL. Disponvel em: http://www.passeidireto.com/arquivo/2536633/arvore-

    avl. Acesso em 14 de Junho de 2014.