Вы находитесь на странице: 1из 2

Universidade Federal do Cear

Campus de Quixad
QXD0153 - Desaos de Programao

Lista 1

Responda as seguintes perguntas utilizando o seu conhecimento atual sobre algoritmos clssicos
e suas complexidades.

1. Existem n pginas na internet (1 n 107 ). Cada pgina i tem um page rank diferente
ri . Encontre as 10 pginas com os maiores page rank. Qual mtodo mais recomendada?
Justique sua resposta.

(a) Leia n pginas e ordene e escolha 10 maiores.

(b) Use uma la de prioridade (heap).

2. Dado um vetor esttico L com 10K inteiros, voc precisa frequentemente obter sum(i, j) =
L[i] + L[i + 1] + . . . + L[j]. Qual a estrutura de dados mais recomendada? Justique sua
resposta.

(a) Para cada consulta, utilize um vetor simples para calcular L[i] + L[i + 1] + . . . + L[j] em
O(N ).

(b) Para cada consulta, utilize um vetor pr-processado usando _______________


em O(1).

3. Seja Q uma matriz M N (1 M, N 30), determine se existe uma sub-matriz de Q0 de


tamanho A B (1 A M, 1 B N ), onde media(Q0 ) = 7

(a) Tente todas as possveis sub-matrizes e cheque se a mdia de cada submatriz 7. Este
algoritmo roda em O(M 3 N 3 )

(b) Tente todas as possveis sub-matrizes, mas em O(M 2 N 2 ) usando ___________.

4. Qual algoritmo produz uma lista dos primeiros 10K nmeros primos com a melhor complexidade
de tempo?

5. Voc quer saber quantos zeros tem no nal de 100!. O que voc deve fazer?

1
6. Voc quer testar se o fatorial de n divisvel por m, onde 1 n 10000. O que voc deve
fazer?

7. Voc quer enumerar todas as ocorrncias de uma substring P (de tamanho m) em uma string
T (de tamanho n). Ambos n e m tem no mximo 1M de caracteres. O que voc deve fazer?

8. Dado um conjunto de S de N pontos aleatoriamente espalhados em um plano 2D (2 N


1000000), encontre dois pontos em S com a maior distncia euclidiana entre eles. O que voc
deve fazer?

Produza o cdigo mais conciso possvel para as seguintes tarefas:

1. Dado uma lista inteiros aleatrios, imprima os elementos distintos (nicos) de maneira orde-
nada.

Exemplo de Entrada v = 40,20,10,20,30,10


Exemplo de Sada 10 20 30 40
Pesquise a funo unique da STL do C++.

2. Dado uma lista ordenada de inteiros L com tamanho mximo de 1M de itens, determine quantas
vezes o valor v existe em L. Pesquise a funo lower_bound da STL do C++.

3. Gere todas as permutaes de {0 A0 ,0 B 0 ,0 C 0 , ...,0 J 0 } com as das primeiras do alfabeto. Pesquise


a funo next_permutation da STL do C++.

4. Gere todos os possveis subconjuntos de {0, 1, 2, . . . , N 1}, para N = 20.

Dica: Use as operaes bit-a-bit:

Cada nmero inteiro [0, . . . , (1 << N ) 1] representa um subconjunto de um conjunto


de N elementos. Por exemplo, 0 representa o conjunto vazio e (1 << N ) 1 representa o
conjunto de todos os elementos.

Para vericar se o elemento j est no conjunto i, basta vericar se (i&(1 << j)) > 0

5. Determine se existe dois elementos distintos x e y em L tal que x + y = S , onde n (1 n 106 )


o tamanho do vetor.

Вам также может понравиться