Série de Exercícios Á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ção Para 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ção Para 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 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ção A[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ção A[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çã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” Posição Conteúdo 1 2 2 8 3 6 4 5 6 1 10 15 7 8 9 3 12 11 • 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. 21 Exercício 9 Posição Conteúdo 1 2 2 8 3 6 4 5 6 1 10 15 7 8 9 3 12 11 Solução Seleção Posição 1 2 3 4 5 6 7 8 9 22 1 1 1 1 1 1 1 1 1 1 2 8 2 2 2 2 2 2 2 2 3 6 6 3 3 3 3 3 3 3 4 2 8 8 6 6 6 6 6 6 5 10 10 10 10 8 8 8 8 8 6 15 15 15 15 15 10 10 10 10 7 3 3 6 8 10 15 11 11 11 8 12 12 12 12 12 12 12 12 12 9 11 11 11 11 11 11 15 15 15 Exercício 9 Bolha 1 2 2 2 2 2 2 2 2 23 2 8 8 6 6 6 6 6 6 3 6 6 8 1 1 1 1 1 4 1 1 1 8 8 8 8 8 5 10 10 10 10 10 10 10 10 6 15 15 15 15 15 3 3 3 7 3 3 3 3 3 15 12 12 8 12 12 12 12 12 12 15 11 9 11 11 11 11 11 11 11 15 2 2 2 2 2 2 2 6 1 1 1 1 1 1 1 6 6 6 6 6 6 8 8 8 8 8 8 8 10 10 10 10 3 3 3 3 3 3 3 10 10 10 12 12 12 12 12 12 11 11 11 11 11 11 11 12 15 15 15 15 15 15 15 2 1 1 1 1 1 1 2 2 2 2 2 6 6 6 6 6 6 8 8 8 8 3 3 3 3 3 3 8 8 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 12 15 15 15 15 15 15 1 1 1 1 1 1 2 2 2 2 2 2 6 6 6 3 3 3 3 3 3 6 6 6 8 8 8 8 8 8 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 12 15 15 15 15 15 15 1 2 3 6 8 10 11 12 15 Posição Conteúdo 1 2 2 8 3 6 4 5 6 1 10 15 7 8 9 3 12 11 Exercício 9 “Shell sort” Intervalo 4 2 86 1 10 15 3 12 11 2 83 2 8 10 15 11 1 10 15 3 1 6 12 6 12 11 Intervalo 2 2 8 3 1 10 15 6 12 11 2 1 3 8 6 12 10 15 11 2 13 8 6 12 10 15 11 2 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 8 8 8 8 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 Intervalo 1 Inserção 1 2 3 4 5 6 7 8 9 24 3 3 3 3 3 3 3 3 3 3 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 12 12 11 15 15 15 15 15 15 15 15 15 12 11 11 11 11 11 11 11 11 11 15 Posição Conteúdo 1 2 2 8 3 6 4 5 6 1 10 15 7 8 9 3 12 11 Exercício 9 “Quick sort” Separador 6,5 2 8 6 1 10 15 3 12 11 2 3 6 1 10 15 8 12 11 2 1 3 3 6 6 1 2 1,5 3 2 6 3 2 6 2,5 3 6 1 10 15 8 12 11 10 8 15 12 11 10,5 10 8 8 10 15 12 11 11 12 15 11 12 1 25 2 3 6 8 10 11 12 15 13 Exercício 10 • Deseja-se classificar objetos armazenados em um vetor com 10 elementos. A classificação deve ser feita por: • “Quick sort” Posição Conteúdo 1 3 2 1 3 4 4 1 5 5 6 9 7 2 8 6 9 10 5 4 • Pede-se mostrar passo a passo a classificação do vetor supondo: • O pivô ponto de separação seja obtido pela MedianOfThree 26 Exercício 10 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 2 3 5 4 9 6 Cutoff = 2 1 27 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