Buscar

Lista 1 de exercícios de Análise de Algoritmos (Com gabarito) (Ayala)

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 16 páginas

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 6, do total de 16 páginas

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 9, do total de 16 páginas

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

Prévia do material em texto

Ana´lise de Algoritmos
Primeira Lista de Exerc´ıcios
Fundamentos matema´ticos da ana´lise de algoritmos e Algoritmos de
Ordenac¸a˜o
26 de marc¸o de 2008
Prof. Mauricio Ayala-Rinco´n
Entrega: 16 de abril de 2008 (100%) - Grupos de cinco pesso˜as
Sera´ disponibilizado um gabarito da lista, depois do dia 16 de abril.
Listas entregues entre 17 e 23 de abril de 2008: 50%
Listas entregues apo´s 23 de abril de 2008: 0%
Esta´giario de doceˆncia: Daniel Lima Ventura: ventura at mat dot unb dot br
Fundamentos
1. Complete a seguinte tabela determinando o maior tamanho de um problema que pode
ser solucionado em tempo t por um algoritmo A, para cada func¸a˜o fA(n) na seguinte
tabela. Supor que o algoritmo A resolve um problema de tamanho n em tempo fA(n)
microsegundos.
fA(n) 1 seg. 1 min. 1 hora 1 dia 1 meˆs 1 ano 1 se´culo
×60 ×60 ×24 ×30 ×12 ×100
ln(n)√
n
n 106 6 107 3.6 109 8.64 1010 2.592 1012 3.1104 1013 3.1104 1015
nln(n)
n2 103
√
60 103 6 104
√
8.64 105
√
2.592 106
√
31.104 106
√
31.104 107
n3 102
2n 19 25 31 36 41 44 51
n! 9 11 12 13 15 16 17
Caso existesem computadores que executaram 1 instruc¸a˜o por nanosegundo, determine
o maior tamanho de um problema que pode ser tratado em tempo t por algoritmos A
com func¸o˜es correspondentes fA(n) na seguinte tabela.
fA(n) 1 seg. 1 min. 1 hora 1 dia 1 meˆs 1 ano 1 se´culo
×60 ×60 ×24 ×30 ×12 ×100
n 109 6 1010 3.6 1012 8.64 1013 2.592 1013 3.1104 1016 3.1104 1018
n2
n3
2n
n!
1
2. Resolva as seguintes relac¸o˜es de recurreˆncia:
(a) T (1) = 1, T (n) = 3T (n/2) + n2, n ≥ 2;
(b) T (1) = 1, T (n) = 2T (n− 1) + 1, n ≥ 2;
(c) T (1) = 1, T (n) = 2T (n/2) + n, n ≥ 2;
(d) T (1) ∈ Θ(1), T (n) = 3T (n/2) + nln(n);
(e) T (1) ∈ Θ(1), T (n) = 3T (n/3 + 5) + n/2;
(f) T (1) ∈ Θ(1), T (n) = 2T (n/2) + n/ln(n);
(g) T (1) ∈ Θ(1), T (n) = T (n− 1) + 1/n;
(h) T (1) ∈ Θ(1), T (n) = T (n− 1) + ln(n);
(i) T (1) ∈ Θ(1), T (n) = √nT (√n) + n;
3. A func¸a˜o de Fibonacci e´ definida pela relac¸a˜o de recurreˆncia
F (0) = 0
F (1) = 1
F (n) = F (n− 1) + F (n− 2)
Seja F , uma func¸a˜o generatriz, definida por
F(z) =
∞∑
i=0
F (i)zi
Siga os seguintes passos para resolver a relac¸a˜o de recurreˆncia da func¸a˜o de Fibonacci.
(a) Demonstre que
F(z) = z
1− z − z2 =
z
(1− φz)(1− φ˜z) =
1√
5
(
1
1− φz −
1
1− φ˜z ),
onde
φ =
1 +
√
5
2
e φ˜ =
1−√5
2
(b) Demonstre que
F(z) =
∞∑
i=0
1√
5
(φi − φ˜i)zi
(c) Prove que F (i) = φi/
√
5 para i > 0, aproximado ao inteiro mais pro´ximo.
(d) Demonstre que F (i + 2) ≥ φi, para i ≥ 0.
(e) Conclua que F (n) ∈ Θ(φn); i.e., a func¸a˜o de Fibonacci e´ de complexidade ex-
poneˆncial.
2
Observe que tambe´m e´ poss´ıvel estimar limites inferior e superior para a complexidade
de F (n) da seguinte maneira:
∀n > 2, F (n) = F (n− 1) + F (n− 2) ⇒ 2 F (n− 2) ≤ F (n) ≤ 2 F (n− 1)
Considerando os casos n par e ı´mpar obtem-se:
n par: √
2
n
/2 = 2n/2−1 = 2n/2−1F (2) ≤ F (n) ≤ 2n−1F (1) = 2n−1
n ı´mpar: √
2
n−1
= 2bn/2cF (1) ≤ F (n) ≤ 2n−1F (1) = 2n−1
Consequentemente, F (n) ∈ O(2n) e F (n) ∈ Ω(√2n). Conclui-se que F (n) e´ limitada
inferior- e superiormente por funciones de classe de complexidade exponeˆncial.
Note que a conclusa˜o inicial, F (n) ∈ Θ(φn), e´ coerente com os limites anteriores,
sempre que
√
2 < φ =
1 +
√
5
2
< 2
4. O problema das torres de Hanoi consiste em transladar n discos de diaˆmetros diferentes
de uma torre A a uma torre C usando uma torre auxiliar B. Os discos esta˜o inicialmente
organizados na torre, A, decrescentemente, segundo o diaˆmetro e devem terminar na
torre C com a mesma organizac¸a˜o. Os discos sa˜o movidos de uma torre a outra com a
restric¸a˜o de que jamais se teˆm discos de diaˆmetro maior acima de discos de diaˆmetro
menor numa mesma torre. Ademais, em um movimento na˜o podem ser transladados
varios discos simultaneamente e somente e´ permitido mover discos no tope das torres.
A soluc¸a˜o t´ıpica do problema, veja figura 1, consiste em:
• transladar recursivamente os n− 1 discos de menor diaˆmetro, da torre A a` torre
B, usando como torre auxiliar a torre C;
• mover o disco de maior diaˆmetro de A a C;
• Transladar recursivamente os n− 1 discos de B a C, usando como torre auxiliar
A.
Seja M(n) o nu´mero de movimentos necessa´rios para transladar n discos segundo o
algoritmo anterior.
(a) Explique porque a seguinte relac¸a˜o de recurreˆncia expressa o nu´mero correto de
movimentos:
M(n) =
{
1, caso n = 1
2 M(n− 1) + 1, caso n > 1
(b) Calcule M(n).
3
Torre A Torre B Torre C
Situac¸a˜o inicial
recursa˜o A → B
recursa˜o B → C
A → C
Figura 1: Torres de Hanoi
Algoritmos de Ordenac¸a˜o
Implementac¸o˜es na linguagem C dos algoritmos maxsort, bubblesort, insertionsort, binary-
insertionsort, quicksort, mergesort e heapsort podem-se achar na pa´gina
http://www.mat.unb.br/∼ayala/LECTURES/AA/AA.html no arquivo “sorting.c”.
5. Analise a complexidade, nu´mero de comparac¸o˜es, do algoritmo binary-insertionsort
(i.e., insertionsort modificado, de maneira que a inserc¸a˜o e´ realizada por meio de busca
bina´ria).
6. Demonstre formalmente que qualquer algoritmo de fusa˜o de listas faz ao menos cinco
comparac¸o˜es, para fusionar duas listas ordenadas de comprimentos quatro e dois.
Note que o nu´mero de poss´ıveis formas do merge de listas ordenadas a1, a2, a3, a4 e b1, b2
e´ quinze. Verifique isto observando que cada uma das chaves b1 e b2 pode-se inserir na
lista das a’s de cinco formas diferentes, mas estas restritas mutuamente. Veja a Figura
2.
Assim, segundo o limite inferior de otimizac¸a˜o, poder´ıamos ter algoritmos de no mı´nimo
dlog2(15)e = 4 comparac¸o˜es. Tem-se, enta˜o, que descrever um “pior caso” que precisa
ao menos de cinco comparac¸o˜es.
7. Segundo o limite inferior de otimizac¸a˜o para algoritmos de ordenac¸a˜o por comparac¸a˜o
de chaves (i.e., dlog2(n!)e, onde n e´ o comprimento da lista) examinada na aula, uma
lista de comprimento treˆs ordena-se otimamente com dlog2(6)e = 3 comparac¸o˜es. As-
sim, que os algoritmos maxsort, bubblesort, insertionsort, binary-insertionsort, quick-
4
a1 a2 a3 a4
b1 b2
Figura 2: Fusa˜o de listas ordenadas: inserc¸a˜o restrita
sort, mergesort e heapsort sa˜o o´timos para listas de comprimento treˆs, pois no pior caso
fazem treˆs comparac¸o˜es (verifique!). Listas de comprimento quatro poderiam, enta˜o,
ordenar-se com dlog2(24)e = 5 comparac¸o˜es. Note que, por exemplo, os algoritmos
maxsort, bubblesort, insertionsort e quicksort fazem seis comparac¸o˜es (em tanto que
o algoritmo heapsort faz sete comparac¸o˜es) no pior caso. Neste caso, os algoritmos
mergesort e binary-insertionsort sa˜o o´timos (verifique!). Uma simples modificac¸a˜o do
algoritmo heapsort1 precisa seis comparac¸o˜es.
Agora, para listas de comprimento cinco temos um limite de otimizac¸a˜o dlog2(120)e =
7. Verifique que os algoritmos bubblesort, insertionsort e quicksort fazem dez com-
parac¸o˜es (em tanto que o algoritmo heapsort faz doze comparac¸o˜es) e os algoritmos
mergesort e binary-insertionsort oito comprac¸o˜es, no pior caso. Com uma simples mod-
ificac¸a˜o do algoritmo heapsort podem-se atingir dez comparac¸o˜es no pior caso.
Pode-se desenhar um algoritmo de ordenac¸a˜o para listas de comprimento cinco que
precise no ma´ximo de sete comparac¸o˜es?
8. No ano de 1974 (A. H. Aho, J. E. Hopcroft and J. D. Ullman, The Design and Analysis
of Computer Algorithms. Addisson-Wesley, 1974) os melhores algoritmos conhecidos,
baseados em comparac¸a˜o de chaves, para ordenar listas de comprimento n realizabam
um nu´mero de comparac¸o˜es segundo a tabela embaixo.
comprimento 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
comparac¸o˜es 0 1 3 5 7 10 13 16 19 22 26 30 34 38 42 46 50
Utilizando os recursos e me´todos computacionais atualmente dispon´ıveisa tabela pode-
ria ser aumentada. Esquematize me´todos algor´ıtmicos que baseados estrutura das
poss´ıveis a´rvores de decisa˜o associadas com algoritmos de ordenac¸a˜o para um nu´mero
fixo de chaves, descrevam os melhores algoritmos de ordenac¸a˜o.
Conhecimento de tais algoritmos e´ relevante para refinar os me´todos gerais mais pop-
ulares. P.ex., o mergesort pode ser aprimorado modificando o mecanismo de escape
do processo recursivo de forma tal que sublistas de comprimento igual que 5 sejam
ordenadas com somente sete comparac¸o˜es, como na tabela, e na˜o com oito. Ana´lise
1Para listas de comprimento quatro a construc¸a˜o do heap precisa quatro comparac¸o˜es e a ordenac¸a˜o so´
dois, se para o primeiro fixheap usa-se toda a informac¸a˜o dispon´ıvel, i.e., a chave a inserir e´ menor que o
filho esquerdo da estrutura do heap.
5
p.ex. as vantagens, quando utilizamos mergesort assim aprimorado para ordenar uma
lista de tamanho 5× 2k.
9. Os algoritmos de ordenac¸a˜o examinados na aula sa˜o desenhados pensando no caso de
listas sem repetic¸o˜es de chaves (ou com poucas repetic¸o˜es). Para listas com repetic¸o˜es
nossos algoritmos sa˜o corretos, mas na˜o aproveitam a ocorreˆncia de repetic¸o˜es.
(a) Descreva o trabalho no pior caso (W (n)) para os algoritmos insertionsort, quick-
sort e mergesort de listas de 0’s e 1’s.
(b) Desenhe um algoritmo “eficiente” baseado em comparac¸a˜o e intercaˆmbio de chaves
(na˜o use contadores extra!) para ordenar listas de 0’s e 1’s. Calcule o W (n) de
seu algoritmo.
(c) (The Dutch National Flag Problem). Cada uma das n chaves de uma lista pode ser
vermelha, branca ou azul. Apresente um algoritmo “eficiente” para ordenar este
tipo de listas segundo a ordem vermelha < branca < azul. As u´nicas operac¸o˜es
permitidas sa˜o comparac¸a˜o e intercaˆmbio de chaves (na˜o use contadores extra!).
Existe uma soluc¸a˜o Θ(n).
10. Explique em detalhe e ana´lise a complexidade tempo espac¸o dos algoritmos de or-
denac¸a˜o Shellsort, Countingsort, Radixsort e Bucketsort na bibliografia da disciplina.
6
Ana´lise de Algoritmos
Primeira Lista de Exerc´ıcios
Fundamentos
1.
fA(n) 1 seg. 1 min. 1 hora 1 dia 1 meˆs 1 ano 1 se´culo
ln(n) e10
6
e6 10
7
e3.6 10
9
e8.64 10
10
e2.592 10
12
e3.1104 10
13
e3.1104 10
15
√
n 1012 3.6 1015 3.62 1019 8.642 1020 2.5922 1024 3.11042 1026 3.11042 1030
n ln(n) 87847 3.9501 106 1.8890 108 3.9117 109 1.0217 1011 1.1210 1012 9.6591 1013
n3 102 601/3102 3.61/3103 86.41/3103 2.5921/3104 31.1041/3104 3.11041/3105
fA(n) 1 seg. 1 min. 1 hora 1 dia 1 meˆs 1 ano 1 se´culo
n2 109/2
√
6 105
√
3.6 106
√
86.4 106
√
25.92 107
√
3.1104 108
√
3.1104 109
n3 103 601/3103 3.61/3104 86.41/3104 2.5921/3105 31.1041/3105 3.11041/3106
2n 30 36 42 46 51 55 61
n! 12 13 15 16 17 18 20
2. (a) Para a = 3, b = 2 e f(n) = n2 tem-se que n2 = f(n) ∈ Ω(nlog2 3+ǫ), onde
ǫ ≈ 0.4. Observe que 3f(n/2) = 3n2/4 ≤ cn2, onde c = 7/8. Portanto, pelo
item 3 do Teorema Master, T (n) ∈ Θ(n2).
(b) Observe que em cada chamada recursiva temos um custo adicional de 1. Ana-
lisando a a´rvore recursiva de T (n) nota-se uma a´rvore bina´ria de altura n− 1
onde em cada n´ıvel i existem 2i no´s, cada um rotulado com o valor 1. Portanto,
T (n) =
n−1∑
i=0
2i = 2n − 1 ∈ Θ(2n)
Obs: a prova por induc¸a˜o de que T (n) ∈ Θ(2n) na˜o e´ necessa´ria neste caso
porque a soluc¸a˜o do somato´rio representando T (n) foi feita diretamente. Ela
pode ser feita mostrando que c12
n ≤ T (n) ≤ c22n− 1, para constantes c1 e c2.
(c) Para a = 2, b = 2 e f(n) = n tem-se que n ∈ Θ(n) (reflexividade). Portanto,
pelo item 2 do TM, T (n) ∈ Θ(n lg(n)).
(d) Para a = 3, b = 2 e f(n) = n ln(n) tem-se que nlg 3 = n1.5+ǫ0 , onde 0 <
ǫ0 < 0.085. Observe que n
1.5 = n1/2n e que limn→∞ n
1/2
ln(n)
= ∞. Logo, f(n) ∈
O(nlg 3− ǫ0). Portanto, pelo item 1 do TM, T (n) ∈ Θ(nlg 3).
(e) A adic¸a˜o de 5 na˜o deve ser relevante para n suficientemente grande. Pode-se
enta˜o usar a a´rvore recursiva para a resoluc¸a˜o de T ′(n) = 3T ′(n/3) + n/2 e
provar por induc¸a˜o se a soluca˜o e´ um limite apropriado para T (n). Logo
T ′(n) =
log3(n)−1∑
i=0
3i
n
3i2
+ 3log3(n)Θ(1)
=
log3(n)−1∑
i=0
n
2
+ nΘ(1)
=
1
2
n log3(n) + Θ(n)
1
Por induc¸a˜o tem-se que
T (n) = 3T
(n
3
+ 5
)
+
n
2
≥ 3c1
(n
3
+ 5
)
log3
(n
3
+ 5
)
+
n
2
(HI)
> 3c1
n
3
log3
(n
3
)
+
n
2
(monot.)
= c1n(log3(n)− 1) +
n
2
= c1n log3(n) + n
( 1
2
− c1
)
≥ c1n log3(n), para c1 ≤
1
2
Portanto, T (n) ∈ Ω(n log3(n)).
(f) Analisando a a´rvore recursiva de T (n) e supondo que n = 2m tem-se que
T (n) =
lg(n)−1∑
i=0
2i
n
2i
1
ln(n/2i)
+ 2lg(n)Θ(1)
=
lg(n)−1∑
i=0
n
ln(n/2i)
+ nΘ(1)
= n
lg(n)−1∑
i=0
1
ln(n/2i)
+ Θ(n)
= n
lg(n)∑
i=1
1
ln(2i)
+ Θ(n)
=
n
ln(2)
lg(n)∑
i=1
1
i
+ Θ(n)
≤ n
ln(2)
(
lg(lg(n)) + 1
)
+ Θ(n)
∈ Θ(n lg(lg(n)))
(g) Pela a´rvore recursiva tem-se que
T (n) =
n−2∑
i=0
1
n− i + Θ(1)
=
n∑
i=2
1
i
+ Θ(1)
≤ lg(n) + Θ(1) ∗
∈ Θ(lg(n))
* Observe que de
∑n
i=1
1
i
≤ lg(n) + 1 obtem-se a desigualdade acima.
2
(h) Pela a´rvore recursiva de T (n) tem-se que
T (n) =
n−2∑
i=0
ln(n− i) + Θ(1)
=
n∑
i=2
ln(i) + Θ(1)
≥
∫ n
1
ln(i)di+Θ(1)
= n ln(n)− n+ 1 + Θ(1)
= (ln(n)− 1)n+Θ(1)
∈ Θ(n ln(n))
(i) Seja S(m) = T (2m) = 2m/2T (2m/2) + 2m. Enta˜o S(m) = 2m/2S(m/2) + 2m.
Analisando a´rvore recursiva de S(m) tem-se que
S(m) =
lg(m)∏
i=1
2m/2
i
S(m/2lg(m)) + lg(m)2m
=
lg(m)∏
i=1
2m/2
i
S(1) + lg(m)2m
= 2
Plg m
i=1 m/2
i
S(1) + lg(m)2m
= 2m
Plg m
i=1 (1/2)
i
S(1) + lg(m)2m
≤ 2mS(1) + lg(m)2m
Portanto
T (n) ≤ nT (2) + n lg(lg(n)) ∈ Θ(n lg(lg(n)))
3. (a) Para φ = (1 +
√
5)/2 e φ˜ = (1−√5)/2 tem-se que
1√
5
(
1
1− φz −
1
1− φ˜z
)
=
1√
5
φz − φ˜z
(1− φz)(1− φ˜z)
=
1√
5
(φ− φ˜)z
(1− φz)(1− φ˜z)
=
1√
5
√
5z
(1− φz)(1− φ˜z)
=
z
(1− φz)(1− φ˜z)
=
z
1− φ˜z − φz + φφ˜z2
=
z
1− z − z2
3
Por outro lado tem-se que
F(z) =
∞∑
i=0
F (i)zi
=
∞∑
i=1
F (i)zi
= z +
∞∑
i=2
F (i)zi
= z +
∞∑
i=2
(F (i− 1) + F (i− 2))zi
= z +
∞∑
i=2
F (i− 1)zi +
∞∑
i=2
F (i− 2)zi
= z + z
∞∑
i=2
F (i− 1)zi−1 + z2
∞∑
i=2
F (i− 2)zi−2
= z + z
∞∑
i=1
F (i)zi + z2
∞∑
i=0
F (i)zi
= z + zF(z) + z2F(z)
Logo,
z = F(z)− zF(z)− z2F(z) = F(z)(1− z − z2)
Portanto,
F(z) = z
1− z − z2
Consequentemente,
F(z) = 1√
5
(
1
1− φz −
1
1− φ˜z
)
(b) Para φ˜ < z < 1− φ,
∞∑
i=0
1√
5
(φi − φ˜i)zi = 1√
5
( ∞∑
i=0
(φz)i −
∞∑
i=0
(φ˜z)i
)
=
1√
5
(
1
1− φz −
1
1− φ˜z
)
= F(z)
(c) De
∑∞
i=0 F (i)z
i =
∑∞
i=0
1√
5
(φi − φ˜i)zi tem-se que F (i) = 1√
5
(φi − φ˜i), ∀i ≥ 0.
Observe que |φ˜
i|√
5
< 1√
5
< 1
2
. Portanto F (i) = φ
i√
5
, aproximado ao inteiro mais
pro´ximo.
4
(d) Para i ≥ 0,
F (i+ 2) = F (i) + F (i+ 1)
=
1√
5
(φi − φ˜i + φi+1 − φ˜i+1)
= φi
(φ+ 1)√
5
− φ˜i (φ˜+ 1)√
5
≥ φi (φ+ 1)√
5
− |φ˜|i (φ˜+ 1)√
5
Note que (1 + φ˜)/
√
5 > 0, |φ˜|i ≤ 0 e (1 + φ)/√5 > 1. Logo, se |φ˜|i (φ˜+1)√
5
≤
φi
(
(φ+1)√
5
− 1), enta˜o F (i+ 2) ≥ φi.
Observe que (φ+1)√
5
− 1 = (φ˜+1)√
5
e que |φ˜|i ≤ φi para todo i ≥ 0 (|φ˜|i → 0,
φi →∞ quando i→∞). Assim,
φi
(φ+ 1)√
5
− |φ˜|i (φ˜+ 1)√
5
≥ φi (φ+ 1)√
5
− φi
((φ+ 1)√
5
− 1
)
= φi
(e) Por (d) tem-se que, para n ≥ 2
F (n) ≥ φn−2 = 1
φ2
φn ∈ Ω(φn)
Por (c) tem-se que
F (n) =
1√
5
(φn − φ˜n) ≤ 1√
5
(φn + |φ˜n|) ∈ O(φn)
Portanto, F (n) ∈ Θ(φn).
4. (a) Para n = 1, basta mover o disco de A para C.
Para n > 1, observeque sa˜o feitos M(n − 1) movimentos para transportar
n − 1 discos de A para B, usando C como auxiliar. Um movimento do maior
disco e´ feito de A para C e depois mais M(n− 1) movimentos dos n− 1 discos
em B para C, usando A como torre auxiliar.
(b) M(n) =
∑n−1
i=0 2
i = 2
n−1
2−1 = 2
n − 1 ∈ Θ(2n).
5
Algoritmos de Ordenac¸a˜o
5.
W (n) =
n−1∑
i=1
⌊lg(i)⌋+ 1 ≤
n−1∑
i=1
lg(i) + 1
≤
∫ n
1
lg(i) + 1 di
=
1
ln(2)
∫ n
1
ln(i)di+
∫ n
1
1 di
=
1
ln(2)
(
n ln(n)− n+ 1)+ (n− 1)
= n lg(n) + n
(
1− 1
ln(2)
)
+
1
ln(2)
− 1
∈ Θ(n lg(n))
6. A seguir uma ana´lise do nu´mero de poss´ıveis soluc¸o˜es, pensando nas a´rvores de
decisa˜o associadas aos poss´ıveis algoritmos.
Assim, para a situac¸a˜o inicial a1 > a2 > a3 > a4 e b1 > b2, as poss´ıveis respostas
sa˜o 15. As a´rvores de decisa˜o com 15 folhas tera˜o no mı´nimo a altura ⌈lg 15⌉ = 4.
Existe enta˜o algum algoritmo associado a uma a´rvore de decisa˜o que precise no
pior caso de 4 comparac¸o˜es? Deve-se enta˜o analisar os passos de um algoritmo
hipote´tico.
Suponha que o primeiro passo de um algoritmo qualquer seja comparar b1 com uma
das quatro chaves a1, a2, a3 ou a4 (caso para b2 e´ ana´logo). Logo, se a primeira
comparac¸a˜o do algoritmo e´ a1 : b1 tem-se duas possibilidades: a1 < b1 e tem-se uma
lista ordenada de 5 elementos e uma pendeˆncia (o elemento b2) ou a1 > b1 com uma
lista ordenada de 3 elementos e 3 pendeˆncias. No primeiro sub-caso, as poss´ıveis
respostas sera˜o 5 e no segundo sub-caso sera˜o 10. Portanto, no pior caso tem-se
uma sub-a´rvore de decisa˜o com altura ⌈lg 10⌉ = 4. Consequentemente, tem-se uma
total para o pior caso de 5 comparac¸o˜es (no mı´nimo).
Os casos de algoritmos que realizem como primeira comparac¸a˜o a2 : b1, a3 : b1
e a4 : b1 sa˜o analisados similarmente e em todos eles tem-se pelo menos mais 4
comparac¸o˜es no pior caso.
Novamente, algoritmos que escolhem b2 para primeira comparac¸a˜o sa˜o ana´logos.
7. Para a otimizac¸a˜o do algoritmo de busca bina´ria para listas de comprimento 5
(Figura 1), a, b, c, d e e por exemplo, elementos isolados sa˜o inserido em listas
unita´rias obtendo a < b, c < d, e. Observe que desse ponto a inserc¸a˜o do elemento
isolado e em uma das duas listas de comprimento 2 na˜o e´ conveniente porque seria
melhor fazer uma inserc¸a˜o bina´ria em uma lista de tamanho 3, pois ambos tem
2 comparac¸o˜es no pior caso. Assim, as duas maiores chaves das duas listas de
tamanho 2 sa˜o comparadas, obtendo a estrutura qua´drupla ilustrada no terceiro
6
passo da Figura 1. Note que esse passo resume-se a uma inserc¸a˜o bina´ria em uma
lista unita´ria. A chave isolada e pode enta˜o ser inserida em uma lista de tamanho
3, obtendo-se o resultado ilustrado no quarto passo da figura ou um resultado mais
simples, onde a chave e e´ maior que a maior chave do quarteto. Finalmente, no
quinto passo, a chave pendente e´ inserida binariamente em uma lista de tamanho
2 ou 3. Observe que nos u´ltimos dois passo a busca bina´ria e´ usada de maneira
o´tima.
e
Binary insertion
e
e
db
a c
b
a
d
c
1. 2.
3.
4. 5.
Binary insertion
Figure 1: Ordenac¸a˜o com merge sort otimizado para listas de comprimento 5
8. Como descrito no enunciado, a ide´ia ba´sica por tra´s dos me´todos de otimizac¸a˜o dos
algoritmos de ordenac¸a˜o e´ utilizar-se de um mecanismo de escape na recursividade
de tal forma que o algortimo o´timo para uma entrada de tamanho espec´ıfico seja
chamado, evitando comparac¸o˜es desnecessa´rias.
Para o exemplo do merge otimizado tem-se
T (5 2k) =
k−1∑
i=0
2ic
n
2i
+ 7 2k = (5ck + 7)2k
enquanto o algoritmo sem otimizac¸a˜o teria uma custo de (5ck + 8)2k. Portanto, o
algoritmo otimizado faria 2k comparac¸o˜es a menos que o algoritmo usual.
9. (a) Insertion Sort
Para o insertion sort, o pior caso acontece quando tem-se zeros no fim da
lista, equivalendo a uma lista ordenada na ordem inversa (que e´ o pior caso
do algoritimo). Portanto, para uma lista de comprimento n com n/2 zeros no
7
fim da lista tem-se que
W (n) = (
n
2
− 1) + n
2
+
n∑
i=n/2+1
n
2
+ 1
= n− 1 +
n/2−1∑
i=1
n
2
+ 1
= n− 1 + n
2
− 1 +
(n
2
− 1
)n
2
=
n2
4
+ n− 2 ∈ Θ(n2)
Merge Sort
A comparac¸a˜o feita pelo merge sort usando < na˜o aproveita a informac¸a˜o de
quando duas chaves sa˜o iguais. O pior caso seria quando a lista tem 0’s e
1’s intercalados por toda lista. Assim, para cada iterac¸a˜o com uma lista de
comprimento n ter´ıam-se 3n/4 comparac¸o˜es e, para n = 2, W (2) = T (2) = 1.
Logo,
W (n) =
lg(n)−1∑
i=0
2i
3
4
n
2i
+ 2lg(n)−1
=
lg(n)−1∑
i=0
3
4
n +
n
2
=
3
4
n lg(n) +
n
2
∈ Θ(n lg(n))
Quick Sort
O pior caso, como para uma lista sem entradas repetidas, seria tal que o pro-
blema original de tamanho n seja dividido em um subproblema de tamanho
n − 1 e outro de tamanho 0. Uma lista com apenas 0’s ou 1’s teria esse
comportamento. Assim, W (n) =
∑n−1
i=1 (n− i) =
∑n−1
i=1 i =
1
2
(n+1)n ∈ Θ(n2).
(b) ENTRADA: lista L com 0’s e 1’s de tamanho n
SAI´DA: L com todos os 0’s, caso haja algum, nas primeiras posic¸o˜es.
BEGIN
zero=1;
FOR (i=1,i<=n,i++)
{
IF (L[i] == 0)
{
EXCHANGE L[i] <-> L[zero];
8
zero++;
}
}
END.
O pior caso sera´ o de uma lista com apenas 0’s. Assim, para um custo constante
c de troca de chaves,
W (n) =
n∑
i=1
1 + 1 + c = (2 + c)n = Θ(n)
(c) ENTRADA: lista L com chaves “vermelha”, “branca” e “azul” de tamanho n
SAI´DA: L ordenada por “vermelha”’s < “branca”’s < “azul”’s.
BEGIN
vermelho=1, azul=n ;
FOR (i=1,i<=azul,i++)
{
IF (L[i] == "vermelho")
{
EXCHANGE L[i] <-> L[vermelho];
vermelho++;
}
ELSE IF (L[i] == "azul")
{
EXCHANGE L[i] <-> L[azul];
azul--;
i--;
}
}
END.
Observe que o pior caso sera´ com uma lista com apenas “azul”, pois ter´ıamos
3 comparac¸o˜es e uma troca de chaves desnecessa´ria a cada iterac¸a˜o. Com um
9
custo constante c para troca de chaves tem-se
W (n) =
n∑
i=1
3 + c = (3 + c)n = Θ(n)
10. Exerc´ıcio de leitura (Verifique na Bibliografia o cap´ıtulo de [Baa88] sobre Sorting).
10
	lista1_20080326
	gabaritoL1

Outros materiais