Você está na página 1de 6

UNIVERSIDADE DE SÃO PAULO

São Carlos, 29 de junho de 2018


Aluno: Tiago Xavier Silva Nº USP: 10696750

TRABALHO – P2 DE PROGRAMAÇÃO

1) Escreva um programa em C que calcule ou aproxime o menor valor


da soma F1 = x1² + x2², com x1 e x2 ∈ [-1; 1].

TEMPO DE EXECUÇÃO
40000

35000
TEMPO DE EXECUÇÃO (ms)

30000

Bsort
25000
Qsort
20000 Linear (Bsort)
Linear (Qsort)
15000

10000

5000

0
0 100000 200000 300000 400000 500000 600000 700000
ITERAÇÕES

MÍNIMOS DE F1
1.00E-03
Bsort
8.00E-04
Qsort
Linear (Bsort)
6.00E-04
Linear (Qsort)
Fmínimo

4.00E-04

2.00E-04

0.00E+00

-2.00E-04
ITERAÇÕES
Obs.: A partir de 600.000 iterações, o programa não consegue mais ser
executado para a versão utilizando Bubble e Qsort. Provavelmente, existe
também limitação da memória RAM do computador; mesmo assim, percebe-se,
pelo segundo gráfico, que os mínimos da função tendem ao valor esperado e,
pelo primeiro gráfico, que o tempo de execução está condizente com a
otimização pelo uso da nova função de ordenamento.

2) a) Altere o programa feito na questão 1 para calcular ou aproximar o


menor valor de F2 = (x1 – 0,5)² + (x2 – 0,5)², com x1 e x2 ∈ [-1; 1].

TEMPO DE EXECUÇÃO
30000
Qsort
TEMPO DE EXECUÇÃO (ms)

25000 Bsort

Linear (Qsort)
20000
Linear (Bsort)

15000

10000

5000

0
0 100000 200000 300000 400000 500000 600000
ITERAÇÕES

MÍNIMOS DE F2
0.0012

0.001
Qsort
0.0008
Fmínimo

0.0006 Bsort

0.0004

0.0002

0
0 100000 200000 300000 400000 500000 600000

ITERAÇÕES

Obs.: A partir de 600.000 iterações, o programa não consegue mais ser


executado para a versão utilizando Bubble e Qsort. Provavelmente, existe
também limitação da memória RAM do computador; mesmo assim, percebe-se,
pelo segundo gráfico, que os mínimos da função tendem ao valor esperado e,
pelo primeiro gráfico, que o tempo de execução está condizente com a
otimização pelo uso da nova função de ordenamento.

b) Altere o programa feito na questão 2(a) para calcular ou aproximar o


menor valor de F3 = (x1 – c1)² + (x2 – c2)², com x1 e x2 ∈ [-1; 1] e c1 e c2
constantes ∈ [0; 1] escolhidas pelo usuário.

Para c1 = 0,6 e c2 = 0,3 definidos pelo usuário:

TEMPO DE EXECUÇÃO
25000

Bsort
Qsort
TEMPO DE EXECUÇÃO (ms)

20000
Linear (Bsort)
Linear (Qsort)
15000

10000

5000

0
0 100000 200000 300000 400000 500000 600000
ITERAÇÕES

MÍNIMOS DE F3
0.0025

Bsort
0.002
Qsort

Expon. (Bsort)
Fmínimo

0.0015
Expon. (Qsort)

0.001

0.0005

ITERAÇÕES
Obs.: A partir de 600.000 iterações, o programa não consegue mais ser
executado para a versão utilizando Bubble e Qsort. Provavelmente, existe
também limitação da memória RAM do computador; mesmo assim, percebe-se,
pelo segundo gráfico, que os mínimos da função tendem ao valor esperado e,
pelo primeiro gráfico, que o tempo de execução está condizente com a
otimização pelo uso da nova função de ordenamento.

c) Altere o programa feito na questão 2(b) para calcular ou aproximar o


menor valor de F4 = (x1 – c1)² + (x2 – c2)², com x1, x2 ∈ {90, 91, 92...120} e c1 e c2
constantes ∈ {90, 91, 92 ... 120} escolhidas pelo usuário.

