Anda di halaman 1dari 44

rvores

Fac. Cincias Univ. Lisboa

Luis Antunes Algoritmos e Estruturas de Dados

Hoje
!

rvores binrias:
!

implementao utilizando ns ligados entre si

rvores de pesquisa

! O interface Comparable.
!

Algoritmos de procura, insero e remoo.

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Especificao das rvores


!

empty constri uma rvore vazia

Compound com um dado e duas rvores constri uma rvore

isEmpty verifica se a rvore est vazia

root devolve a raiz de uma rvore no vazia

leftSubTree devolve a sub-rvore esquerda de uma rvore no vazia

rightSubTree devolve a sub-rvore direita de uma rvore no vazia

isLeaf esta rvore contem apenas um n?

height obtm o nmero de ns do caminho mais longo desde a raiz a


uma folha

isBalanced se a altura das suas sub-rvores difere no mximo de 1, e as


sub-rvores so elas prprias balanceadas.
Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

especificao
specification
sorts
B i n a r yT r e e
constructors
empty : > B i n a r y T r e e ;
make : Element B i n a r yT r e e B i n a r yT r e e > B i n a r y T r e e ;
observers
isEmpty : B i n a r y T r e e ;
r o o t : Bi n a r y T r e e >? Element ;
l e f t S u b t r e e : B i n a r yT r e e >? B i n a r yT r e e ;
r i g h t S u b t r e e : B i n a r y T re e >? B i n a r y Tr e e ;
others
i s L e a f : B i n ar y T r e e ;
h e i g h t : B i n ar y T r e e > i n t ;
i s Ba l a n c ed : B i n a r y T re e ;
domains
T : BinaryTree ;
r o o t ( T ) i f not isEmpty ( T ) ;
l e f t S u b t r e e ( T ) i f not isEmpty ( T ) ;
r i g h t S u b t r e e ( T ) i f not isEmpty ( T ) ;
axioms
T1 , T2 : B i na r y T r e e ; X : Element
;
Luis Antunes
Algoritmos e Estruturas de Dados
isEmpty ( empty ( ) ) ;
not isEmpty ( make ( X , T1 , T2 ) ) ;
r o o t ( make ( X , T1 , T2 ) ) = X ;

Fac. Cincias
Univ. Lisboa

h e i g h t : B i n ar y T r e e > i n t ;
i s Ba l a n c ed : B i n a r y T re e ;
domains
T : BinaryTree ;
r o o t ( T ) i f not isEmpty ( T ) ;
l e f t S u b t r e e ( T ) i f not isEmpty ( T ) ;
r i g h t S u b t r e e ( T ) i f not isEmpty ( T ) ;
axioms
T1 , T2 : B i na r y T r e e ; X : Element ;
isEmpty ( empty ( ) ) ;
not isEmpty ( make ( X , T1 , T2 ) ) ;
r o o t ( make ( X , T1 , T2 ) ) = X ;
l e f t S u b t r e e ( make ( X , T1 , T2 ) ) = T1 ;
r i g h t S u b t r e e ( make ( X , T1 , T2 ) ) = T2 ;
i s L e a f ( T ) i f f not isEmpty ( T ) and
isEmpty ( l e f t S u b t r e e ( T ) ) and
isEmpty ( r i g h t S u b t r e e ( T ) ) ;
h e i g h t ( empty ( ) ) = 0 ;
h e i g h t ( make ( X , T1 , T2 ) ) =
1 + max ( h e i g h t ( T1 ) , h e i g h t ( T2 ) ) ;
i s Ba l a n c ed ( empty ( ) ) ;
i s Ba l a n c ed ( make ( X , T1 , T2 ) ) i f
i s Ba l a n c ed ( T1 ) and i s B al a n c ed ( T2 ) and
abs ( h e i g h t ( T1 ) h e i g h t ( T2 ) ) <= 1 ;
end s p e c i f i c a t i o n

especificao

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Figure 4.1: A specification for a binary tree of arbitrary elements.

refinement
refinement
Element i s class O b j e c t
B i n a r y T r e e i s class L i n k e d B i n a r y T r e e {
empty : > B i n a r y T r e e i s L i n k e d B i n a r y T r e e ( ) ;
compound : e : Element l : B i n a r y T r e e r : B i n a r y T r e e >
BinaryTree is LinkedBinaryTree ( Object e ,
LinkedBinaryTree l , LinkedBinaryTree r ) ;
r o o t : B i n a r y T r e e >? Element i s O b j e c t data ( ) ;
l e f t S u b t r e e : B i n a r y T r e e >? r e t u r n : B i n a r y T r e e i s
LinkedBinaryTree l e f t S u b t r e e ( ) ;
r i g h t S u b t r e e : B i n a r y T r e e >? r e t u r n : B i n a r y T r e e i s
LinkedBinaryTree r i g h t S u b t r e e ( ) ;
isEmpty : B i n a r y T r e e i s boolean isEmpty ( ) ;
i s L e a f : B i n a r y T r e e i s boolean i s L e a f ( ) ;
h e i g h t : B i n a r y T r e e > i n t i s i n t h e i g h t ( ) ;
i s B a l a n c e d : B i n a r y T r e e i s boolean i s B a l a n c e d ( ) ;
}
end refinement

