java - Big-O of These Nested Loops -
i'm pretty new big-o field, bear me here. have been searching much still need lot of work understand it. came across these nested loops in practicing exercises , there wasn't solutions , seem complicated. so, help appreciated.
1)int sum=0; for(int i=0; < n^2; i++) { // n+1 for(int j = n-1; j >= n-1-i; j–-) { // n(n+1)/2 ? sum = i+j; // n(n+1)/2 ? system.out.println(sum); // n(n+1)/2 ? } }
big-o = ?
2)int sum=0; for(int i=1; <= 2^n; i=i*2) { // log(n) for(int j=0; j <= log(i); j++) { // log(n(n+1)/2) ? sum = i+j; // log(n(n+1)/2) ? system.out.println(sum); // log(n(n+1)/2) ? } }
big-o = ?
3)int sum = 0; int k = 23; for(int i=k; <= 2^(n−k); i=i*2) { // log(n) for(int j=2^(i−k); j < 2^(i+k); j=j*2) { // log(log(n)) ? sum = i+j; // log(log(n)) ? system.out.println(sum); // log(log(n)) ? } }
big-o = ?
4)int sum=0; for(int i=2n; i>=1; i=i/2) { for(int j=i; j>=1; j=j/2) { sum = i+j; system.out.println(sum); } }
big-o = ?
edit: - corrected #4. sorry mess up. - base of operations of log 2. - ^ here means "to power", not xor.
there plenty questions "big-o of nested loops" here on stackoverflow (and answers).
however, reply me. first there notation problem: tagged question java. in code see 2ⁿ
or n²
. in java means xor
, think meant math.pow(2,n)
instead, reply treat powerfulness operator.
int sum=0; for(int i=0; < n^2; i++) { // outer loop for(int j = n-1; j >= n-1-i; j–-) { // inner loop sum = i+j; // inner operations system.out.println(sum); } }
the inner operations runs in o(1)
, counting how called.
n²
times. for each i
(from outer loop) inner loop runs i
times. in total 0+1+...+(n²-1)+n² = n²(n²+1)/2
. in Θ(n⁴)
.
int sum=0; for(int i=1; <= 2^n; i=i*2) { // outer loop for(int j=0; j <= log(i); j++) { // inner loop sum = i+j; // inner operations system.out.println(sum); } }
the outer loop runs n
times, since 2⋅2⋅2⋅...⋅2
(n
times) equals 2n. the inner loop runs k
times each i=2k (1 ≤ k ≤ n), assuming base of operations of logarithm 2. in total 1+2+3+...+n-1+n = n(n+1)/2
. in Θ(n²)
.
int sum = 0; int k = 23; for(int i=k; <= 2^(n−k); i=i*2) { // outer loop for(int j=2^(i−k); j < 2^(i+k); j=j*2) { // inner loop sum = i+j; // inner operations system.out.println(sum); } }
the outer loop runs m
times m
minimal such k⋅2m > 2n-k
holds. can written k⋅2k⋅2m > 2n
. k
has positiv (otherwise outer loop run forever). assuming k
bounded o(n)
(canstants in o(n)
), m
bounded o(n)
. the inner loop runs 2⋅k
times, no matter i
or n
is. in o(1)
constant k
, in o(n)
k
bounded o(n)
. in total o(n)
constant k
, o(n²)
k
in o(n)
.
int sum=0; for(int i=2n; i>=1; i=i/2) { // outer loop for(int j=i; j>=1; j=j/2) { // inner loop sum = i+j; // inner operations system.out.println(sum); } }
the outer loop runs log(n)
times in case 2 (the other way around) the inner loop runs j
times (basicly) each powerfulness of 2 between 1
, 2n
. assuming n = 2k
(means log(n) = k
) in total 2k+1+2k+2k-1+...+22+21+20=2k+2-1=4n-1
. in in o(n)
. holds n not powerfulness of 2.
java performance loops big-o time-complexity
No comments:
Post a Comment