Você está na página 1de 1

Universidade Estadual Vale do Acaraú - UVA

Curso: Ciências da Computação


Disciplina: Construção e Análise de Algoritmos
Professor: Cláudio Carvalho

Atividade 3 - Divisão e Conquista

Nome:

1. Dado um vetor A com n valores inteiros distintos e ordenados, e um inteiro k , proponha


um algoritmo de complexidade O(log n) que retorne o índice do vetor que contém o

valor k , caso esse esteja no vetor; ou −1, caso contrário. (2.0 pontos)

2. Proponha um algoritmo de divisão e conquista para encontrar o menor elemento em

um vetor A de n elementos inteiros em tempo O(n). (2.0 pontos)

3. Implemente um método de ordenação chamado MergeSort3(A,p,r) que ordene um vetor


de inteiros A[p, . . . , r], dividindo-o em 3 partes aproximadamente de mesmo tamanho,

ordenando cada uma destas recursivamente e, ao m, combinando as partes ordenadas,

em tempo Θ(n log n). (2.0 pontos)

4. Proponha um algoritmo que receba um vetor A de n elementos inteiros, não necessari-

amente distintos, e remova todas as duplicatas (cópias de elementos) deste em tempo

O(n log n). (2.0 pontos)

5. Dois professores propuseram o seguinte algoritmo de ordenação elegante. Apresente

a sua função de complexidade, em notação assintótica. (2.0 pontos)

Algoritmo StoogeSort(A,p,r)
1 se (A[p] > A[r]) então
2 T rocar(A[p], A[r]);
3 m
4 se (p + 1 < r) então
5 k ← b(r − p + 1)/3c;
6 StoogeSort(A, p, r − k);
7 StoogeSort(A, p + k, r);
8 StoogeSort(A, p, r − k);
9 m

Você também pode gostar