Qualcuno mi puo' spiegare come si possano ottenere i seguenti risultati?
Cortesemente potete spiegarmi i passaggi?
La prima analisi e' abbastanza chiara (anche a vista sono 2 cicli nidificati quindi implica O(n^2)):
for(i=0; i<a.length;i++){
for(j=1,sum=a[0]; j<=i;j++)
sum+=a[j];
System.out.println("Somma sub "+sum);}
e si ottiene:
T(n)= 1+ 3n + sum (da i=1 a n-1)*2i = 1+3n+n(n-1) = O(n^2)
in sequenza: non capisco 1; capisco 3n perche' sono i 3 assegnamenti i,j,sum; capisco l'ultima parte quando si itera n-1 volte sia su sum che su j;
non capisco nella seconda espressione n(n-1)
e
for(i=4; i<a.length;i++){
for(j=i-3,sum=a[i-4]; j<=i;j++)
sum+=a[j];
System.out.println("Somma sub "+sum);}
qua capisco che anche se sono 2 cicli nidificati uno cicla meno ma a parte (n-4) il resto non lo capisco.
T(n)= 1+ (n-4)(1 + 2 + 4·2) = O(n)
Grazie
Cortesemente potete spiegarmi i passaggi?
La prima analisi e' abbastanza chiara (anche a vista sono 2 cicli nidificati quindi implica O(n^2)):
for(i=0; i<a.length;i++){
for(j=1,sum=a[0]; j<=i;j++)
sum+=a[j];
System.out.println("Somma sub "+sum);}
e si ottiene:
T(n)= 1+ 3n + sum (da i=1 a n-1)*2i = 1+3n+n(n-1) = O(n^2)
in sequenza: non capisco 1; capisco 3n perche' sono i 3 assegnamenti i,j,sum; capisco l'ultima parte quando si itera n-1 volte sia su sum che su j;
non capisco nella seconda espressione n(n-1)
e
for(i=4; i<a.length;i++){
for(j=i-3,sum=a[i-4]; j<=i;j++)
sum+=a[j];
System.out.println("Somma sub "+sum);}
qua capisco che anche se sono 2 cicli nidificati uno cicla meno ma a parte (n-4) il resto non lo capisco.
T(n)= 1+ (n-4)(1 + 2 + 4·2) = O(n)
Grazie