Série de ExercíciosSérie de Exercícios
ÁrvoresÁrvores
Exercício 1• Suponhamos que temos uma árvore binária com campos
esquerda, direita, e de dados. Os campos de dados contêm números inteiros. A raiz da árvore é r. Sendo o procedimento mistério mostrado abaixo, qual seria o efeito da chamada mistério (r; 0)?
void mystery(x; i){ if (x ≠ null) { x.value = x.data + i; mystery(x.left, x.value); mystery(x.right, x.value); }}• SoluçãoPara todos os nós x, da árvore, o valor do campo de dados se
torna igual à soma dos campos de dados dos ancestrais de x
3
Exercício 1• Suponhamos que temos uma árvore binária com campos
esquerda, direita, e de dados. Os campos de dados contêm números inteiros. A raiz da árvore é r. Sendo o procedimento mistério mostrado abaixo, qual seria o efeito da chamada mistério (r; 0)?
void mystery(x; i){ if (x ≠ null) { x.value = x.data + i; mystery(x.left, x.value); mystery(x.right, x.value); }}• SoluçãoPara todos os nós x, da árvore, o valor do campo de dados se
torna igual à soma dos campos de dados dos ancestrais de x
4
Exercício 2• O percurso infixo em uma árvore de busca binária
gera uma lista classificada. Suponha que esta lista é armazenada em um array A de tamanho n. Uma árvore de busca binária globalmente balanceada possui como raiz A[mid], tem como sub árvore da esquerda a árvore de busca binária globalmente balanceada dos elementos no sub array A[0..mid-1], e como sub árvore da direita a árvore de busca binária globalmente balanceada dos elementos no sub array A[mid+1..n-1]. Escrever um método para construir uma árvore de busca binária globalmente balanceada a partir de um array classificado A.
5
Exercício 2
Solução
template <class Object> BinarySearchTree<Object>* BinarySearchTree<Object>::makeTree ( ArrayClass<Object>& a, int start, int end) { // BinarySearchTree<Object>::makeTree BinarySearchTree<Object>* bst; int mid = (start + end) / 2; if (end < start) return new BinarySearchTree<Object>; bst = new BinarySearchTree<Object>(a[mid]); bst->_left = makeTree(a, start, mid - 1); bst->_right = makeTree(a, mid + 1, end); return bst; } // BinarySearchTree<Object>::makeTree
6
Exercício 3• Conhecendo-se os percursos pré-fixo e infixo de uma árvore
binária só há uma árvore binária que satisfaça estes percursos. Para os percursos pré-fixo e infixo que se seguem construa a árvore binária correspondente.
• Percurso pré-fixo: a, e, f, h, g, b, c, d • Percurso infixo: h, f, e, g, a, c, b, d
• Solução
7
Exercício 3• Conhecendo-se os percursos pré-fixo e infixo de uma árvore
binária só há uma árvore binária que satisfaça estes percursos. Para os percursos pré-fixo e infixo que se seguem construa a árvore binária correspondente.
• Percurso pré-fixo: a, e, f, h, g, b, c, d • Percurso infixo: h, f, e, g, a, c, b, d
• Solução
8
Heaps e filas de prioridadesHeaps e filas de prioridades
Exercício 4• Considere um heap sobre um array A de 13
elementos numerados de 1 até 15• O conteúdo corrente do array nas posições
A[1] a A[13] é 17; 27; 22; 29; 31; 42; 86; 43; 56; 71; 34; 67;
53• Este heap suporta um fila de prioridades de
mínimo• Após a aplicação do método dequeueMin()
qual será a posição no array do elemento 53?
• SoluçãoA[6]
10
Exercício 4• Considere um heap sobre um array A de 13
elementos numerados de 1 até 15• O conteúdo corrente do array nas posições
A[1] a A[13] é 17; 27; 22; 29; 31; 42; 86; 43; 56; 71; 34; 67;
53• Este heap suporta um fila de prioridades de
mínimo• Após a aplicação do método dequeueMin()
qual será a posição no array do elemento 53?
• SoluçãoA[6]
11
Exercício 5• Considere um heap sobre um array A de 13
elementos numerados de 1 até 15• O conteúdo corrente do array nas posições A[1]
a A[13] é 17; 27; 22; 29; 31; 42; 86; 43; 56; 71; 34; 67;
53• Este heap suporta um fila de prioridades de
mínimo• Após a aplicação do método enqueue(Int(81))
qual será a posição no array do novo elemento?
• Solução A[7]
12
Exercício 5• Considere um heap sobre um array A de 13
elementos numerados de 1 até 15• O conteúdo corrente do array nas posições A[1]
a A[13] é 17; 27; 22; 29; 31; 42; 86; 43; 56; 71; 34; 67;
53• Este heap suporta um fila de prioridades de
mínimo• Após a aplicação do método enqueue(Int(81))
qual será a posição no array do novo elemento?
• Solução A[7]
13
Exercício 6
• A figura mostra uma fila de prioridades armazenada em um heap
• Na árvore binária do heap quantos nós existem na sub-árvore da direita da raiz?
• Solução 7
14
Exercício 6
• A figura mostra uma fila de prioridades armazenada em um heap
• Na árvore binária do heap quantos nós existem na sub-árvore da direita da raiz?
• Solução 7
15
Exercício 7
• Um heap representando uma fila de prioridades está armazenado em um array A
• A raiz do heap está armazenada em A[1]• Aonde está armazenada a filha esquerda da
folha direita da raiz?
• Solução A[6]
16
Exercício 7
• Um heap representando uma fila de prioridades está armazenado em um array A
• A raiz do heap está armazenada em A[1]• Aonde está armazenada a filha esquerda da
folha direita da raiz?
• Solução A[6]
17
Exercício 8
• Considere a fila de prioridade armazenada em um heap (min), como indicado. Caso seja inserido na fila 31 em qual posição do heap vai ficar?
18
Exercício 8
• Solução• A inclusão é feita no nó 11, filho mais novo do
nó 5 (E contendo 63)• A chave de 11 é menor do que a de seu pai (nó
5) e o conteúdo troca de lugar, indo 31 para o nó 5
• O pai do nó 5 é o nó 2 (B contendo 52)• A chave de 5 é menor do que a de seu pai (nó
2) e o conteúdo troca de lugar, indo 31 para o nó 2
• O heap está correto e 31 ocupa a posição 2 (B)19
ClassificaçãoClassificação
Exercício 9• Deseja-se classificar objetos armazenados em um
vetor com 9 elementos. A classificação deve ser feita por:• Seleção• Bolha• “Shell sort”• “Quick sort”
• Pede-se mostrar passo a passo a classificação do vetor supondo:• a área classificada se expanda do início do vetor para o seu
final na seleção e na inserção• a área classificada se expanda do final do vetor para o seu
início na bolha• no “Shell sort” os intervalos sejam 4, 2 e 1 (inserção)• no “Quick sort” o ponto de separação seja obtido da média
dos valores extremos.
Posição 1 2 3 4 5 6 7 8 9 Conteúdo 2 8 6 1 10 15 3 12 11
21
Exercício 9
Posição 1 2 3 4 5 6 7 8 9 Conteúdo 2 8 6 1 10 15 3 12 11
Solução Seleção Posição 1 2 3 4 5 6 7 8 9
1 1 8 6 2 10 15 3 12 11 2 1 2 6 8 10 15 3 12 11 3 1 2 3 8 10 15 6 12 11 4 1 2 3 6 10 15 8 12 11 5 1 2 3 6 8 15 10 12 11 6 1 2 3 6 8 10 15 12 11 7 1 2 3 6 8 10 11 12 15 8 1 2 3 6 8 10 11 12 15 9 1 2 3 6 8 10 11 12 15
22
Exercício 9
Posição 1 2 3 4 5 6 7 8 9 Conteúdo 2 8 6 1 10 15 3 12 11
Bolha 1 2 3 4 5 6 7 8 9
2 8 6 1 10 15 3 12 11
2 8 6 1 10 15 3 12 11 2 6 8 1 10 15 3 12 11
2 6 1 8 10 15 3 12 11
2 6 1 8 10 15 3 12 11 2 6 1 8 10 3 15 12 11
2 6 1 8 10 3 12 15 11
2 6 1 8 10 3 12 11 15
2 6 1 8 10 3 12 11 15
2 1 6 8 10 3 12 11 15 2 1 6 8 10 3 12 11 15
2 1 6 8 10 3 12 11 15
2 1 6 8 3 10 12 11 15 2 1 6 8 3 10 12 11 15
2 1 6 8 3 10 11 12 15
2 1 6 8 3 10 11 12 15
1 2 6 8 3 10 11 12 15
1 2 6 8 3 10 11 12 15 1 2 6 8 3 10 11 12 15
1 2 6 3 8 10 11 12 15
1 2 6 3 8 10 11 12 15
1 2 6 3 8 10 11 12 15
1 2 6 3 8 10 11 12 15 1 2 6 3 8 10 11 12 15
1 2 3 6 8 10 11 12 15
1 2 3 6 8 10 11 12 15 1 2 3 6 8 10 11 12 15
1 2 3 6 8 10 11 12 15
23
Exercício 9“Shell sort”
Intervalo 4 2 8 6 1 2 8 3 1
10 15 3 12 10 15 6 12 11 11 2 8 3 1 10 15 6 12 11 Intervalo
2 2 8 2 1 3 1 3 8 10 15 6 12 6 12 10 15 11 11 2 1 3 8 6 12 10 15 11 Intervalo
1 Inserção 2 1 3 8 6 12 10 15 11
1 2 1 3 8 6 12 10 15 11 2 1 2 3 8 6 12 10 15 11 3 1 2 3 8 6 12 10 15 11 4 1 2 3 6 8 12 10 15 11 5 1 2 3 6 8 12 10 15 11 6 1 2 3 6 8 12 10 15 11 7 1 2 3 6 8 10 12 15 11 8 1 2 3 6 8 10 12 15 11 9 1 2 3 6 8 10 11 12 15
Posição 1 2 3 4 5 6 7 8 9 Conteúdo 2 8 6 1 10 15 3 12 11
24
Exercício 9
25
“Quick sort” Separador
2 8 6 1 10 15 3 12 11 6,5
2 3 6 1 10 15 8 12 11
2 3 6 1 1,5 1 3 6 2
1
3 6 2 2,5 2 3 6 3 6 10 15 8 12 11 10,5 10 8 15 12 11 10 8 8 10 15 12 11 13 11 12 15 11 12
1 2 3 6 8 10 11 12 15
Exercício 10• Deseja-se classificar objetos armazenados em um
vetor com 10 elementos. A classificação deve ser feita por:• “Quick sort”
• Pede-se mostrar passo a passo a classificação do vetor supondo:• O pivô ponto de separação seja obtido pela
MedianOfThree
26
Posição 1 2 3 4 5 6 7 8 9 10Conteúdo 3 1 4 1 5 9 2 6 5 4
Exercício 10
27
3 1 4 1 5 9 2 6 5 4 Array original
3 1 4 1 5 9 2 6 5 4 Seleção de pivô
3 1 4 1 5 9 2 6 5 4 Partição
3 1 2 1 5 9 4 6 5 4 Restauração do pivô
3 1 2 1 4 9 4 6 5 5
3 1 2 1 9 4 6 5 5 Seleção de pivô
3 1 2 1 9 4 6 5 5 Partição
1 3 2 1 5 4 6 9 5 Restauração do pivô
1 1 2 3 5 4 5 9 6
1 2 3 5 4 9 6 Cutoff = 2
1 1 2 3 4 5 4 5 9 6 Concluir com Inserção
1 1 2 3 4 5 4 5 9 6 Array classificado