Lista de Exercícios 2 - PUC-Rio

Propaganda
INF1010 – Lista de Exercícios 2 Árvores
1. Construir algoritmo para dada uma árvore n-ária, transformá-la em uma árvore binária.
2. Qual a maior e menor quantidade de nós que podem existir em uma árvore binária completa de
altura h ?
3. Represente a sequência abaixo na forma de árvores binárias de alturas mínima e máxima.
s = { 3, 5, 9, 12, 14, 6, 7, 15 }
4. Escrever uma rotina em C para buscar a informação em um nó de uma árvore binária de busca,
sendo dada a sua chave. Cuide para que a rotina seja eficiente.
5. Achar o maior elemento (campo numérico) de uma árvore binária dada.
6. Uma árvore binária é zig-zag quando é vazia ou quando não possui nós cheios. Sem usar
recursividade, escreva, em C, uma função que recebe o endereço do nó raiz de uma árvore binária e
verifica se ela é zig-zag. Se a árvore dada for zig-zag, a função deverá retornar sua altura; caso
contrário, deverá retornar –1. Não utilize estruturas de dados auxiliares (pilhas, filas, etc...); apenas
variáveis locais dos tipos ponteiro ou inteiro.
7. Uma árvore binária cuja altura é igual ao número de nós pode possuir nós cheios ? Justifique.
8. Desenhe uma árvore estritamente binária com 7 nós para a qual os percursos em pré-ordem e inordem produzem a mesma sequência de visitas.
9. Toda árvore binária cheia é completa.
10. Dados os percursos abaixo, reconstruir a árvore original:
pré-ordem: 1, 2, 3, 6, 8, 4, 9, 10, 12, 11, 5, 7, I
simétrica (in-ordem) : 6, 3, 8, 2, 4, 9, 12, 10, 11, 1, I, 7, 5
11. Escrever rotina em pseudo-código e em C para percorrer uma árvore binária qualquer, em nível,
das folhas para a raiz. Indique a complexidade do algoritmo.
12. Responda Certo ou Errado, justificando.
a. Qualquer que seja o número de chaves, é sempre possível construir com elas uma árvore binária
completa.
b. Qualquer que seja o número de chaves, é sempre possível construir com elas uma árvore binária
cheia.
c. Uma árvore binária que possui as folhas no último ou penúltimo níveis é completa.
d. Dada uma árvore binária com mais de 3 nós, é possível que um percurso em pre-ordem e um
percurso em ordem simétrica visitem os nós na mesma ordem ?
1
13. Utilizando uma árvore binária para representar uma expressão aritmética.
a. Represente, em uma árvore binária, a seguinte expressão aritmética, respeitando a precedência
usual dos operadores: 2 * (5 – 3) + (2 + 6) / 4. As folhas devem corresponder aos operandos e os
nós interiores aos operadores. Não represente os parênteses.
b. Defina, em C, a estrutura do nó da árvore binária utilizada para representar expressões. Assuma
que os operandos são inteiros positivos e que apenas os operadores binários +, -, * e / são aceitos.
A estrutura deve possuir o menor número possível de campos.
c. Escreva em C uma função recursiva que recebe como parâmetro o endereço do nó raiz de uma
árvore binária representando uma expressão e retorna como resultado o valor obtido na avaliação
da expressão. Utilize a estrutura do nó definida no item c.
d. Qual o percurso implementado pela função escrita no item anterior? O que realiza o
procedimento de visita ?
14. Escreva, em C, uma função recursiva que permuta as subárvores esquerda e direita de todos os
nós de uma árvore binária. A função deve receber como parâmetro o endereço do nó raiz da
subárvore a ser processada. Explicite também a chamada externa.
15. Verificar se as árvores abaixo são binárias de busca
a)
b)
12
1
1
15
10
13
3
4
30
6
5
16
c)
2
15
10
20
5
17
13
11
14
22
21
2
AVL e Rubro Negra
16. A complexidade da busca em uma árvore binária AVL é O(log n)? e em uma ABB é O(log n)?
17. Considere a árvore AVL a seguir:
35
30
50
20
46
40
61
48
55
Realize, na árvore dada, a inserção das chaves 65, 70, 38, 44, 49 e 42, atualizando o fator de
equilíbrio dos nós a cada inserção. Quando necessário, indique o nó desregulado e a rotação
utilizada para regulá-lo. Redesenhe a árvore a cada passo.
18. Qual o número máximo e mínimo de nós em uma árvore AVL de altura h ?
19. Escrever algoritmo para verificar se a árvore passada como parâmetro é balanceada. Retorne a
altura da árvore.
20. Inserir as chaves 9, 8, 7, 6, 1, 2, 3, 4, 5 em uma árvore AVL desenhando a árvore após cada
inserção. Exclua as chaves 6 e 8, desenhando a árvore após cada inserção e exclusão.
21. Inserir as chaves 9, 8, 7, 6, 1, 2, 3, 4, 5 em uma árvore Rubro Negra desenhando a árvore após
cada inserção. Exclua as chaves 6 e 8, desenhando a árvore após cada inserção e exclusão.
22. Sem utilizar estruturas auxiliares (pilhas, filas, ...) escreva em C uma função não recursiva para
determinar a altura de uma árvore AVL, visitando o menor número de nós possível. Use a estrutura:
typedef struct no t_no;
struct no {
int chave;
int bal; /* fator de balanço: hdir - hesq */
t_no *esq, *dir;
};
t_no *raiz;
A função deve receber como parâmetro o endereço do nó raiz da árvore e retornar o valor da altura.
23. Apresente duas maneiras distintas de inserir as chaves 10, 20, 30, 40 e 50 em uma árvore AVL
inicialmente vazia de modo que só ocorram exatamente 2 rotações duplas no mesmo sentido.
Justifique sua resposta, realizando as inserções.
24. Considere uma árvore rubro-negra formada pela inserção de n nós com a operação Inserir.
Argumente que se n > 1, a árvore terá pelo menos um nó VERMELHO.
3
Árvore B
25. Seja uma árvore B de ordem d = 3 e altura h = 3. Qual o número máximo de chaves na árvore? E
o numero mínimo? Justifique.
26. Inserir em uma árvore B de ordem 2 vazia, as chaves { 10, 90, 170, 50, 80, 130, 100, 20, 30, 40,
70, 60 } na ordem. Remova sucessivamente da árvore B a menor chave do nó raiz até que a árvore
fique vazia. Quando houver possibilidade de optar entre a chave sucessora ou predecessora imediata,
opte sempre pela predecessora. Indique as ocorrências de redistribuição ou concatenação.
27. Considere a árvore B de ordem 2 abaixo:
109
55
5
45
61
80
77
125
81 100
121 122
190
133 135 140 189
200 210 220 230
Realize as seguintes operações, utilizando sempre a árvore resultante da operação anterior.
Redesenhe a árvore a cada passo, indicando os nós que sofrem modificações, bem como a ocorrência
de CISÃO, REDISTRIBUIÇÃO ou CONCATENAÇÃO:
a) inserção de 150;
b) remoção de 189;
c) remoção de 80;
d) inserção de 65;
e) inserção de 66;
f) remoção de 109.
Use o mesmo critério para remoção dos nós.
28. Descreva as diferenças entre as árvores B e B+, ressaltando: Quantidade de chaves, localização
dos dados, número de acessos e diferença entre nós internos e folhas.
29. Responda.
a. A que condições deve satisfazer uma árvore B de ordem d para que a inserção de qualquer chave
ocasione o aumento da altura da árvore ?
b. A que condições deve satisfazer uma árvore B de ordem d para que a remoção de qualquer chave
ocasione a redução da altura da árvore ?
c. Por que a redistribuição deve ser tentada antes da concatenação durante a remoção de uma chave
situada em um nó com ocupação mínima de uma árvore B ?
d. Se uma chave não está situada em uma folha de uma árvore B, o que garante que sua sucessora
imediata, se existir, estará obrigatoriamente localizada em uma folha ?
e. Qual é o pior caso do algoritmo de inserção de uma chave em uma árvore B de ordem d ? Como
deve ser a árvore ?
30. Para uma árvore B de ordem d > 0 e altura h > 0, calcule em função de d e h:
a. O número mínimo de chaves que ela pode possuir (nMIN).
b. O número máximo de chaves que ela pode possuir (nMAX).
4
Grafos
31. Desenhe um grafo com 10 vértices e 10 arestas com ciclos. Rotule os vértices e descreva os
algoritmos a serem utilizados para realizar uma busca em profundidade e em amplitude. Inclua nos
algoritmos uma visita aos nós e descreva que nós foram visitados por cada algoritmo.
32. Percorrer árvore em nível (sugestão: use uma fila como estrutura auxiliar).
A
B
D
Fila: A | B,C | D,E,F,G | H, I,
J|K
C
E
F
H
I
G
J
K
33. Dado o grafo não direcionado e ponderado ilustrado abaixo, mostre como seria sua
representação por matriz de adjacências e mostre também, passo a passo, o algoritmo de Kruskal
para cálculo da árvore geradora mínima. Em cada passo do algoritmo mostre como ficaria a partição
dinâmica dos nós utilizando a notação de conjuntos (ex.:{ {a,c}, {b,e,f}, {d}} ).
34. Usando o grafo abaixo descrito por uma lista de adjacências, faça:
a) A representação do menor caminho (Dijkstra) partindo no vértice 1.
b) A árvore geradora (spanning tree) de custo mínimo (Kruskal).
5
Download