Home

 

UNIVERSIDADE DO ALGARVE  

Faculdade de Ciências e Tecnologia
Área Departamental de Engenharia Electrónica e Computação

 

PED    -     Aula Nº11

                                                                     

SPLAY TREE

 

 

 

Splay Tree: - É uma àrvore binária de pesquisa (BST)

                       - É uma àrvore auto-equilibrada.

                       - Em qualquer operação (pesquisa,inserção,remoção) a àrvore faz SPLAY.

 

Basicamente fazer SPLAY, é trazer um elemento x para a raiz da àrvore (BTT- Bring To Top), utilizando sucessivas rotações e tantas quanto necessárias, chamadas ZIG, ZIGZIG e ZIGZAG.

 

 

 

Rotação ZIG (Y):

 

1)

2)
      

     

 

Conclusão : Nesta rotação o filho direito do elemento Y, fica o filho esquerdo do elemento X, que é o pai de Y.

 

 

 

 

Rotação ZIGZIG(X):

 

1)   

2) 3)

 

1) Para fazer o ZIGZIG(X) primeiro temos que fazer o ZIG do pai de X (que é o Y).

 

2) Agora fazemos o ZIG de X.

 

Conclusão: No fundo é ZIG (Y), e ZIG (X) respectivamente.

 

 

 

 

Rotação ZIGZAG(X):

 

1) 2) 3)

 

 

1) Ao contrário do ZIGZIG, primeiro faz-se o ZIG de X com o pai de X (que é o Y).

 

2) Depois faz-se o ZIG de X com o avô de X (que é o Z).

 

Conclusão: No fundo corresponde  a fazer ZIG (X) e ZIG(X).

 

 

 

 

 

Algoritmos  básicos da àrvore SPLAY.

 

 

Seja um elemento x e uma àrvore A.

 

Algotitmo de Pesquisa( x, A) :

   

- Inicio

- Faz percurso BST até encontrar.

- Se existe o elemento x na àrvore A

        - Faz SPLAY do elemento x

- Se não existe o elemento x na àrvore A

        - Faz SPLAY do sucessor esquerdo mais proximo de x

- Fim

 

 

Exemplo de pesquisa( 9, A):

 

 

                                                                                           

1)    2)  3) 

 

 

1) Pesquisa tipo BST até encontrar, existe então faz SPLAY do x (neste caso 9).

    Caso não existisse faria SPLAY do 8, que é o elemento menor mais próximo de 9.

 

2) Neste caso para fazer SPLAY é utilizado o ZIGZAG(x).

 

3) Àrvore final com o x na raiz.

 

 

 

Algoritmo de Inserção(A, x) :

 

- Inicio

- Faz SPLAY do elemento x .

- Como não existe, o elemento menor mais  proximo de x fica na cabeça.

- Agora é só inserir x, ficando a cabeça o  filho esquerdo do elemento inserido e a subàrvore direita o seu filho direito.

- Fim

 

 

Exemplo de inserção( 8, A):

 

                                                                                                                                 

1) 2) 3)

 

 

1) SPLAY(8)

 

2) 7 fica na cabeça

 

3) Inserir 8, 7 é o seu filho esquerdo,e 10 o seu filho direito.

 

 

 

 

 

Algoritmo de Remoção(A, x) :

 

- Inicio

- Se existe o elemento x na àrvore A.

        - Faz SPLAY do elemento x.

        - De seguida faz SPLAY do elemento x, na sua subàrvore filha esquerda.

        - Automaticamente trouxe o elemento menor mais proximo de x para a cabeça.

        - Agora é só remover o x.

- Se não existe o elemento x na àrvore A

        - Faz SPLAY do elemento menor mais próximo de x.

- Fim

 

 

Exemplo de remoção(12, A):

 

                                                                                                                                             

1) 2) 3) 4) 5)

 

 

 

 

1) Pesquisa tipo BST

 

2) SPLAY (12,A)

 

3) SPLAY (12,A') onde A' é a subàrvore filha esquerda do elemento 12, assim temos a certeza que o 12 não vai ter filho esquerdo.

 

4) Temos o elemento menor mais próximo de 12 à cabeça e sem filho esquerdo podemos então remover.

 

5) Remoção fácil, elimina-se o 12, é só ligar o pai de x (12) com o filho direito de x(15)

 

 

 

Links Interessantes para testar este algoritmo :

 

http://www.cs.cmu.edu/afs/cs.cmu.edu/user/sleator/www/home.html

 

http://www.cs.mcgill.ca/~rsinge/web251.html

 

http://www.cs.nyu.edu/algvis/java/index.html

 

 

 

 

 

Para qualquer comentário contacte:

 

    luis_miguel@bugio.org

 

    barbio@engenheiros.com