Sunteți pe pagina 1din 3

Universidade Federal do Cear

Campus de Quixad

QXD0041 - Projeto e Anlise de Algoritmos


Exerccio Laboratrio

1. Suponha que voc tenha um ve tor de n inteiros representando os preos das aes em um nico dia. Ns
queremos encontrar um par (DiaCompra, DiaVenda), com DiaCompra DiaV enda, de modo que se ns

compramos o estoque de aes no DiaCompra e o vendemos no DiaVenda, maximizaramos nosso lucro. Clara-
mente, h uma soluo O(n2 ) para o algoritmo, testando todos os pares possveis (DiaCompra, DiaV enda) e
encontrando o melhor de todos eles.

Desenvolva um algoritmo O(nlogn) de diviso e conquista para resolver este problema.

Dica:

Considere os seguintes fatos:

O par (DiaCompra, DiaV enda) correto ocorre completamente na primeira metade do vetor.

O par (DiaCompra, DiaV enda) correto ocorre completamente na segunda metade do vetor.

O par (DiaCompra, DiaV enda) correto ocorre em ambas as metades - compramos no primeira metade e
depois vendemos no segunda metade.

Por exemplo, considerando o vetor de preos de aes [5,10,4,6,7], o par (0,1) dar o maior lucro, cujo valor 5.
Considerando o vetor de preos de aes [5,10,4,6,12], o par (2,4) dar o maior lucro, cujo valor 8.

Fonte: https://www.thehuxley.com/problem/410

Discusso: https://sites.google.com/site/ldsicufal/disciplinas/programacao-avancada/a-melhor-compra-de-

2. Um intervalo binrio dentro de um inteiro positivo N qualquer seqncia mxima de zeros consecutivos que
est rodeada por um em ambas as extremidades na representao binria de N. Por exemplo, o nmero 9 tem
representao binria 1001 e contm um intervalo binrio de comprimento 2. O nmero 529 tem representao
binria 1000010001 e contm dois espaos binrios: um do comprimento 4 e um do comprimento 3. O nmero
20 tem a representao binria 10100 e contm um intervalo binrio de comprimento 1. O nmero 15 tem
representao binria 1111 e no possui espaos binrios.

Escreva uma funo: int solution (int N); que, dado um nmero inteiro positivo N, retorna o comprimento de
seu intervalo binrio mais longo. A funo deve retornar 0 se N no contiver um intervalor binria. Por exemplo,
dado N = 1041, a funo deve retornar 5, porque N possui uma representao binria 10000010001 e, portanto,
o intervalo binrio mais longo de comprimento 5.

Complexidade:

A complexidade de tempo do pior caso esperada O(log(N ));

A complexidade de espao do pior caso esperada O(1).

Fonte: https://codility.com/programmers/lessons/1-iterations/binary_gap/

1
3. Uma pequeno sapo quer chegar ao outro lado da estrada. O sapo est atualmente localizado na posio X e quer
chegar a uma posio maior ou igual a Y. O pequeno sapo sempre salta uma distncia fixa, D. Contar o nmero
mnimo de saltos que o sapo pequeno deve executar para atingir seu alvo.

Escreva uma funo: int soluo (int X, int Y, int D); que, dado trs inteiros X, Y e D, retorna o nmero mnimo
de saltos da posio X para uma posio igual ou maior do que Y.

Por exemplo, dado: X = 10, Y = 85 e D = 30, a funo deve retornar 3, porque o sapo ser posicionado da
seguinte maneira:

Aps o primeiro salto, na posio 10 + 30 = 40; aps o segundo salto, na posio 10 + 30 + 30 = 70; aps o
terceiro salto, na posio 10 + 30 + 30 + 30 = 100

Complexidade:

A complexidade de tempo do pior caso esperada O(1);

A complexidade de espao do pior caso esperada O(1).

Fonte: https://codility.com/programmers/lessons/3-time_complexity/frog_jmp/

4. Voc recebe N contadores, inicialmente configurado para 0, e voc possui duas operaes possveis sobre eles:

aumentar (X) - o contador X aumentado em 1,

contador mximo - todos os contadores so definidos para o valor mximo de qualquer contador.

Um vetor A no-vazio indexado por zero de M inteiros fornecida. Este vetor representa operaes consecutivas:

se A[K] = X, tal que 1 X N , ento a operao K aumentar(X),

se A[K] = N + 1, a operao K o contador mximo.

Por exemplo, dado inteiro N = 5 e o vetor A tal que

A[0] = 3, A[1] = 4, A[2] = 4, A[3] = 6, A[4] = 1, A[5] = 4, A[6] = 4

Os valores dos contadores aps cada operao consecutiva sero:

(0, 0, 1, 0, 0)

(0, 0, 1, 1, 0)

(0, 0, 1, 2, 0)

(2, 2, 2, 2, 2)

(3, 2, 2, 2, 2)

(3, 2, 2, 3, 2)

(3, 2, 2, 4, 2)

O objetivo calcular o valor de cada contador aps todas as operaes. A funo deve retornar [3, 2, 2, 4, 2],
como explicado acima.

Complexidade:

A complexidade de tempo do pior caso esperada O(N + M );

2
A complexidade de espao do pior caso esperada O(N ).

Fonte: https://codility.com/programmers/lessons/4-counting_elements/max_counters/

S-ar putea să vă placă și