Você está na página 1de 13

COMPARAO MTODOS DIRETOS E ITERATIVOS

MEDIDA DO TEMPO DE EXECUO DE UM PROGRAMA


O projeto de algoritmos fortemente influenciado pelo estudo de seus comportamentos. Depois que um problema analisado e decises de projeto so finalizadas, necessrio estudar as vrias opes de algoritmos a serem utilizados, considerando os aspectos de tempo de execuo e espao ocupado. Muitos desses algoritmos so encontrados em reas como pesquisa operacional, otimizao, teoria dos grafos, estatstica, probabilidades, entre outras.

CUSTO DE UM ALGORITMO
Determinando o menor custo possvel para resolver problemas de uma dada classe, temos a medida da dificuldade inerente para resolver o problema. Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo timo para a medida de custo considerada. Podem existir vrios algoritmos para resolver o mesmo problema. Se a mesma medida de custo aplicada a diferentes algoritmos, ento possvel compar-los e escolher o mais adequado.

FUNO DE COMPLEXIDADE

A complexidade computacional de um algoritmo se refere estimativa do esforo computacional despendido para resolver o problema e medido pelo nmero necessrio de operaes aritmticas e lgicas. (Ex.: nmero de Adies e Multiplicaes para resolver um sistema linear). Para medir o custo de execuo de um algoritmo comum definir uma funo de custo ou funo de complexidade f. f(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n. A complexidade de tempo na realidade no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada.

EXEMPLO - MAIOR ELEMENTO

Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros A[1::n]; n 1.


function Max (var A: Vetor ) : integer ; var i , Temp: integer ; begin Temp := A[1] ; for i := 2 to n do i f Temp < A[ i ] then Temp := A[ i ] ; Max := Temp; end;

Seja f uma funo de complexidade tal que f(n) o nmero de comparaes entre os elementos de A, se A contiver n elementos. Logo f(n) = n - 1; para n > 0. Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n 1, faz pelo menos n - 1 comparaes.

TAMANHO DA ENTRADA DE DADOS


A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada dos dados. comum considerar o tempo de execuo de um programa como uma funo do tamanho da entrada.

ELIMINAO DE GAUSS

Algoritmo:
function [x] = gauss(n, A, b) c = [A b]; for ( j = 1:(n - 1) ) r = 1 / c(j,j); for ( i = (j + 1):n ) Mult = c(i,j) * r; c(i,j) = c(i,j) - Mult * c(j,j); for ( k = (j + 1):(n + 1) ) c(i,k) = c(i,k) - Mult * c(j,k); endfor endfor endfor x = zeros(n,1); x(n) = c(n,(n+1)) / c(n,n); for ( i = (n - 1):-1:1 ) Soma = 0; for ( j = (i + 1):n ) Soma = Soma + c(i,j) * x(j); endfor x(i) = ( c(i,(n+1)) - Soma ) / c(i,i); endfor endfunction

ELIMINAO DE GAUSS

Principal parte:
for ( j = 1:(n - 1) ) ... for ( i = (j + 1):n ) ... for ( k = (j + 1):(n + 1) ) ... endfor endfor endfor

Complexidade O(n3) Mtodos Diretos = O(n3)

JACOBI

Algoritmo:
function [x] = jacobi(n, A, b, Toler, IterMax) for ( i = 1:n ) r = 1 / A(i,i); for ( j = 1:n ) if ( i ~= j ) A(i,j) = A(i,j) * r; endif endfor b(i) = b(i) * r; x(i) = b(i); endfor Iter = 0; while (1) Iter = Iter + 1; for ( i = 1:n ) Soma = 0; for ( j = 1:n ) if ( i ~= j ) Soma = Soma + A(i,j) * x(j); endif endfor v(i) = b(i) - Soma; endfor NormaNum = 0; NormaDen = 0; for ( i = 1:n ) t = abs( v(i) - x(i) ); if ( t > NormaNum ) NormaNum = t; endif if ( abs(v(i)) > NormaDen ) NormaDen = abs(v(i)); endif x(i) = v(i); endfor NormaRel = NormaNum / NormaDen; if ( (NormaRel <= Toler) | (Iter >= IterMax) ) break; endif endwhile if ( NormaRel <= Toler ) CondErro = 0; else CondErro = 1; endif endfunction

JACOBI

Principal parte:
while (1) ... for ( i = 1:n ) ... for ( j = 1:n ) ... endfor endfor ... for ( i = 1:n ) ... endfor ... if ( (NormaRel <= Toler) | (Iter >= IterMax) ) break; endif endwhile

Complexidade 2kn2 + n2 + n + 2k = O(n2) Mtodos Iterativos = O(n2)

EXECUO
A = 10x10, 20x20, 30x30, ..., 200x200 n = 10, 20, 30, ..., 100.

Mtodo Direto - Eliminao de Gauss Mtodo Iterativo - Jacobi


Toler = 10-7 IterMax = 50

COMPARAO ENTRE ELIMINAO DE GAUSS E JACOBI


100

80

Tempo (s)

60 Eliminao Gauss Jacobi 40

20

0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200

DVIDAS?

Você também pode gostar