Buscar

Trabalho de Cana

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 15 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 15 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 15 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

Universidade Federal do Ceará
Departamento de Computação
Construção e Análise de Algoritmos
Trabalho de Implementação 1
Relembre o Algoritmo 1 da Questão 4 da Lista 1, descrito abaixo:
Questão 4 da Lista 1 Considere o algoritmo NumRecursivo(N) abaixo. Determine o valor retornado
em notação assintótica.
Algorithm 1 inteiro NumRecursivo(inteiro N)
Valor = 0 //(Valor é uma variável local)
if N > 1 then
Valor = Valor + NumRecursivo(bN/5c) + NumRecursivo(bN/5c)
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + NumRecursivo(bN/10c) + N
end if
retorne Valor
(i) Implemente esse algoritmo na linguagem de sua preferência e monte uma curva com pelo menos 1000
valores retornados desse algoritmo para valores de N de 100.000 em 100.000.
Ou seja, N = 105, 2 · 105, 3 · 105, 4 · 105, . . ..
(ii) Na Lista 1, é pedido para provar que o número retornado pelo algoritmo é da ordem assintótica
de Θ(n · log(n)). Com os dados da curva que você obteve no parágrafo anterior, tente estimar qual seria a
melhor base B do logaritmo de modo que o número retornado seja aproximadamente ≈ n logB(n).
(Dica: Obter uma curva de bases e tirar a média).
(iii) Finalmente, tente fazer alguma conta teórica (sem usar as curvas geradas) que dê uma boa estimativa
para essa base B do logaritmo e compare com o valor obtido no parágrafo anterior.
(Dica: indução matemática ignorando casos bases).
Repita esse procedimento anterior para os seguintes Algoritmos 2 a 7:
Algorithm 2 inteiro NumRecursivo(inteiro N)
Valor = 0 //(Valor é uma variável local)
if N > 1 then
Valor = Valor + NumRecursivo(bN/5c) + NumRecursivo(bN/5c) + NumRecursivo(bN/5c)
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + NumRecursivo(bN/15c) + N
end if
retorne Valor
Algorithm 3 inteiro NumRecursivo(inteiro N)
Valor = 0 //(Valor é uma variável local)
if N > 1 then
Valor = Valor + NumRecursivo(bN/5c) + NumRecursivo(bN/5c)
Valor = Valor + NumRecursivo(bN/5c) + NumRecursivo(bN/5c)
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/30c) + N
end if
retorne Valor
Algorithm 4 inteiro NumRecursivo(inteiro N)
Valor = 0 //(Valor é uma variável local)
if N > 1 then
Valor = Valor + NumRecursivo(bN/5c)
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + NumRecursivo(bN/15c) + NumRecursivo(bN/15c) + N
end if
retorne Valor
Algorithm 5 inteiro NumRecursivo(inteiro N)
Valor = 0 //(Valor é uma variável local)
if N > 1 then
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + NumRecursivo(bN/12c) + NumRecursivo(bN/12c) + N
end if
retorne Valor
Algorithm 6 inteiro NumRecursivo(inteiro N)
Valor = 0 //(Valor é uma variável local)
if N > 1 then
Valor = Valor + NumRecursivo(bN/5c) + NumRecursivo(bN/5c) + NumRecursivo(bN/5c)
Valor = Valor + NumRecursivo(bN/5c) + NumRecursivo(bN/5c) + N
end if
retorne Valor
Algorithm 7 inteiro NumRecursivo(inteiro N)
Valor = 0 //(Valor é uma variável local)
if N > 1 then
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + NumRecursivo(bN/6c) + NumRecursivo(bN/6c) + NumRecursivo(bN/6c)
Valor = Valor + N
end if
retorne Valor
2
Figura 1: Exemplos de curvas a serem geradas
3
1 Solução do item (iii) do Algoritmo 1
Faremos a estimativa para a melhor base do logaritmo através de uma indução sem caso base:
Fixe N inteiro grande e seja T (N) o tempo do Algoritmo 1. Suponha que T (N ′) ≈ N ′ · logB N ′ para todo
N ′ < N . Queremos provar que também vale para N , ou seja, T (N) ≈ N · logB N . Vamos tentar estimar o
valor de B para que isso ocorra.
Do Algoritmo 1, temos que:
T (N) = 2 · T (N/5) + 3 · T (N/6) + T (N/10) + N
Pela hipótese da indução, temos que:
T (N) ≈ 2 ·
(
N
5
logB
N
5
)
+ 3 ·
(
N
6
logB
N
6
)
+
(
N
10
logB
N
10
)
+ N
T (N) ≈ 2N
5
(
logB N − logB 5
)
+
N
2
(
logB N − logB 6
)
+
N
10
(
logB N − logB 10
)
+ N
T (N) ≈
(
2N
5
logB N +
N
2
logB N +
N
10
logB N
)
+
(
N − 2N
5
logB 5 −
N
2
logB 6 −
N
10
logB 10
)
T (N) ≈
(
2
5
+
1
2
+
1
10
)
·N logB N + N ·
(
1 − 2
5
logB 5 −
1
2
logB 6 −
1
10
logB 10
)
T (N) ≈
(
4
10
+
5
10
+
1
10
)
·N logB N + N ·
(
1 − logB 52/5 − logB 61/2 − logB 101/10
)
T (N) ≈ N · logB N + N ·
(
1 − logB
(
52/5 · 61/2 · 101/10
))
Portanto, para que T (N) ≈ N · logB N , temos que B = 52/5 · 63/6 · 101/10.
Portanto B = 5.870345.
Observação: Note que essa não é uma conta oficial de indução matemática, visto que não tem caso base e
a aproximação ≈ não está bem definida. Além disso, a hipótese de indução é muito forte, forçando igualdade
T (N ′) ≈ N ′ · logB N ′ para todo N ′ < N , o que não ocorre (basta verificar os exemplos nos gráficos). Então,
formalmente falando, essa conta nem está correta. Mas, na prática, ela funciona sim e podemos considerar o
B como sendo mesmo a base teórica, pois podemos provar por indução matemática 100% correta seguindo
a mesma estrutura dessa conta que, para N suficientemente grande, T (N) < N · logb N para base b < B e
T (N) > N · logb N para base b > B. Resumindo, esta conta não está formalmente correta, mas nos retorna
o que queremos de fato: a base B teórica. Veja na figura seguinte como a curva T (N)/N adere bem ao
gráfico do logaritmo na base B.
4
Figura 2: Outro exemplo de curva a ser gerada (agora comparando com a base B teórica)
5
Construção e Análise de Algoritmos
Trabalho de Implementação 1
Victória Tomé Oliveira
1Departamento de Computação – Universidade Federal do Ceará (UFC)
Fortaleza – CE – Brasil
1. Questão 4
Considere os algoritmos NumRecursivo(N) determinou-se o valor retornado em notação
assintótica.
Inicialmente, implementou-se um algoritmo na linguagem C++ e, a partir disto foi
gerada uma curva de cada algoritmo para valores de N de 100.000 em 100.000.
A seguir, temos o código do algoritmo 1, para os demais algoritmos foi utilizado o
mesmo código, apenas modificando os parâmetros.
1 #include <iostream>
2 #include <fstream>
3 #include <cmath>
4 #include <ctime>
5 #include <climits>
6 #include <windows.h>
7
8 using namespace std;
9
10 void Questao4(int N);
11
12 int intQuestao4;
13
14 int main() {
15 int i,N;
16 ofstream arq;
17 arq<<fixed;
18 arq.open("questao4.txt");
19 arq<<"N\tT(N)\tN*log(N,10)\tN*log(N,6)\tN*log(N,5)"<<endl;
20
21 cout<<endl;
22 for (int i=10000; i<=3000000; i+=10000) {
23 intQuestao4 = 0;
24 Questao4(i);
25 arq<<i<<"\t"<<intQuestao4<<"\t"<<(int)(i*log(i)/log(10))
<<"\t"<<(int)(i*log(i)/log(6))<<"\t"<<(int)(i*log(i)/
log(5))<<"\t"<<endl;
26 }
27 arq.close();
28 cout << "<Questao4> Ok: ver arquivo questao4.txt" << endl;
29
30 }
31
32 void Questao4(int N) {
33 if (N<=1)
34 return;
35 intQuestao4 = intQuestao4 + N;
36 Questao4(N/5);
37 Questao4(N/5);
38 Questao4(N/6);
39 Questao4(N/6);
40 Questao4(N/6);
41 Questao4(N/10);
42 }
Na Lista 1, é foi pedido para provar que o núumero retornado pelo algoritmo é da
ordem assintótica de Θ(n·log(n)). A partir dos gráficos gerados a partir do algoritmo em
C++ a melhor base para os algoritmos 1, 2, 3, 4, 6 e 7 é Θ(n · logn6 ), entretando o algoritmo
5 tem base Θ(n · logn5 ). Nas Figuras a seguir é possı́vel observar os gráficos.
Faz-se a estimativa para a melhor base do logaritmo através de uma indução sem
caso base. Fixou-se o N inteiro grande e seja T(N) o tempo do Algoritmo. Suponha que
T (N) ≈ N ′ · logBN ′ para todo N ′ < N . Provando que também vale para N, ou seja,
T (N) ≈ N · logBN . Foi estimado o valor de B para que isso ocorra.
1.1. Algoritmo 1
Figura 1. Algoritmo 1.
Figura 2. Gráfico do Algoritmo 1.
Para o Algoritmo 1, tem-se que:
T (N) ≈ 2T (N
5
) + 3T (N
6
) + T (N
10
) + N
Pela hipótese da indução, tem-se que:
T (N) ≈ 2(N
5
logB
N
5
) + 3(N
6
logB
N
6
) + (N
10
logBN
10
) + N
T (N) ≈ 2N
5
(logBN − logB5) + 3N6 (logBN − logB6) +
N
10
(logBN − logB10) +N
T (N) ≈ (2N
5
logBN +
3N
6
logBN +
N
10
logBN) + (N − 2N5 logB5 −
3N
6
logB6 −
N
10
logB10)
T (N) ≈ (2N
5
+ 3N
6
+ N
10
)logBN + N(1 − 25 logB5 −
3
6
logB6 − 110 logB10)
T (N) ≈ (2
5
+ 3
6
+ 1
10
)NlogBN + N(1 − logB5
2
5 − logB6
3
6 − logB10
1
10 )
T (N) ≈ ( 4
10
+ 5
10
+ 1
10
)NlogBN + N(1 − logB5
2
5 − logB6
3
6 − logB10
1
10 )
T (N) ≈ (10
10
)NlogBN + N(1 − logB5
2
5 − logB6
3
6 − logB10
1
10 )
T (N) ≈ NlogBN + N(1 − logB(5
2
5 · 6 36 · 10 110 )
Portanto, para que T (N) ≈ NlogBN , temos que B ≈ 5
2
5 · 6 36 · 10 110
Conclui-se que, B ≈ 5, 87
1.2. Algoritmo 2
Figura 3. Algoritmo 2.
Figura 4. Gráfico do Algoritmo 2.
Para o Algoritmo 2, tem-se que:
T (N) ≈ 3T (N
5
) + 2T (N
6
) + T (N
15
) + N
Pela hipótese da indução, tem-se que:
T (N) ≈ 3(N
5
logB
N
5
) + 2(N
6
logB
N
6
) + (N
15
logB
N
15
) + N
T (N) ≈ 3N
5
(logBN − logB5) + 2N6 (logBN − logB6) +
N
15
(logBN − logB15) +N
T (N) ≈ (3N
5
logBN +
2N
6
logBN +
N
15
logBN) + (N − 3N5 logB5 −
2N
6
logB6 −
N
15
logB15)
T (N) ≈ (3N
5
+ 2N
6
+ N
15
)logBN + N(1 − 35 logB5 −
2
6
logB6 − 115 logB15)
T (N) ≈ (3
5
+ 2
6
+ 1
15
)NlogBN + N(1 − logB5
3
5 − logB6
2
6 − logB15
1
15 )
T (N) ≈ (18
30
+ 10
30
+ 2
30
)NlogBN + N(1 − logB5
3
5 − logB6
2
6 − logB15
1
15 )
T (N) ≈ (30
30
)NlogBN + N(1 − logB5
3
5 − logB6
2
6 − logB15
1
15 )
T (N) ≈ NlogBN + N(1 − logB(5
3
5 · 6 26 · 15 115 )
Portanto, para que T (N) ≈ NlogBN , temos que B ≈ 5
3
5 · 6 26 · 15 115
Conclui-se que, B ≈ 5, 71
1.3. Algoritmo 3
Figura 5. Algoritmo 3.
Figura 6. Gráfico do Algoritmo 3.
Para o Algoritmo 3, tem-se que:
T (N) ≈ 4T (N
5
) + T (N
6
) + T (N
30
) + N
Pela hipótese da indução, tem-se que:
T (N) ≈ 4(N
5
logB
N
5
) + (N
6
logB
N
6
) + (N
30
logB
N
30
) + N
T (N) ≈ 4N
5
(logBN − logB5) + N6 (logBN − logB6) +
N
30
(logBN − logB30) + N
T (N) ≈ (4N
5
logBN+
N
6
logBN+
N
30
logBN)+(N− 4N5 logB5−
N
6
logB6−N30 logB30)
T (N) ≈ (4N
5
+ N
6
+ N
30
)logBN + N(1 − 45 logB5 −
1
6
logB6 − 130 logB30)
T (N) ≈ (4
5
+ 1
6
+ 1
30
)NlogBN + N(1 − logB5
4
5 − logB6
1
6 − logB30
1
30 )
T (N) ≈ (24
30
+ 5
30
+ 1
30
)NlogBN + N(1 − logB5
4
5 − logB6
1
6 − logB30
1
30 )
T (N) ≈ (30
30
)NlogBN + N(1 − logB5
4
5 − logB6
1
6 − logB15
1
30 )
T (N) ≈ NlogBN + N(1 − logB(5
4
5 · 6 16 · 30 130 ))
Portanto, para que T (N) ≈ NlogBN , temos que B ≈ 5
4
5 · 6 16 · 30 130
Conclui-se que, B ≈ 5, 47
1.4. Algoritmo 4
Figura 7. Algoritmo 4.
Figura 8. Gráfico do Algoritmo 4.
Para o Algoritmo 4, tem-se que:
T (N) ≈ T (N
5
) + 4T (N
6
) + 2T (N
15
) + N
Pela hipótese da indução, tem-se que:
T (N) ≈ (N
5
logB
N
5
) + 4(N
6
logB
N
6
) + 2(N
15
logB
N
15
) + N
T (N) ≈ N
5
(logBN − logB5) + 4N6 (logBN − logB6) +
2N
15
(logBN − logB15) +N
T (N) ≈ (N
5
logBN +
4N
6
logBN +
2N
15
logBN) + (N − N5 logB5 −
4N
6
logB6 −
2N
15
logB15)
T (N) ≈ (N
5
+ 4N
6
+ 2N
15
)logBN + N(1 − 15 logB5 −
4
6
logB6 − 215 logB15)
T (N) ≈ (1
5
+ 4
6
+ 2
15
)NlogBN + N(1 − logB5
1
5 − logB6
4
6 − logB15
2
15 )
T (N) ≈ ( 6
30
+ 20
30
+ 4
30
)NlogBN + N(1 − logB5
1
5 − logB6
4
6 − logB15
2
15 )
T (N) ≈ (30
30
)NlogBN + N(1 − logB5
1
5 − logB6
4
6 − logB15
2
15 )
T (N) ≈ NlogBN + N(1 − logB(5
1
5 · 6 46 · 15 215 )
Portanto, para que T (N) ≈ NlogBN , temos que B ≈ 5
1
5 · 6 46 · 15 215
Conclui-se que, B ≈ 6, 53
1.5. Algoritmo 5
Figura 9. Algoritmo 5.
Figura 10. Gráfico do Algoritmo 5.
Para o Algoritmo 5, tem-se que:
T (N) ≈ 5T (N
6
) + 2T (N
12
) + N
Pela hipótese da indução, tem-se que:
T (N) ≈ 5(N
6
logB
N
6
) + 2(N
12
logB
N
12
) + N
T (N) ≈ 5N
6
(logBN − logB6) + 2N12 (logBN − logB12) + N
T (N) ≈ 5N
6
logBN +
2N
12
logBN) + (N − 5N6 logB6 −
2N
12
logB12)
T (N) ≈ (5N
6
+ 2N
12
)logBN + N(1 − 56 logB6 −
2
12
logB12)
T (N) ≈ (5
6
+ 2
12
)NlogBN + N(1 − logB6
5
6 − logB12
2
12 )
T (N) ≈ (10
12
+ 2
12
)NlogBN + N(1 − logB6
5
6 − logB12
2
12 )
T (N) ≈ (12
12
)NlogBN + N(1 − logB6
5
6 − logB12
2
12 )
T (N) ≈ NlogBN + N(1 − logB(6
5
6 · 12 212 )
Portanto, para que T (N) ≈ NlogBN , temos que B ≈ 6
5
6 · 12 212
Conclui-se que, B ≈ 6, 73
1.6. Algoritmo 6
Figura 11. Algoritmo 6.
Figura 12. Gráfico do Algoritmo 6.
Para o Algoritmo 6, tem-se que:
T (N) ≈ 5T (N
5
) + N
Pela hipótese da indução, tem-se que:
T (N) ≈ 5(N
5
logB
N
5
) + N
T (N) ≈ 5N
5
(logBN − logB5) + N
T (N) ≈ 5N
5
logBN + (N − 5N5 logB5)
T (N) ≈ 5N
5
NlogBN + N(1 − 55 logB5)
T (N) ≈ 5
5
NlogBN + N(1 − logB5
5
5 )
T (N) ≈ NlogBN + N(1 − logB5
5
5 )
T (N) ≈ NlogBN + N(1 − logB(51))
Portanto, para que T (N) ≈ NlogBN , temos que B ≈ 5
1.7. Algoritmo 7
Figura 13. Algoritmo 7.
Figura 14. Gráfico do Algoritmo 7.
Para o Algoritmo 7, tem-se que:
T (N) ≈ 6T (N
6
) + N
Pela hipótese da indução, tem-se que:
T (N) ≈ 6(N
6
logB
N
6
) + N
T (N) ≈ 6N
6
(logBN − logB6) + N
T (N) ≈ 6N
6
logBN + (N − 6N6 logB6)
T (N) ≈ 6N
6
NlogBN + N(1 − 66 logB6)
T (N) ≈ 6
6
NlogBN + N(1 − logB6
6
6 )
T (N) ≈ NlogBN + N(1 − logB6
6
6 )
T (N) ≈ NlogBN + N(1 − logB(61))
Portanto, para que T (N) ≈ NlogBN , temos que B ≈ 6
	Questão 4
	Algoritmo 1
	Algoritmo 2
	Algoritmo 3
	Algoritmo 4
	Algoritmo 5
	Algoritmo 6
	Algoritmo 7

Outros materiais