Escolar Documentos
Profissional Documentos
Cultura Documentos
Complexidade de
Algoritmos
Lista de Exercícios
1
Prof. Osvaldo.
a) 1, 2, 3, 4, ... (k = 10).
( )
b) 2, 4, 6, 8, ... (k = 20).
( )
d) 1, 2, 4, 8, 16, … (k = 10).
( *
3. Quantos termos possuem cada uma das sequências abaixo e qual é a soma dos seus
termos?
PG ( )
( *
a) 1, 2, 3, 4, ..., 10.
( )
( )
b) 2, 4, 6, 8, ..., 2n, onde n ≥ 1
( )
( )
( )
( )
( * ( )
( ) ( )
4. Diga, para cada caso, quantas vezes o comando fictício “S” será executado. Assuma
que “S” não altera o valor da variável de controle dos laços.
a)
para i := 1 até 2*n faça R: 𝟐𝒏 vezes, p/ 𝒏 ≥ 𝟏
S;
b)
para i := 1 até n2 faça R: 𝒏𝟐 vezes, p/ 𝒏 ≥ 𝟏
S;
c)
para i := 1 até n faça 𝑛 (𝑛 )
para j := 1 até i
faça
S;
𝒏𝟐 𝒏
R: 𝟐
vezes, p/ 𝒏 ≥ 𝟏
d)
para i := 1 até 2*n faça 𝑛 ( 𝑛 ) 𝑛 𝑛
para j := 1 até i →
faça
S;
R: 𝟐𝒏𝟐 𝒏 vezes, p/ 𝒏 ≥ 𝟏
e) 𝑛 𝑛 𝑛 𝑛
para i := 1 até 2n faça ( )
→
para j := 1 até i faça
S;
𝑛 𝑛)
→(
R: 𝟐𝟐𝒏 𝟏
𝟐𝒏 𝟏
vezes, p/ 𝒏 ≥ 𝟏
f) 𝑛
i := 1; 𝑘 ( *
enquanto (i ≤ 2n)
{ S;
i := i*2; R: 𝒏 𝟏 vezes, p/ 𝒏 ≥ 𝟏
}
g)
i := 2n;
enquanto (i ≥ 1)
{ S;
i := i div 2; // “div” é divisão inteira.
}
𝑛
𝑛 R: 𝒏 𝟏 vezes
𝑎 𝑎𝑘 𝑟
h)
i := 9; 𝑛
𝑘
enquanto (i ≤ n) 9
{ S;
i := i*3; R: 𝐥𝐨𝐠 𝟑 𝒏 𝟏 vezes, p/ 𝒏 ≥ 𝟐
}
i)
i := 1;
enquanto (i ≤ n e x ≤ A [i]) R: 𝒏 vezes, pois ainda que
{ S; 𝒙 > 𝑨[𝒊], o segundo laço
i := i + 1; completa a execução .
}
para j := i até n faça
S;
5. Calcule as complexidades de tempo e de espaço do algoritmo abaixo.
( ) 9
→ 9 →
Calculando a complexidade de tempo do mesmo algoritmo com base num código Assembly:
( ) 9 ( )
( ) 9
( ) ( )
( )
→ →
( ) ( )
( ) ( ) ( ) ( ) ( )
( ) ( ( ))
( )
( ) ( )
( ) ( )
( )
( ) ( )
( ) ( ) ( ) ( )
( )
( ) ( )
10. O que são as complexidades de pior caso (ou complexidade pessimista), melhor
caso (ou complexidade otimista) e de caso médio?
retornar A;
}
Melhor caso: quando “A” já está ordenado
( )
Pior caso: quando “A” está ordenado decrescentemente
( ) (( ) )
( )
Caso médio: supondo que todos os casos são igualmente prováveis (distribuição
estatística uniforme)
( ) ( )( )
( )
( ) ( )
12. Esboce os gráficos das seguintes funções: log (n), n, n log (n), n2, 2n.
log
n n log
n
n
n² 2n
Todas as funções plotadas no mesmo gráfico:
2n
n²
n log n
log n
13. Calcule o tempo em segundos, minutos, dias ou anos que gastaria um processador
capaz de realizar 106 operações por segundo para executar uma instância de tamanho
n = 100 de um algoritmo cuja complexidade é definida pelas funções:
log n, n , n, n log n, n2, n3, 2n, n! .
para n=100 1 μs =
Quantidade
Função segundos minutos dias anos
operações
6 μs 9 9
√ 10 μs
100 μs
664 μs 9
² 10000 μs
³ 1000000 μs
μs
9 μs 9 9
14. Ordene a lista de funções a seguir usando a notação O. Agrupe as funções que são Θ
uma da outra.
1 ⁄ ( ) 6 (√ ) 11 ( ) 16 ( )
2 ( ) 7
√ (√ ) 12 ( ) 17 ( )
3 ( ) 8 (√ ) 13 ( ) 18 ( )
4
√ ( ) 9 ( ) 14 ⁄ ( ) 19 ( )
5 ( ) 10 ( ) 15 ( )
a) n2 = O (n3).
Pela definição:
Escolho
. Válido ≥ ( )
b) nr = o (ns ) para r ≤ s.
Pelo Teorema 4:
( )
→ ( )
→ → → → , para > , sendo
c) 2n-1 = Θ (2n ).
e) n = o (n log n)
Sejam ( ) e ( )
Pelo Teorema 4:
( )
→ ( )
→ → → → , para >
f) log 3 n = o (n1/3)
16. Mostre que logb (f (n)) = Θ (log (f (n)), para toda constante b > 1.
( ) ( ) ( )
17. Mostre que se f (n) = O (g(n)) e g(n) = O (h(n)) então f (n) = O (h (n)).
18. Mostre que se f(n) = O(s(n)) e g(n) = O(r(n)) então f(n) + g(n) = O(s(n) + r(n)).
( ) ( ) ( ) ( )
Seja ( ) e ( ) , temos: ( )
Seja ( ) e ( ) , temos: ( )
( ) ( ) ( ) ( )
( ) ( )
( ) ( ) ( ( ) ( ))
( )> ( ), para , , e 9
_________
Outra forma de resolver – escolher um valor único para c e mostrar p/ n=100 e n=99:
Prova de que ( )
Pela definição:
Sabendo que para ≥ , , temos que
→
Escolho
→
Para cada inteiro tal que 1 < p < r, verifique se p divide r. Se dividir, imprima
que “ A mensagem secreta é p” e, caso contrário, continue.
Algoritmo: DecodificarMensagem(r)
Entrada: r, inteiro, r > 1
Saída: mensagem decodificada (p), um número primo
{
p := 2;
encontrou_p := false;
enquanto (p < r – 1 e encontrou_p = false) {
se ((r mod p) = 0) {
encontrou_p := true;
imprima “A mensagem secreta é ” + p
}
p := p + 1;
}
}
√ μs ( )
√
9 segundos anos
( ) ( ) ( ) ( )
22. Dê um exemplo de uma função positiva f (n) de tal forma que f (n) não seja nem
O (n), nem Ω (n).
23. Prove por indução que a soma das n + 1 primeiras potências inteiras de 2, isto é, 1 +
2 + 4 + ... + 2n, é S (n) = 2n+1 – 1.
Base:
( ) [ ]
Redução:
( )
( )
( ) ( )
Hipótese de indução:
( )
Prova:
( ) ( )
24. Prove por indução que a soma 1 + 3 + 5 + ... + 2n – 1 = n2, i.e., a soma de números
ímpares sempre é um quadrado perfeito.
Redução:
( ) ( )
( ) ( )
( ) ( )
Hipótese de indução:
( ) ( )
Prova:
( ) ( ) ( )
Bases:
( ) [ ]
( ) [ ]
Base:
( ) ≥ → ≥
Redução:
( ) ( )( )
Hipótese de indução:
( ) ≥ ( )
Prova:
( ) ≥( ) ( ( ) )
( ) ≥( ) ( )
( ) ≥
( ) ≥
( ) ≥ ( )
( ) ≥
26. Prove que numa sequência de números naturais onde ak = ak-1 + r sendo r uma
constante, a soma dos n primeiros números desta sequência é
S(n) = a1 + a2 + ... + an = n (an + a1)/2.
Redução:
( )
( )
( ) ( )
Hipótese de indução:
( )( )
( )
Prova:
( )
( )
( )
Base:
( )
( )
27. Prove que a quantidade de nós de uma árvore binária cheia é igual a 2h+1 – 1, onde h
é a altura da árvore. Uma árvore binária cheia é uma árvore para a qual, se v é um
nó de alguma de suas subárvores vazias, então v se localiza no último nível.
Redução:
( )
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( )
Hipótese de indução:
( )
Prova:
( )
( )
( )
( )
Bases:
( )
( )
Fórmula:
( )
( )
Redução:
( ) ( ( )) ( )
( ) ( ( ))
( ) ( ) ( )
Hipótese de indução:
( ) ( ( ) ) ( ) ( )
( )
Prova:
( ) ( )
( ) ( )
( )
( )
( )
29. Ache uma expressão para a soma da i-ésima linha do triângulo abaixo. Prove que
sua expressão é verdadeira.
1 = 1
3 + 5 = 8
7 + 9 + 11 = 27
13 + 15 + 17 + 19 = 64
21 + 23 + 25 + 27 + 29 = 125
Fórmula:
Observações preliminares:
1. uma linha i contém i termos; isto é ;
2. cada linha contém um termo a mais que a linha anterior; isto é ;
3. cada linha é uma PA de razão 2 (r=2)
( )
[Qtde. total de termos acima da i-ésima linha]
( )
( ) [Último termo da i-ésima linha]
( ) ( )
( )
() ( )⁄ [Soma dos termos da i-ésima linha]
(( ) ( ) )
()
(( ) ( ))
()
( ( ))
()
()
Redução:
( ) ( ( )) [Primeiro termo da i-ésima linha deduzido a
() ( * partir da soma da linha ( )]
() ( )
[Último termo da i-ésima linha deduzido a
partir do primeiro termo]
() ( )
() ( ) ( )
() ( )
() ( ) () ( )
( * ( *
( ) ( ) ( ,
() ( )
( *
( ) ( ) ( ,
() ( )
( ) ( ) (( ) +
()
( ) ( ) ( ( ) )
()
( ) ( ) ( ) ( ) (( ) )
()
( ) ( ) ( ) ( ) (( ) )
() ( ) ( ) (( ) )
( ) ( ) (( ) ) [A]
()
Hipótese de indução:
[B]
( ) ( )
Prova:
( ) ( ) (( ) ) [Substituindo B em A]
()
() ( ) (( ) )
() (( ) )
() (( ) )
() ( )
() ( )
Bases:
( )
( )
30. Ache uma expressão para a seguinte soma e prove que ela é verdadeira:
1 . 2 + 2 . 3 + ... + n(n + 1).
Fórmula:
( )
( )
( )
( )
( )
( ) ( ( )) ( ( ))
( )
( ) ( ( ) ( ) ( ) )
( )
( ) ( )( ( ))
( )
( ) ( ( )( ))
( )
( ) ( )
( )
Redução:
( ) ( ) ( )
Hipótese de indução:
( ) ( ) ( )
( )
Prova:
( ) ( ) ( )
( ) ( )
( ) ( ) ( )
( )
( )
( )
Base:
( ) ( )
( ) ( )
31. Ache uma expressão para a seguinte soma e prove a sua afirmação.
1 1 1 1
+ + + ... +
n
2 4 8 2
Fórmula:
[Soma da PG de razão ½, com 𝑎 ½]
( )
( )
( )
( ) ( *
( )
Redução:
( )
( )
( ) ( ) ⁄
Hipótese de indução:
( )
Prova:
( )
( )
( )
( )
( )
( )
( )
Base:
( )
Redução:
( ) ( )
( ) ( ) ( )
Hipótese de indução:
é divisível por , para ≥ e .
Prova:
( ) ( ) ( )
é divisível é divisível é divisível por
inteiro inteiro inteiro hipótese
é divisível por , .
para todo n ≥ 1.
Teorema:
( )
Base ( ):
( )
Redução:
( )
( )
( ) ( *
( ) ( )
Hipótese de indução:
( )
Prova:
( )
( )
( )
_________
34. Prove que é possível estabelecer uma coloração válida para as regiões formadas por
qualquer número de linhas no plano com somente duas cores. Observação: uma
coloração é válida se todas as regiões vizinhas estão coloridas com cores diferentes.
Duas regiões são consideradas vizinhas se somente se elas possuem um lado em
comum.
Base ( ):
→
Hipótese:
É possível colorir as regiões de um plano cortado por n linhas com apenas 2 cores.
Prova:
Ao traço da n-ésima linha, divide-se o plano em 2 grupos de regiões, de acordo com
o lado da linha em que se encontram no plano. Para as regiões de um dos dois
grupos devem ser mantidas as cores que possuía antes da n-ésima linha. As regiões
do outro grupo devem ter suas cores invertidas.
Antes da n-ésima linha Com a n-ésima linha, antes da Com a n-ésima linha, após a
troca de cores troca de cores no LADO B
Dadas 2 regiões vizinhas e . Por hipótese, elas possuíam cores opostas antes da
n-ésima linha. Mesmo que estejam no grupo (lado da n-ésima linha) cujas cores das
regiões serão invertidas, ainda assim possuirão cores distintas após a inversão. Se
e foram cortadas pela n-ésima linha, então as respectivas duas novas regiões
criadas (no mesmo lado) terão suas cores trocadas, enquanto as duas restantes (do
outro lado) serão mantidas, de modo que novamente todas as regiões vizinhas
possuirão cores opostas.
35. Utilizando indução, prove que o algoritmo a seguir calcula o fatorial de um número
inteiro n ≥ 2.
repita
{
i := i + 1;
f := f * i;
}
até i = n;
retornar f;
}
Base ( ):
( )
Laço executa 1 vez,
Redução:
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( )
( ) ( ) ( )
( )
( )
Hipótese de indução:
( ) ( )
Prova:
( )
( )
iii) Redução
m = Menor(A, n-1)
se (A[n] < m) {
retornar A[n]
} senão {
retornar m
}
v) Algoritmo inteiro
Menor(A, n){
se ( ) {
retornar A[1]
} senão {
m = Menor(A, n-1)
se (A[n] < m) {
retornar A[n]
} senão {
retornar m
}
}
}
vi) Complexidade
( )
( ) ( )
( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
v) Algoritmo inteiro
( ) {
se ( ou ) {
retornar 0
} senão {
retornar ( )
}
}
vi) Complexidade
( )
( ) ( ) , para ≥
( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
c) Somar os elementos de um vetor A de n elementos (n ≥ 1).
iii) Redução
( ) ( ) [ ], para ≥
p/ retornar A[1]
v) Algoritmo inteiro
( ) {
se ( ) {
retornar A[1]
} senão {
retornar ( ) [ ]
}
}
vi) Complexidade
( )
( ) ( ) , para ≥
( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
[]
( ) [ ( )]
[]
Como, , temos que redução em n ocorre de 2 em 2.
v) Algoritmo inteiro
( ) {
se ( > ) {
[]
[] []
[]
( )
}
}
vi) Complexidade
( ) ( )
( ) ( ) , para ≥
( )
( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
e) Somar os elementos de uma matriz A de n linhas e m colunas (n ≥ 1, m ≥ 1).
iii) Redução
( ) ( [ ] [ ] [ ]) ( )
p/ retornar 0
v) Algoritmo inteiro
( ) {
se ( ) {
retornar ( ) [ ]
} senão {
se ( ) {
retornar 0
} senão {
retornar ( ) [ ]
}
}
}
vi) Complexidade
( ) ( )
iii) Redução
( ) ( ) ( ), para >
iv) Base (redução de 2 em 2)
p/ retornar 1
p/ retornar 1
v) Algoritmo inteiro
( ) {
se ( ) {
retornar 1
} senão {
retornar ( ) ( )
}
}
vi) Complexidade
( ) ( )
( ) ( ) ( ) , para >
( )
( )
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
a) Conjectura ( ) ( )
b) Conjectura ( ) ( )
( ) , para > e ≥
Base : Base :
( ) ( )
≥ ≥
Hipótese e indução:
( )
( )
Prova:
( ) ( ) ( ) ( )
( )
Escolho (atende restrições – definição e bases)
( ) ( )
iii) Redução
( ̅ )
( ̅ )
( ̅ ) ( ̅ )
p/ retornar
v) Algoritmo inteiro
( ̅ ) {
se ( ) {
retornar
} senão {
retornar ( ̅ )
}
}
vi) Complexidade
( )
( )
( ) ( ) ( )
( ) ( )
iii) Redução
( ̅ )
( ̅ )
( ̅ ) ( ̅ )
isto é:
( ̅ ) (( (( ) ) ) )
p/ retornar
( ̅ ) {
vi) Complexidade
( ) multiplicações adições
( ) ( )
39. Desenvolva uma versão com redução do tipo “dividir para conquistar” para os
seguintes algoritmos. Calcule as complexidades de pior caso de cada um deles e
diga, em cada caso, se melhorou, piorou ou continuou igual às complexidades em
relação àquelas outras de soluções diferentes desenvolvidas em sala de aula ou nesta
lista de exercícios.
iii) Redução
( )
( ) ( ) ( )
iv) Bases
p/ retornar i
p/ > retornar 0
v) Algoritmo inteiro
( ) {
se ( > ) {
retornar 0
} senão {
se ( ) {
retornar i
} senão {
( )
retornar ( ) ( )
}
}
}
vi) Complexidade
sendo
( ) ( )
, , ,
>
( ) ( ) ( )
iii) Redução
( )
( )
( )
se ( ) { retornar } senão { retornar }
iv) Bases
p/ retornar []
v) Algoritmo inteiro
( ) {
se ( > ) {
retornar null
} senão {
se ( ) {
retornar [ ]
} senão {
( )
( )
( )
se ( ou null) {
retornar
} senão {
se ( > ou null) {
retornar
} senão {
retornar null
}
}
}
}
}
vi) Complexidade
sendo
( ) ( )
, , ,
>
( ) ( ) ( )
T(n) = T(n - 1) + 4
T(1) = 4
i) Base para
Pela fórmula:
( )
A base é verdadeira
( ) ( )
iii) Prova
( ) ( )
( )
( )
41. Use a indução matemática para mostrar que a solução da relação de recorrência
abaixo é T(n) = n log n.
i) Base, para
Pela fórmula:
( )
A base é verdadeira
( )
iii) Prova
( )
( )
( ) ( )
( ) ( )
( )
( )
42. Escreva um algoritmo para resolver o problema clássico das Torres de Hanói. Qual
a complexidade do seu algoritmo?
Problema das Torres de Hanói: deslocar discos de uma torre A para uma torre B,
usando uma terceira torre como auxiliar (C), de modo que nunca um disco de
tamanho maior seja colocado sobre um disco de tamanho menor.
iii) Redução
( )
( )
( ) [detalhes do procedimento
abstraídos do contexto /
significado: desloca o 1º disco de
uma torre de origem para uma
torre de destino ]
( )
p/ ( )
v) Algoritmo inteiro
( ) {
se ( ) {
( )
} senão {
( )
( )
( )
}
vi) Complexidade
( )
( ) ( )
( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( )
( ) ( )
( ) ( )
( ( ) ) ( )
( ( ) ) ( )
( )
( ) ( )
Como:
( )
[soma de uma PG de k termos,
e ]
Temos que:
( ) ( )
( ) ( ( ) ) [para ]
( ) ( ( ( )) )
( ) ( ( ) )
( )
( )
( ) ( )
43. O problema das Torres de Saigon é semelhante ao das Torres de Hanói exceto pelo
fato de que você pode contar com 4 hastes em vez de três. Escreva um algoritmo
para resolver o problema das Torres de Saigon. Qual a complexidade do seu
algoritmo?
Usando-se o mesmo método descrito para o problema clássico das Torres de Hanói,
deslocam-se os primeiros discos da pilha da torre de origem ( ) para uma torre
intermediária ( ) usando uma torre auxiliar ( ), sendo todas estas torres,
obviamente, diferentes da torre de destino ( ). Em seguida, deslocam-se os
discos restantes em para usando como auxiliar. Finalmente, deslocam-se os
discos em pata usando novamente como auxiliar.
Complexidade:
( ) ( ) ( )
( ) ( )