Você está na página 1de 6

Universidade Federal de Ouro Preto – UFOP

Instituto de Ciências Exatas e Biológicas – ICEB Departamento


de Computação – DECOM
Disciplina: Programação de Computadores II – BCC702
Professor: Rafael Gomes (rafael.amgomes@gmail.com)

2ª LISTA DE EXERCÍCIOS

Grupo I – Busca em arranjos


1. Considere a função abaixo.

int processa (int a[], int n, int x){


for (int i=0; i<n; i++) {
if (x == a[i])
return i;
}
return -1;
}

a) Qual o nome deste método?

b) Indique no código onde e como ele deveria ser alterado para que a função calcule
também o número de comparações realizadas.

2. Indique quais das seguintes afirmações estão corretas em relação à busca sequencial:

( ) No pior caso, a chave é o último elemento ou não existe. O custo é O(n)


( ) No melhor caso, seu custo é O(1)
( ) O custo do caso médio é igual ao custo do pior caso

3. Marque a opção correta em relação à busca sequencial:

( ) É necessário que os dados estejam ordenados para funcionar corretamente


( ) A busca sequencial é mais eficiente que a busca binária
( ) Caso a chave procurada não exista, o custo da busca será O(n)

4. Complete o código abaixo para que dentro do método busca seja realizada uma busca
sequencial no arranjo v[ ] passado como parâmetro:
5. Desenhar um arranjo com 10 números aleatórios entre 1 e 50.

a) Escolher um elemento chave

b) Redesenhar este arranjo várias vezes indicando onde estaria o elemento a[i] em cada
passo de uma busca sequencial

c) Redesenhar este arranjo várias vezes indicando onde estariam os elementos a[i], a[esq]
e a[dir] em cada passo de uma busca binária

6. Assinale a opção correta em relação à busca binária e justifique a sua resposta.

( ) A busca binária é menos eficiente que a busca sequencial


( ) O custo do pior caso é O(n)
( ) O custo do pior caso é O(log n)

7. Assinale a opção correta em relação à busca binária e justifique a sua resposta.

( ) No pior caso, seu custo é O(n)


( ) Os dados devem estar obrigatoriamente ordenados
( ) No melhor caso, seu custo é O(1)
Grupo II – Métodos de ordenação
8. Criar um arranjo com 10 elementos aleatórios entre 1 e 50. Desenhar o arranjo várias vezes
demonstrando os passos de uma ordenação por:

a) Seleção

b) Inserção

c) Merge sort (intercalar elementos a cada passo)

d) Quicksort (particionar e mover a cada passo)

Colocar um círculo nos elementos movimentados. Colocar um traço entre os elementos


ordenados e desordenados.

9. Responda:

a) O método ______________________ consiste em dividir o vetor ao meio até que tenha


somente um elemento, para que então possa intercalar os elementos de cada nível
combinando as soluções de problemas pequenos até atingir a solução de um problema
maior.

b) O método ______________________ consiste em selecionar o i-ésimo elemento, onde


1 < i < n, e deslocar todos os elementos maiores do ele para a direita, colocando o
elemento a ser ordenado em sua posição ideal.

c) O método ______________________ consiste em encontrar o menor elemento presente


no vetor e trocá-lo com o elemento da posição inicial. Em seguida, o elemento inicial é
considerado ordenado e então deixa de fazer parte das demais interações do algoritmo,
que repete todo o processo para ordenar os elementos seguintes.

d) O método ______________________ consiste em escolher um elemento como


referência e colocar todos os elementos maiores a direita e os menores a esquerda. Após
tal processo ele divide o vetor em duas partes, sendo a primeira do início do vetor até o
elemento de referência, e a segunda do elemento de referência até final do vetor. Cada
parte é submetida ao mesmo processo novamente até que o vetor tenha somente um
elemento, para que então as partes possam ser combinadas gerando como solução final
o vetor ordenado.

10. Suponha que a operação relevante na análise de um algoritmo de ordenação seja o


custo de movimentação de elementos no arranjo. Neste caso, qual seria melhor: fazer uma
ordenação por seleção ou inserção? Qual o motivo disto?

11.Julgue a seguinte afirmação: Um algoritmo de ordenação estável não mantém a ordem


relativa dos elementos antes da ordenação.
12. Se um arranjo já estiver ordenado, qual dos métodos é o mais rápido?

( ) Seleção
( ) QuickSort e MergeSort são igualmente rápidos
( ) Inserção
( ) MergeSort
( ) QuickSort

13. Complete a frase abaixo para que ele fique correta:


