Professional Documents
Culture Documents
DE MINAS GERAIS
EXPERIMENTO 01
Este experimento consiste em medir o tempo de execuo de um programa de complexidades
n, n e n. A complexidade do programa pode ser variada pelo nmero de laos for no mesmo. Foi
utilizado o programa mede_tempo.c, construdo em sala de aula, para a realizao das medies.
As medies foram realizadas em um computador do tipo Desktop com um processador Pentium(R) Dual-Core com 2,3 GHz e memria RAM de 2,00 Gb rodando o sistema operacional
Ubuntu verso 13.10 e o compilador utilizado foi o gcc.
A Tabela 01 abaixo mostra os dados obtidos. O valor de N definido como potncias de 10.
Os resultados obtidos esto medidos em segundos.
Tabela 01: Valores do tempo para as ordens de complexidade
n, n e n em funo do nmero de instrues N executadas
N
O(n)
O(n)
O(n)
1.000e+03
4.550e+00
5.000e+03
5.687e+02
1.000e+04
4.500e-01
4.322e+03
1.000e+05
4.526e+01
**
1.000e+06
4.357e+03
**
1.000e+07
4.000e-02
**
**
1.000e+08
4.500e-01
**
**
1.000e+09
4.530e+00
**
**
1.000e+10
3.941e+01
**
**
O(n) resolve o problema em um tempo bem menor que algoritmos de ordem O(n) e O(n).
Grficos relativos Tabela 01:
EXPERIMENTO 02
Este experimento prope que se desenvolva um algoritmo capaz de retornar o valor da soma
da maior sequncia consecutiva de elementos em um vetor de inteiros.
PROJETO DO ALGORITMO
Algoritmo MaiorSomaConsecutiva
fim algoritmo
Refinamento Algoritmo MaiorSomaConsecutiva
50
89
23
53
25
67 -48 -82
-2 34 -98
18 -66 -94
74
42
53 -90 -68
-3
9 -37
4 -12 -57
ANLISE DA COMPLEXIDADE
Denotemos por N o valor de TAM_VEC e elejamos como instruo mais importante a que
est na linha 18 do algoritmo final na pgina anterior: soma soma + v(j). A funo de custo do
algoritmo, f(n), dada por:
n
i=0
i=0
i=0
1 = 1(n i + 1) = n i + 1 = n(n 0 + 1)
i=0 j=i
2
i=0
n + n
n
n
n
3n
+n+1= +
+1
2
2
2
2
f (n) =
n(n+1)
+ 1(n 0 + 1)
2
n + 3 n + 2
2
n + 3 n + 2
e g(n) = n2 , temos:
2
n + 3n + 2
n2 3 n 2 2 cn2
3 2
2
0
cn 0 2 + 2 + 2 2 0 1 + + 2 2 c
2
n n
n
n
n
n
Para n0 = 1 e c = 3 , a relao acima se satisfaz n n 0 .
1.000e+04
5.000e+04
1.000e+05
5.000e+05
Tempo (s)
2.900e-01
7.370e+00
2.947e+01
7.548e+02
ANLISE DO EXPERIMENTO 2
Utilizando-se a tcnica dos refinamentos sucessivos projetou-se um algoritmo para resolver o
problema deste experimento. Esta tcnica mostra-se bastante eficaz na elaborao de algoritmos
grandes e complexos, uma vez que o desenvolvedor no precisa se preocupar com os detalhes de
uma linguagem programao especfica, concentrando-se somente na lgica do algoritmo.
Atravs de testes exaustivos com vetores com uma quantidade de elementos reduzida, constatou-se que o algoritmo implementado cumpre corretamente seu objetivo. Em seguida, utilizando
vetores de 20 50 elementos, o algoritmo tambm produziu a sada desejada.
Pela anlise de complexidade, obteve-se uma funo de ordem de complexidade O(n), o que
condiz com a natureza do algoritmo. Como a parte do algoritmo que lida com o processamento do
vetor a fim de determinar a maior soma consecutiva foi escrita com duas iteraes aninhadas, j era
de se esperar que este algoritmo apresentasse esta ordem de complexidade.
Analisando-se os tempos de execuo utilizando o mesmo procedimento adotado no experimento 1 (atravs do programa mede_tempo.c), observou-se que o tempo de execuo do algoritmo
proporcional ao quadrado do nmero de elementos do vetor. Por exemplo, se aumentarmos de
1.000 para 10.000 o nmero de elementos do vetor, o tempo de execuo ser 10 vezes maior.
CONCLUSO
Aps realizar este trabalho prtico, pode-se constatar que o tempo de execuo de um
algoritmo diretamente proporcional sua ordem de complexidade. Isto uma caracterstica
importante a ser levada em considerao se o algoritmo processa um nmero muito grande de
dados ou se ele executado muitas vezes. A complexidade de tempo de um algoritmo quantifica o
tempo tomado por um algoritmo para rodar em funo do tamanho da entrada do problema.
Um mesmo problema pode ser resolvido por diversos algoritmos. A escolha do algoritmo deve
estar condizente com aplicao do mesmo. Algoritmos com ordem de complexidade menores
devem ser elegidos para resolver problemas que tem uma entrada de dados maior.