Universidade Federal do ABC Avaliação: Prova 02 Disciplina

Propaganda
Universidade Federal do ABC
Disciplina: BC1424 - Algoritmos e Estruturas de Dados I
Professor: Jesús P. Mena-Chalco
Avaliação: Prova 02
Turma:
Noturno
Data:
03/05/2016
Nome completo:
RA:
Instruções para a prova (leia antes de começar):
1) A prova tem a duração de 1h50min.
2) Utilize a linguagem C para todas as questões (não utilize pseudocódigo).
1. Selection Sort é um algoritmo de ordenação baseado em se passar sempre o menor valor do vetor para
a primeira posição (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para
a segunda posição, e assim é feito sucessivamente com os (n-1) elementos restantes, até os últimos
dois elementos.
void SelectionSort ( int v[], int n ) {
int i, j, iMin, aux; for (i=0; i<n­1; i=i+1) {
iMin = i; for (j=i+1; j<n; j=j+1) {
if (v[iMin]>v[j])
iMin = j;
} if (iMin!=i) {
aux = v[iMin];
v[iMin] = v[i];
v[i] = aux;
}
}
}
Implemente o Selection Sort usando uma função recursiva que receba um vetor e o seu tamanho, porém
inverta a ideia, ao invés de passar o menor valor para a primeira posição, depois o segundo maior para a
segunda posição e assim por diante; pense de forma a passar o maior valor para a última posição,
depois o segundo maior para a penúltima posição e assim sucessivamente para os (n-1) elementos.
Assinatura: void selectonSortRec( int v[], int n )
2. O algoritmo de ordenação Merge Sort é estável se a função de Intercala for estável.
(a) A função a seguir é estável? Se sim, justifique sua afirmação. Se não, apresente a modificação para
torná-la estável. Justifique sua resposta.
(b) Qual é o número de comparações da linha 4 no melhor e no pior caso?
1. void Intercala ( int p, int q, int r, int v[] ) {
2. int i=p, j=q, k, w[r­p];
3. for (k=0; i<q && j<r; k=k+1) {
4. if (v[i]<v[j]) {
5. w[k] = v[i];
6. i = i+1;
7. }
8. else {
9. w[k] = v[j];
10. j = j+1;
11. }
12. } 13. while (i<q) {
14. w[k] = v[i];
15. k = k+1;
16. i = i+1;
17. } 18. while (j<r) {
19. w[k] = v[j];
20. k = k+1;
21. j = j+1;
22. } 23. for(i=p; i<r; i=i+1)
24. v[i] = w[i­p];
25.}
3. Considere o algoritmo de ordenação Quick Sort:
(a) Qual é a altura que a pilha de recursão pode atingir? Indique em termos de p e r.
(b) Apresente uma variante do Quick Sort de tal forma que a pilha de recursão tenha altura proporcional
a O(log(n)), onde n é o número de elementos no vetor. Justifique sua resposta.
void QuickSort(int A[], int p, int r) {
if (p<r) {
int q = Particione(A, p, r);
QuickSort(A, p, q­1);
QuickSort(A, q+1, r);
}
}
4. Quais posições de um vetor organizado como um Max-Heap de elementos distintos poderiam ser
ocupadas pelo terceiro maior elemento? E o terceiro menor elemento? Justifique.
5. Use a função HeapSort para ordenar o vetor [16, 15, 14, 13, 12, 11, 10]. Apresente a
estrutura do Max-Heap constituído a cada iteração do algoritmo. (4 pontos)
6. Descreva brevemente o algoritmo de ordenação hibrido visto em laboratório QuickInsertionSort.
(a) Qual a vantagem de usar primeiro o Quick Sort e depois o Insertion Sort?
(b) Qual a complexidade do algoritmo híbrido no pior caso?
7. Mostre a árvore final após inserir as chaves a seguir em uma árvore binária de busca, inicialmente vazia:
F, S, K, C, L, H, T, W, M, P, A, X, D, B. (4 pontos)
Considere a ordem do alfabeto: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
8. O percurso de uma árvore binária de busca em ordem r-e-d resultou na impressão da sequência M, B,
A, E, C, D, R, P, N, O, W, e o percurso da mesma árvore em ordem e-r-d resultou em A, B,
C, D, E, M, N, O, P, R, W. Construa uma árvore que satisfaça esses percursos. (5 pontos)
9. Dadas a estrutura de uma árvore binária de busca, escreva uma função recursiva que receba a raiz de
uma árvore binária de busca e imprima os valores de suas chaves em ordem decrescente.
struct cel {
int conteudo;
struct cel *pai;
struct cel *esq;
struct cel *dir;
};
typedef struct cel no;
Assinatura: void imprimir( no * r )
10. Faça uma “boa pergunta” de um tópico que domine e esteja relacionada com a disciplina. Apresente
uma resposta detalhada que prove seus conhecimentos sólidos na disciplina.
Download