Para c1 = 110 e c2 = 97 definidos pelo usuário:

TEMPO DE EXECUÇÃO
30000
Bsort
TEMPO DE EXECUÇÃO (ms)

25000 Qsort
Linear (Bsort)
20000 Linear (Qsort)

15000

10000

5000

0
0 100000 200000 300000 400000 500000 600000
ITERAÇÕES

MÍNIMOS DE F3
12

10

8
Fmínimo

0
0 100000 200000 300000 400000 500000 600000
ITERAÇÕES
Obs.: A partir de 600.000 iterações, o programa não consegue mais ser
executado para a versão utilizando Bubble e Qsort. Provavelmente, existe
também limitação da memória RAM do computador; mesmo assim, percebe-se,
pelo segundo gráfico, que os mínimos da função tendem ao valor esperado e,
pelo primeiro gráfico, que o tempo de execução está condizente com a
otimização pelo uso da nova função de ordenamento.

d) Escreva um programa para descobrir uma palavra de dois caracteres


p1p2 (escolhida pelo usuário), em que p1 e p2 ∈ (a , ... , z) (todas letras
minúsculas).

BUBBLE SORT QSORT

N TEMPO DE TEMPO DE
PALAVRA PALAVRA
RETORNO EXECUÇÃO RETORNO EXECUÇÃO
DIGITADA DIGITADA
(ms) (ms)

10 kl kl 1 sa sa 0
20 as as 1 er er 0
30 ol ok 1 kl kk 1
40 mq kq 2 mr kr 1
50 fa ba 1 hi hi 1
60 ag ag 3 xx xv 1
70 la la 4 qw qw 1
80 tm tm 4 jj jh 1
90 az az 15 ec eb 3
100 pk pk 7 al al 1
200 hs gp 5 cg cf 2
300 na am 44 fs fs 9
400 be bc 12 mm lm 10
500 qm pm 16 ty tu 9
600 dj dg 32 bu bu 16
700 dg dg 66 mk mk 18
800 ab bb 58 hg hg 20
900 vh ug 26 ua ta 23
1000 na ak 29 cx cx 13
2000 ak ak 103 la ka 55
3000 nb na 152 bq bq 83
4000 ff ff 204 js js 114
5000 gm el 200 qq pq 69
6000 el el 550 bv bv 186
7000 zr yr 353 us ur 94
9000 vb va 231 ka ka 205
10000 ym yh 259 po on 117
20000 yh yg 287 qr qo 131
30000 za wa 2265 af af 452
40000 po po 944 uy uy 573
50000 df cd 1752 qa ao 519
60000 hh hf 2559 ks hs 782
70000 xq xp 3029 uu su 792
80000 aa aa 5188 xk wk 1137
90000 av av 6370 sh rf 1411
100000 gy gv 3870 zo yo 1861
200000 az ay 10581 lk lh 1459
300000 op mo 12819 am am 5015
400000 av av 25281 em bn 4767
500000 jf jf 23083 xx tv 7016

O programa deu um retorno de 40,5% palavras realmente


correspondestes com as digitadas pelo usuário e 45,2% de palavras
parcialmente correspondentes. Esse resultado é consistente dado o uso de
função pseudo-aleatória no programa, de forma que é, inclusive, possível
observar que as palavras parcialmente corretas diferem geralmente de
caracteres próximos aos das originais. De qualquer maneira, a precisão do
programa tenderia a aumentar com o aumento do número de iterações N,
fornecendo respostas cada vez mais equivalentes, porém devido a limitação do
computador não foi possível atingir esse ideal. O gráfico relativo ao tempo de
execução foi anexado abaixo:

TEMPO DE EXECUÇÃO
30000
Bsort
TEMPO DE EXECUÇÃO (ms)

25000
Qsort
20000 Linear (Bsort)
Linear (Qsort)
15000

10000

5000

0
0 100000 200000 300000 400000 500000 600000
-5000
ITERAÇÕES

Você também pode gostar