Escolar Documentos
Profissional Documentos
Cultura Documentos
O comprimento interno (internal path length) de uma BT a soma das profundidades dos seus ns, ou
seja, a soma dos comprimentos de todos os caminhos que levam da raiz at um n. (Esse conceito usado
para estimar o desempenho esperado de TSs implementadas comBSTs).
Exerccios 1
1. Para cada das BTs que aparecem nas figuras desta pgina, escolha um n no "meio" da rvore e diga qual a
profundidade do n.
2. Qual a altura da rvore da figura? Qual a profundidade do
nM? Qual a altura da subrvore cuja raiz M?
3. D a altura e o comprimento interno de cada uma das BTs que
aparecem nas figuras desta pgina.
4. Prove que a profundidade de um n em uma BT com N ns
no mximo N1 e no mnimo0.
5. Prove que a altura de toda BT com N ns no mximo N1 e
no mnimo lg N.
6. Tamanho. Escreva um mtodo recursivo que devolva o nmero de ns de uma rvore binria.
7. (SW 3.2.6, p.416) Altura. Escreva um mtodo (recursivo) que calcule a altura de uma rvore binria. Sua
implementao deve ser do tipo preguioso. (No preciso calcular as profundidades antes.)
8. Acrescente a Node um campo depth para armazenar a profundidade do n. Escreva um mtodo setDepthField() que
defina o valor do campo depth de todos os ns.
9.
(SW 3.2.7) Escreva um mtodo internalPathLength que calcule o comprimento interno de uma BT (rvore
binria).
10. Qual o valor mximo e o mnimo do comprimento interno de uma BT com N ns?
11. Percursos (traversals). Escreva um mtodo que imprima as chaves de uma BT em inordem (ou seja, na ordem esquerda
raizdireita) use recurso. Repita para psordem (ordem esquerdadireitaraiz). Repita para prordem (ordem raiz
esquerdadireita). Use uma fila para armazenar as chaves antes de imprimir.
Busca (get) numa BST: o processo muito parecido com a busca binria em um vetor ordenado:
Insero (put) em uma BST: o processo muito mais barato que a insero em um vetor ordenado, pois no
envolve movimentao de dados. [Ignore os dizeres "and increment counts" na figura].
Exerccios 2
1. (SW 3.2.1, p.416) Importante! Insira as chaves EASYQUESTION , nesta ordem, numa BST inicialmente vazia.
Associe valor i com a isima chave. Desenhe a BST resultante. Em quantos ns voc tocou (ou seja, quantas
comparaes voc fez) para construir aBST?
2. (SW 3.2.4) Suponha que as chaves de uma BST so nmeros inteiros entre 1 e10. Quais das sequncias abaixo no
podem ser as sequncias de chaves examinadas em uma busca pla chave5?
10, 9, 8, 7, 6, 5
4, 10, 8, 6, 5
1, 10, 2, 9, 3, 8, 4, 7, 6, 5
2, 7, 3, 8, 4, 5
1, 2, 10, 4, 8, 5
3. Desenhe as seis BSTs que resultam da insero de cada uma das seis permutaes das chaves ABC numa rvore
inicialmente vazia.
4. Insira as palavras de tinyTale.txt, em ordem, numa BST inicialmente vazia. (Associe o valor i com a isima chave.)
Desenhe a BST resultante. Compare seu desenho com o resultado do cliente de teste de BST.java, que imprime os ns
por nveis.
5. Escreva um mtodo checkBST() que receba uma BT e verifique se ela ou no uma BST. Seu mtodo deve ser
recursivo.
privateclassNode{
privateKeykey;
privateValueval;
privateNodeleft,right;
publicNode(Keykey,Valueval){
this.key=key;
this.val=val;
}
}
publicValueget(Keykey){
returnget(root,key);
}
privateValueget(Nodex,Keykey){
//Consideraapenasasubrvorequetemraizx
if(x==null)returnnull;
intcmp=key.compareTo(x.key);
if(cmp<0)returnget(x.left,key);
elseif(cmp>0)returnget(x.right,key);
elsereturnx.val;
}
publicvoidput(Keykey,Valueval){
root=put(root,key,val);
}
privateNodeput(Nodex,Keykey,Valueval){
//Consideraapenasasubrvorecomraizx
//Devolvearaizdanovasubrvore
if(x==null)returnnewNode(key,val);
intcmp=key.compareTo(x.key);
if(cmp<0)x.left=put(x.left,key,val);
elseif(cmp>0)x.right=put(x.right,key,val);
elsex.val=val;
returnx;
}
}
Qualquer busca (get) que termina em um n x de profundidadep visita 1 + p ns. O mesmo vale para
insero (put).
Exerccios 3
1. Mtodo size. Considere um mtodo auxiliar size() que devolve o nmero de ns da rvore. Voc j implementou o
mtodo num dos exerccios acima. Aquela implementao conhecida como preguiosa (lazy): ela examina a rvore
toda e assim consome tempo proporcional ao nmero de ns da rvore. Escreva uma implementao mais eficiente
usando a seguinte ideia: acrescente a cada n x um campo N onde ficar registrado o nmero de ns da subrvore cuja
raiz x. Essa ideia leva a uma implementao conhecida como ansiosa (eager). A execuo da verso ansiosa de size()
consome tempo constante (ou seja, independente do nmero de ns da rvore), mas h um preo a pagar: toda
operao de insero precisa atualizar o campo N de todos os ns. Alm de escrever o cdigo ansioso de size(), faa as
alteraes necessrias no cdigo de put().
2. (SW 3.2.6, p.416) Acrescente um campo inteiro h a cada n e escreva uma verso ansiosa do mtodo que calcula a
altura da rvore binria.
3. (SW 3.2.7) Acrescente um campo inteiro ipl a cada n e escreva uma verso ansiosa de um mtodo
internalPathLength() que calcule o comprimento interno de umaBT.
Embora BSTs desbalanceadas sejam fceis de construir (basta inserir as chaves em ordem apoximadamente
crescente), elas so raras entre as BSTs aleatrias.
Exerccios 4
1. (SW 3.2.25, p.419) Perfect balance. Escreva um programa que insira um conjunto de chaves (as chaves podem ser do
tipo int) em uma BST inicialmente vazia de modo que a BST resultante seja equivalente busca binria em vetor
ordenado no seguinte sentido: a sequncia de comparaes produzida por um get() na BST seja igual sequncia de
comparaes que seria feita pela busca binria num vetor ordenado.
2. (SW 3.2.28) Sofware caching. Modifique a classe BST de modo a manter em uma varivel de instncia o n devolvido
por get() ou put() na chamada anterior. Isso pode economizar tempo se a prxima chamada de get() ou put() tiver a
mesma chave como argumento. (Esse tipo de truque uma heurstica: no garante nada, mas pode ajudar na prtica.)
(Veja o exerccio SW 3.1.25.)
tale.txt
leipzig1M.txt
total
palavras
palavras
distintas
teoria
todas palavras
135635
10679
8 letras ou mais
14350
10 letras ou mais
4582
ns visitados
em cada put()
total
palavras
palavras
distintas
ns visitados
em cada put()
prtica
teoria
prtica
18.6
17.5
21191455
534580
23.4
22.1
5737
17.6
13.9
4239597
299 593
22.7
21.4
2260
15.4
13.1
1610829
165555
20.5
19.3
Exerccios 5
1. Para N = 3, quantas BSTs h no nosso modelo de BST aleatria? Quantas so diferentes entre si? Quantas cpias h de
cada dessas rvores no modelo? Calcule a altura esperada e o comprimento interno esperado das BSTs aleatrias de 3
ns. (Veja um dos exerccios acima.)
2. Das 24 BSTs com 4 ns que esto no nosso modelo de BST aleatria, quantas cpias h de cada uma? Calcule a altura
esperada e o comprimento interno esperado das BSTs aleatrias de 4 ns.
3. (SW 3.2.5) Suponha que inserimos N chaves diferentes em uma BST inicialmente vazia e depois fazemos um grande
nmero de buscas. Suponha que sabemos quo frequentemente cada chave ser buscada. Deveramos ter inserido as
chaves na rvore em ordem crescente? em ordem decrescente? em ordem descrescente da frequncia esperada de
busca? em alguma outra ordem?
4. Acrescente um mtodo a BST que calcule o custo mdio de uma busca bemsucedida, supondo que cada chave tem a
mesma probabilidade de ser buscada. (O custo da busca o nmero de comparaes de chaves.)
5. Acrescente um mtodo a BST que calcule o custo mdio de uma busca malsucedida sob a hiptese de hashing
uniforme. (O custo da busca o nmero de comparaes de chaves.)
6. (SW 3.2.38) Desenhos de rvores. Acrescente classe BST um mtodo draw() que faa um desenho da rvore. Dica: Use
variveis de instncia para armazenar as coordenadas dos ns e use um mtodo recursivo para atribuir valores a essas
variveis.
pior caso
(tabela com N chaves)
caso mdio
(N chaves inseridas
em ordem aleatria)
busca
insero
busca bemsucedida
inseo
busca sequencial
em lista ligada
N/2
busca binria
em vetor ordenado
lg N
lg N
N/2
busca binria
em BST
1.4 lg N
1.4 lg N
Perguntas e respostas
PERGUNTA: A expresso "profundidade de uma rvore binria" faz sentido?
RESPOSTA: No.
Veja rvores binrias e rvores binrias de busca no meu website Projeto de Algoritmos
www.ime.usp.br/~pf/estruturasdedados/
Last modified: Mon May 4 14:31:41 BRT 2015
Paulo Feofiloff
Departamento de Cincia da Computao
Instituto de Matemtica e Estatstica da USP