Exercícios: Indução
1. Demonstrar por inducao matematica que
, para
2. Demonstrar por inducao matematica que
, para
------------------------------------------------------------------------------
Análise de fragmentos de código
A
sum = =
for (i=1; i<=m; i++) |
for(j=1l j<=n; j++) | |
sum++; | | |
Analise: Como operação SUM ++ é o(1), então a complexidade do codigo é equivalente ao numero de vezes que a operação SUM ++ é O(n2)
Ou ainda: Temos dois lacos aninhados que executam r repetições cada um, com o corpo do laco interno com complexidade o(1). Assim, a complexidade total é n.nO(1)=O(n2)
B
SUM = 0;
for (i=1; c<=n; i++)
for (j=1; i<=i; j++)
sum++;
i 1 2 3 n
1..1 1..2 1..3 1..n
1 + 2 + 3 + n
A linha 1 isoladamente tem complexidade
A linha 4 isoladamente tem complexidade
A Quantidade de vezes que a linha 4 é executada depende da quantidade de vezes que o laço
da linha 3-4 é executada. Para tal laço, seu conteudo é executado j vezesm conj=1..i
O laço das linhas 3-4 é dependente do laço das linhas 2-4 que é executado n vezes c/ assumindo os valores de 1..n
Logo a quantidade de vezes que a linha 4 é executada é dada por:
T(n) =
T(n) =
T(n) =
Logo a complexidade é proposrcional a , assim
T(n) =
Demonstração pela definição assintótica:
; ?
Que é uma constante diferente de O logo,
C
sum=0 Considerando que n seja uma potencia de 2
for (k=1; k<=n; k*=2
for(j=1; j<=n; j++) |
sum ++; | |
A linha 4 isoladamente é
pelo laço das linhas 3-4 a linha 4 é executada N vezes. com as linhas 3-4 são n O(1) = O(n)
As linhas 3-4 são executadas uma quantidade de vezes depende do laço das linhas 2-4 onde tem-se
Iteração 1 2 3 4 .... n
K 1 2 4 8 ..... n
2p0 2p1 2p2 2p3 ......
Assim p/ saber quantas vezes seu conteudo é executado e necessario saber quantos valores diferente k assume até n(inclusive)
Supondo um índice i p/cada iteracao, dado pelo valor do expoente k em base 2, da forma
Para saber o valor de r na última iteracao, tem-se
logo logo
E p/ saber o valor de i na última iteração tem-se
Assim, o trecho 2-4 é executado
resultando em
D
sum = 0;
for (k=1; k<=n; k*=2);
for (j=1; j<=k; j++);
sum++;
Nenhum comentário:
Postar um comentário