Figure 4.2: A refinement binding for the binary tree module.


Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Implementao
!

Vamos usar ns ligados

Node
left =
right =
data =

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Atributos e construtores

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Observadores

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Mais observers

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Observer: occurences

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

isBalanced?

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

isFull?

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

isComplete?

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

indexOf

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Exemplo toString
*
+

x
null
null

null
null
/

a
null
null
b
null
null"

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Um Iterador prefixo
!

Usa uma inner class (no static)

! As classes aninhadas (nested) so divididas em static e

non-static.
! As non-static so chamadas classes interiores (inner) e

tm acesso aos outros membros da classe envelope.


!

Mais aqui: http://download.oracle.com/javase/


tutorial/java/javaOO/nested.html

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

PrefixIterator

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

PrefixIterator

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

BreadthIterator (largura)

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Iterador em largura

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvores binrias de pesquisa


! A rvore do dog uma rvore binria de pesquisa pq:
! Para cada n
todos os ns da sub-rvore esquerda precedem a palavra
nesse n
! e
! todos os ns da sub-rvore direita esto a seguir a esse n
!

No h estradas duplicadas numa rvore binria de


pesquisa

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvores binrias de pesquisa


!

Formalmente

! Um conjunto de ns T uma rvore binria de

pesquisa se uma das duas seguintes for verdadeira


! T vazio
! C.c. o n raiz de T tem duas sub-rvores TL e TR tais que

TL e TR so rvores binrias de pesquisa e o valor do n


raiz de T maior do que todos os valores em TL e
menos do que todos os valores em TR.

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Algoritmo rec. de procura


! Se a rvore est vazia
!
Devolver NULL (algo no encontrado)
! CC: se o alvo o n raiz
!

Devolver os dados armazenados no n raiz

! CC: se o alvo menor do que o n raiz


!

Devolver o resultado de procurar na sub-rvore esquerda

! CC:
!

Devolver o resultado de procurar na sub-rvore direita

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Propriedades ABP
! As rvores crescem do topo para baixo, e cada novo

valor inserido num novo n folha


! Uma AB est CHEIA se cada n tem dois filhos

excepto as folhas.
! Se no est cheia pode ainda estar COMPLETA se a

rvore tem altura h e est preenchida at altura h-1 e


no nvel h todos os ns por preencher estiveram
direita

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvore completa
!

Formalmente, uma rvore de altura h est


COMPLETA se
Todos os ns do nvel h-2 tm 2 filhos
!
Quando um n do nvel h-1 tem filhos, todos os ns
sua esquerda tm 2 filhos
! Se um n do nvel h-1 tem s um filho um filho
esquerda
!

40

30

32

55

35

50 Luis Antunes

Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvores gerais e . binrias


!

Regra:
!
!

conectar o ramo esquerdo de um n com o filho mais


velho (se existir)
conectar o ramo direito com o prximo irmo mais
novo (se existir)

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Ex. rvore geral

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

rvore binria equivalente

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Interface de SearchTree<E>
!

boolean add(E item)


!

insere o item onde ele pertence, devolve true se conseguiu,


false c.c. (se o item j est na rvore)

boolean contains (E target)


!

devolve true se o target est na rvore

! E find (E target)
! Devolve uma referncia para o node que tem target como
data, se encontrar, c.c. devolve null
! E delete (E target)
! Remove e devolve o target se encontrar, c.c. devolve null
!

boolean remove (E target)


!

Remove o target se encontrar e devolve true, c.c devolve false


Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

O interface Comparable
! public interface Comparable<T> {

/**
* Metodo que compara este objecto
* com o objecto do argumento
* devolve
* um nm negativo se this < obj
* zero se this == obj
* nm positivo se this > obj
*/
int compareTo(T obj);
}"

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Impl.: BinarySearchTree

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Impl.: BinarySearchTree

Verso iterativa

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Find recursivo
Verso recursiva

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

add recursivo
da especificao

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

add iterativo

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Apagar um n
! Se o item a remover folha, basta que o seu pai mude a

referncia para null;


! Se tem um s filho, pe-se o av a apontar para esse

filho
! Se tem 2 filhos, o item substitudo pelo maior item

da sua sub-rvore esquerda

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

delete

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

delete (cont.)

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

findLargestChild

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

exemplo

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

exemplo

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Anda mungkin juga menyukai