Série de Exercícios. Árvores Exercício 1 Suponhamos que temos uma árvore binária com campos...

27
Série de Exercícios

Transcript of Série de Exercícios. Árvores Exercício 1 Suponhamos que temos uma árvore binária com campos...

Page 1: 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.

Série de ExercíciosSérie de Exercícios

Page 2: 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.

ÁrvoresÁrvores

Page 3: 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.

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

Page 4: 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.

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

Page 5: 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.

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

Page 6: 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.

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

Page 7: 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.

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

Page 8: 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.

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

Page 9: 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.

Heaps e filas de prioridadesHeaps e filas de prioridades

Page 10: 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.

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

Page 11: 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.

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

Page 12: 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.

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

Page 13: 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.

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

Page 14: 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.

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

Page 15: 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.

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

Page 16: 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.

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

Page 17: 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.

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

Page 18: 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.

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

Page 19: 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.

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

Page 20: 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.

ClassificaçãoClassificação

Page 21: 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.

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

Page 22: 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.

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

Page 23: 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.

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

Page 24: 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.

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

Page 25: 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.

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

Page 26: 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.

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

Page 27: 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.

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