Buscar

paa list1-part1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Universidade Federal do Ceará
Campus Russas
Projeto e Análise de Algoritmos
Lista de exerćıcios 1 - Parte I
Invariante de laço
1. Mostre o invariante do processo iterativo de cada algoritmo abaixo. Depois mostre que cada invariante
é verdadeiro na inicialização, manutenção e término.
Algoritmo 1: Max(V [0 · · ·n− 1], n)
1 x← V [0]
2 para j ← 1 até n− 1 faça
3 se V [j] > x então
4 x← V [j]
5 fim
6 fim
7 retorne x
Algoritmo 2: Soma(V [0 · · ·n− 1], n)
1 x← V [0]
2 para j ← 1 até n− 1 faça
3 x← x + V [j]
4 fim
5 retorne x
Algoritmo 3: Onde(x, V [0 · · ·n− 1], n)
1 j ← 0
2 enquanto j < n e V [j] 6= x faça
3 j ← j + 1
4 fim
5 retorne j
Complexidade de tempo
2. Para o algoritmo Alg1(A) (descrito abaixo) faça:
(a) encontre a função geral de tempo do algoritmo.
(b) calcule a complexidade de tempo de melhor caso em notação Θ, a partir da função geral.
(c) calcule a complexidade de tempo de pior caso em notação Θ, a partir da função geral.
Algoritmo 4: Alg1(A)
1 for i← 1; i < n; i + + do
2 j ← i;
3 while (A[i]%2 == 0) && (j > 0) do
4 print(“*”);
5 j ← j − 1;
6 end
7 end
Notação assintótica
3. Prove as seguintes afirmações sobre notação assintótica:
(a) n3/100− 25n2 − 100n + 7 é Θ(n3)
(b) 77n3 − 13n2 + 29n− 5 é Ω(n3)
(c) 34n log7n
2 + 13n é Ω(n) e O(n2)
(d) sendo f(n) e g(n) duas funções, se f(n) = O(g(n)) e g(n) = O(f(n)), então f(n) = Θ(g(n)).
(e) n3 6= O(n2).
(f) loga n = Θ(logb n) para quaisquer a, b > 1.
(g) log n! = O(n log n).
Recursividade
4. Uma pessoa sobe uma escada composta de n degraus, com passos que podem alcançar entre 1 e k ≤ n
degraus. Escrever equações de recorrência que permitem determinar o número de modos distintos da pessoa
subir a escada.
Recorrência
5. Resolva as seguintes equações de recorrência segundo o método da árvore de recursão:
• T (n) = 2 · T (n− 1) + 5n
• T (n) = 2 · T (n/3) + 1
• T (n) = 17 · T (n/4) + n2
• T (n) = 3 · T (n/9) +
√
n
• T (n) = T (0.99 · n) + 7
• T (n) = T (
√
n) + 1
• T (n) = T (
√
n) + log2 n
• T (n) = 2 · T (n/5) + 3 · T (n/6) + n
2
Divisão e Conquista
6. Faça dois algoritmos de divisão e conquista para multiplicação dos inteiros x e y com n d́ıgitos cada
(suponha que n é potência de 2, isto é, n = 2k, onde k é natural). Os algoritmos devem ter os tempos Θ(n2)
e Θ(nlog2 3).
7. Suponha que você tem k vetores ordenados de tamanho n e deseja combiná-los em um único vetor
ordenado de tamanho kn.
(a) Uma ideia é usar o algoritmo Intercala, intercalando o primeiro e o segundo, depois intercalando o
resultado com o terceiro, depois com o quarto e etc... Qual a complexidade desse procedimento em
termos de k e n?
(b) Mostre uma solução mais eficiente usando divisão e conquista.
8. Uma subsequência cont́ıgua de uma sequência S é uma subsequência de elementos consecutivos de S. Por
exemplo, se S = (5 15 −30 10 −5 40 10), então (15 −30 10) é uma subsequência cont́ıgua de S, mas (5 15 40)
não é. Escreva um algoritmo de Divisão e Comquista Θ(n log n) que tem como entrada uma sequência de
números (a1, a2, . . . , an) e devolva a subsequência cont́ıgua cuja soma é máxima (uma subsequência de
tamanho zero tem soma zero). No exemplo anterior, a resposta seria a subsequência (10 − 5 40 10) cuja
soma é 55.
9. Faça um algoritmo de divisão e conquista para multiplicar duas matrizes quadradas (ou seja, o número
de linhas é igual ao número de colunas), dividindo cada matriz em 4 submatrizes quadradas. Suponha que
o número de linhas de uma matriz é potência de 2. O algoritmo deve ter o tempo Θ(n3).
10. Altere os algoritmos Intercala e MergeSort para resolver o seguinte problema: dado um vetor
com n números inteiros positivos e um outro número inteiro positivo x, determine se existem ou não dois
elementos cuja soma é igual a x.
11. Sejam X[1 . . . n] e Y [1 . . . n] dois vetores ordenados. Escreva um algoritmo Θ(log n) para encontrar a
mediana de todos os 2n elementos nos vetores X e Y . Prove esta complexidade.
12. Suponha que você possui dois vetores ordenados de tamanhos m e n. Você deseja obter o k-ésimo
menor elemento da união desses dois vetores. Mostre um algoritmo de ordem Θ(logm+ log n) que faça isso.
13. Seja X[1 . . . n] um vetor de inteiros. Dados i < j em {1, . . . , n}, dizemos que (i, j) é uma inversão de
X se X[i] > X[j]. Escreva um algoritmo Θ(n log n) que devolva o número de inversões em um vetor X.
3

Continue navegando