Na ordenação por _________________ não existem diferenças entre os melhores e piores
casos, sendo o custo igual à O(n2).

14. "É um método que utiliza uma técnica de dividir para conquistar. É um algoritmo
onde a cada passo, se divide o arranjo em dois subarranjos menores até que tenhamos vários
arranjos de tamanho 1. Então, iniciamos uma repetição onde, dois subarranjos são fundidos
em um subarranjo maior ordenado até que tenhamos o arranjo original ordenado."
Essa frase se refere a qual tipo de ordenação?

( ) MergeSort
( ) Ordenação por seleção
( ) QuickSort
( ) Ordenação por inserção

15. A tabela abaixo se refere a qual método de ordenação?

Caso Custo
Melhor caso O(n log n)
Caso médio O(n log n)
Pior caso O(n²)

( ) Ordenação por Inserção


( ) MergeSort
( ) Ordenação por Seleção
( ) QuickSort

Grupo III – Estrutura de dados


16. Imagine um programa onde se coloca sempre elementos no fim de uma sequência e
seja muito importante que absolutamente nenhuma operação de inserção deste elemento
leve muito tempo.

a) Qual seria o container de sequência mais apropriado?

b) Explique com a ordem de complexidade da opera#cão em notação O.


17. Imagine um programa onde apenas inserimos elementos no início de um container
de sequência. Os containeres list e deque tem custo O(1) para esta operação.
Explique neste caso qual seria a diferença entre estes containeres de sequência.

18. Marque as alternativas corretas em relação ao deque:

( ) O deque precisa deslocar os elementos para que seja possível remover elementos do
início
( ) A inserção de um elemento no início da sequência possui custo O(1)
( ) A inserção de um elemento no meio da sequência possui custo O(n)

19. Imagine um programa onde apenas inserimos elementos no início de um container


de sequência. Os containeres list e deque têm custo O(1) para esta operação. Explique neste
caso qual seria a diferença entre estes containeres de sequência.

20. Explique qual será a saída na tela para os trechos de código abaixo e quais serão os
elementos do container ao fim do processo.

list<char> col;
for (char c='a'; c<= 'z '; c++) {
col.push_back(c);
}
while (!col.empty()) {
cout << col.front() << ' ';
col.pop_front();
}

21. Imagine um programa onde apenas inserimos elementos ao fim de um container de


sequência. Todos os containeres tem custo O(1) para esta operação. Explique neste caso
qual seria a diferença entre list e os outros containeres de sequência.

22. Assinale a opção correta em relação ao list:

( ) Representa listas simplesmente encadeadas, ou seja, listas unidirecionais


( ) Oferece suporte a acesso aleatório
( ) Diferentemente do deque, sua estrutura não é baseada em arranjos

23. Qual a diferença entre as estruturas associativas do tipo set* ( set, unordered set,
multiset e unordered multiset) e estruturas associativas do tipo map*( map,unordered map,
multimap e unordered multimap)? Existe alguma diferença entre elas em relação a suas
ordens de complexidade em notação O ? Seria possível utilizar um set para representar um
map?

24. Explique qual seria a saída na tela para os trechos de código abaixo e quais serão os
elementos do container ao fim do processo.
25. Considerando a relação A= 1; B= 2; C= 3;... converta as dez primeiras letras de seu
nome em um vetor de números.

A B C D EFG H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Usando a função de transformação %, desenhe a tabela hash resultante da inserção destes


números em um container unordered_set. O arranjo da tabela hash deve ter tamanho 5 e
colisões devem ser tratadas com lists.

26. Desenhe passo a passo como seria a representação interna estruturas abixo. Suponha
que conteiners baseados em arranjos comecem com capacidade para 4 elementos:

vector<int> c; deque<int> c; list<int> c;


c.push_back(4); c.push_back(5); c.push_back(4);
c.push_back(6); c.push_back(5); c.push_back(5);
c.push_back(2); c.push_front(1); c.push_back(3);
c.push_back(7); c.push_back(9); c.pop_front();
c.push_back(5); c.pop_front(); c.pop_back();
c.pop_back(); c.pop_front();
c.pop_front();

27. Desenhe passo a passo como seria a representação interna das estruturas abaixo.
Suponha uma árvore não balanceada para o set e tabelas hash de tamanho 5 para o o
unordered_set.

set<int> c; unordered_set<int> c;
c.insert(4); c.insert(4);
c.insert(6); c.insert(6);
c.insert(2); c.insert(2);
c.insert(7); c.insert(7);
c.insert(5); c.insert(5);
c.erase(2); c.erase(2);

Você também pode gostar