Razão de crescmento desse temo Imortânca de análse de algortmos Um mesmo roblema ode, em mutos casos, ser resolvdo or város algortmos. Nesse caso, qual algortmo deve ser o escolhdo? Crtéro 1: fácl comreensão, codfcação e correção Geralmente, são algortmos nefcentes Este crtéro sera adequado se o algortmo fosse executado oucas vezes: Custo de rogramação (C) > Custo de execução (Ce) Crtéro 2: efcênca no uso dos recursos comutaconas e radez na execução Geralmente, são algortmos mas comlcados Crtéro mas adequado ara o caso de algortmos muto utlzados ( C < Ce ) Exemlo: Regra de Cramer ara a solução de sstemas de equações lneares Medção de efcênca: uso de memóra e temo de execução Nesta dsclna, a ênfase é dada ara algortmos efcentes no temo de execução. Há mutos casos em que algortmos smles não são executados em temo vável Consderando n = 20, quantos determnantes seram calculados? 20 ara os numeradores e 1 ara o denomnador Cálculo do número m de multlcações: multlcações 21 det 20 = 21 ( 20m + 20 det 19 ) = 21 ( 20m + 20 ( 19m + 19 det 18 )) = 21 ( 20m + 20 ( 19m + 19 ( 18m + 18 det 17 ))) = 21 ( 20m + 20 ( 19m + 19 ( 18m + 18 ( 17m + 17 (... ( 3m + 3 ( 2m )...))))) Lembrando do cálculo recursvo de determnante: 1
= 21 ( 20m + 20 ( 19m + 19 ( 18m + 18 ( 17m + 17 (... ( 3m + 3 ( 2m )...))))) = m ( 2 x 3 x 4 x 5 x... x 20 x 21 + + 3 x 4 x 5 x... x 20 x 21 + + 4 x 5 x... x 20 x 21 + + 5 x... x 20 x 21 + : : + 19 x 20 x 21 + + 20 x 21 ) Utlzando um suercomutador atual: 10 11 multlcações or segundo Temo gasto: 8,778 x 10 8 s = 27,8 anos! Um algortmo mas efcente é o Método da Elmnação de Gauss 209 dvsões + 2850 multlcações Razão de crescmento desse temo AVALIAÇÃO DO TEMPO DE EXECUÇÃO Ex: método de ordenação Bubble-Sort 32 8 40 21 3 97 15 aux = A[]; A[] = A[+1]; A[+1] = aux; trocou = TRUE; = 1; 8 32 40 21 3 97 15 8 32 40 21 3 97 15 8 32 21 40 3 97 15 8 32 21 3 40 97 15 8 32 21 3 40 97 15 8 32 21 3 40 15 97 Ex: método de ordenação Bubble-Sort 8 32 21 3 40 15 97 aux = A[]; A[] = A[+1]; A[+1] = aux; trocou = TRUE; = 1; 8 32 21 3 40 15 97 8 21 32 3 40 15 97 8 21 3 32 40 15 97 8 21 3 32 40 15 97 8 21 3 32 15 40 97... 3 8 15 21 32 40 97 Oeração Temo(ns) Oeração Temo(ns) Oeração Temo(ns) Atrb nt 1 + - < <== nt 2 + - < <== float 15 Atrb float 2 && 1,5 [ ] 8 * nt 5 * float 20 / nt 8 / float 30 aux = A[]; A[] = A[+1]; A[+1] = aux; trocou = TRUE; = 1; 3 Obs: suomos que vetor A contém números do to float 4 Mas quantas vezes cada trecho será executado? 2
Análse do or caso Ocorrerá quando o teste do f for semre verdadero O que sso sgnfca sso? aux = A[]; A[] = A[+1]; A[+1] = aux; trocou = TRUE; = 1; Vetor em ordem decrescente executado 1 vez executado n vezes executado +1 vezes a cada teração do whle externo 79 ns executado vezes a cada teração do whle externo Análse do or caso Ocorrerá quando o teste do f for semre verdadero O que sso sgnfca sso? aux = A[]; A[] = A[+1]; A[+1] = aux; trocou = TRUE; 79 ns Total = (n-1) +... + 3 + 2 + 1 = 1; Vetor em ordem decrescente executado 1 vez executado n vezes Total = n + (n-1) +... + 3 + 2 T(n) = 4 + 3,5n + 2(n-1) + 2 (n + (n-1) +... + 3 + 2) + 79 ((n-1) + (n-2) +... + 2 + 1) + 3(n-1) aux = A[]; A[] = A[+1]; A[+1] = aux; trocou = TRUE; 79 ns Total = (n-1) +... + 3 + 2 + 1 = 1; executado 1 vez executado n vezes Total = n + (n-1) +... + 3 + 2 Por caso do Bubble-Sort: T(n) = 4 + 3,5n + 2(n-1) + 2 (n + (n-1) +... + 3 + 2) + 79 ((n-1) + (n-2) +... + 2 + 1) + 3(n-1) T(n) = 40,5n 2-30n - 3 Quando n aumenta ndefndamente, o termo com n 2 redomna sobre os demas T(n) é roorconal a n 2 Também há casos melhores: nem todos os testes do comando f são semre verdaderos Casos mas estudados: Por caso Caso médo Razões ara estudar o or caso: O temo de execução do or caso de um algortmo é o lmte sueror do temo de execução ara uma entrada qualquer. Para alguns algortmos, o or caso ocorre com bastante frequênca. Geralmente, o caso médo não é fácl de ser calculado. Váras vezes, ele é quase tão rum quanto o or caso. Razão de crescmento desse temo 3
Ex1: Sejam A1 e A2 dos algortmos que resolvem o mesmo roblema, e com os resectvos temos de execução: T 1 ( n ) = 100n 2 T 2 ( n ) = 5n 3 Qual desses algortmos é o melhor? Deenderá do valor de n Emate: 100n 2 = 5n 3 => n = 20 Para n < 20, A2 é melhor Para n > 20, A1 é melhor A1 é consderado o melhor Ex2: Consdere 4 algortmos que resolvem o mesmo roblema de tamanho n. Abaxo, seus resectvos temos de execução: T 1 ( n ) = 100n T 2 ( n ) = 5n 2 T 3 ( n ) = n 3 /2 T 4 ( n ) = 2 n Suonha que esse roblema recse ser resolvdo em no máxmo 1.000 segundos. T(n) n ara 10 3 seg 100n 10 5n 2 14,14 n 3 /2 12,60 2 n 9,97 Os roblemas soluconáves elos 4 algortmos têm tamanho da mesma ordem de magntude (em torno de 10). Consderando uma máquna mas ráda, elevemos esse temo ara 10.000 segundos. T(n) n ara 10 3 seg n ara 10 4 seg Ganho 100n 10 100 10 5n 2 14,14 44,72 3,16 n 3 /2 12,60 27,14 2,15 2 n 9,97 13,28 1,33 Reare que o algortmo 4 só oderá resolver um roblema 1,33 vezes maor... Razão de crescmento desse temo Seja o temo de execução de um algortmo gual a uma somatóra de termos (funções do tamanho da entrada): T 1 (n) = O(n 3 ) T 1 (n) = c 1.n 3 + c 2.n 2 + c 3.n + c 4 T 2 (n) = 2 n + n 3 /2 + 5n 2 + 100n T 2 (n) = O(2 n ) À medda que n aumenta ndefndamente, um dos termos assa a ter domíno sobre os demas: T 1 (n) é roorconal a n 3 : é da ordem de n 3 T 2 (n) é roorconal a 2 n : é da ordem de 2 n 4
Defnção: T(n) = O (f(n)), ou seja, T(n) é da ordem de f(n) se e somente se exstrem constantes ostvas c e n 0 tas que, ara qualquer n n 0, T(n) c.f(n) Ex1: T(n) = (n+1) 2 = O(n 2 ) (n+1) 2 4n 2, n 1 (basta escolher n o = 1 e c = 4) Podera ser c = 2? Sm, mas n 0 = 3 n 0 1 2 3 4 5 (n+1) 2 1 4 9 16 25 36 4n 2 0 4 16 36 64 100 2n 2 0 2 8 18 32 50 Ex2: Por caso do Bublle Sort T(n) = 40,5n 2 30n 3 = O(n 2 ) T(n) 40,5n 2 (sendo n o = 1 e c = 40,5) Ex3: Seja T(n) o olnômo de grau N +, onde a 0 0: T(n) = a 0.n + a 1.n -1 +... + a -1.n + a a 0.n + a 1.n -1 +... + a -1.n + a a 0.n + a 1.n +... + a -1.n + a.n (a 0 + a 1 +... + a -1 + a ).n c.n, ara n 1 T(n) = O(n ) T(n) = O(f(n)) f(n) é um lmte sueror ara a taxa de crescmento de T(n) Dado T(n), temos uma únca f(n)? Não, os váras funções odem satsfazer a defnção. Exemlo: T(n) = 4n 2 + 3n + 1 T(n) é O(n 2 ), O(n 3 ), O(n 10 ) No entanto, T(n) não é O(n) Na análse de algortmos, as taxas mas usadas são n 2, n 3, n, log n, n.log n, 2 n, 3 n, etc. Dentre todas as ossíves funções f(n), o objetvo é encontrar a que tenha o menor crescmento ossível Notações smlares: Bg-Omega T(n) = O(f(n)) T(n) c.f(n) ara n n 0 Bg-Teta f(n) é um lmte sueror ara T(n) T(n) = Ω(f(n)) T(n) c.f(n) ara n n 0 f(n) é um lmte nferor ara T(n) T(n) = Θ(f(n)) T(n) c 1.f(n) ara n n 0 T(n) c 2.f(n) ara n n 0 f(n) é um lmte nferor e sueror de T(n) Razão de crescmento desse temo 1. Provar que n 3 O(n 2 ) Por absurdo, suonhamos que n 3 = O(n 2 ) Pela defnção, exstem constantes ostvas c e n 0 tas que, ara n n o, n 3 c.n 2 Logo, c n. Portanto, à medda que n cresce ndefndamente, c também crescerá Isso contrara a defnção de c ser constante 5
2. Provar que 3 n O(2 n ) Por absurdo, suonhamos que 3 n = O(2 n ) Pela defnção, exstem constantes ostvas c e n 0 tas que, ara n n o, 3 n c.2 n Logo, c (3/2) n. Portanto, à medda que n cresce ndefndamente, (3/2) n também crescerá Assm, ara qualquer valor de n, não exste uma constante que exceda (3/2) n 3. Analsar o or caso de algortmo ao lado, que calcula o valor de n n nt func(nt n) { nt, r; r = 1; t 1 1 vez = 1; whle ( <= n) { r = r*n; ++; t 2 t 3 n+1 vezes n vezes nt func(nt n) { nt, r; r = 1; for (=1; <=n; ++) r = r*n; T(n) = t 1 + t 2.(n+1) + t 3.n = t 1 + t 2 + t 2.n + t 3.n = c 1 + c 2.n T(n) = O(n) 4. Analsar o or caso do algortmo abaxo: nt func (nt n) { nt a, b, c, r; b = n; c = n; r = 1; whle (b >= 1) { a = b % 2; f (a == 1) r = r * c; c = c * c * c; b = b / 2; t 3 x =? x vezes x = log 2 n + 1 t 1 t 2 1 vez x + 1 vezes n b terações 2 2,1,0 2 3 3,1,0 2 4 4,2,1,0 3 16 16,8,4,2,1,0 5 17 17,8,4,2,1,0 5 31 31,15,7,3,1,0 5 2 x-1 n < 2 x... x 4. Analsar o or caso do algortmo abaxo: nt func (nt n) { nt a, b, c, r; b = n; c = n; r = 1; whle (b >= 1) { a = b%2; f (a == 1) r = r*c; c = c*c*c; b = b/2; t 3 x vezes x = log 2 n + 1 t 1 t 2 1 vez x + 1 vezes T(n) = t 1 + t 2.(x+1) + t 3.x = t 1 + t 2 + (t 2 + t 3 ).x = c 1 + c 2.x = c 1 + c 2.( log 2 n + 1) = c 1 + c 2 + c 2 log 2 n = c 3 + c 2 log 2 n c 3 + c 2.log 2 n T(n) = O(log n) 5. Analsar o or caso do cálculo recursvo de fatoras nt fat(nt n) { d f (n <= 1) fat = 1; else fat = fat(n-1) * n; c T(n) = d, se n 1 T(n) = c + T(n-1), se n > 1 Para n > 1: T(n) = c + T(n-1) = c + c + T(n-2) = 2c + T(n-2) = 3c + T(n-3)... = (n-1)c + T(1) = (n-1)c + d T(n) = O(n) 6