Algorithm Analysis
Algorithm Analysis
CS245-2015S-02
Algorithm Analysis
David Galles
n O(n) ? Yes
n O(10n) ? Yes
n O(n2 ) ? Yes
n2 O(n) ? No
n lg n O(n2 ) ? Yes
ln n O(2n) ? Yes
lg n O(n) ? Yes
3n + 4 O(n) ? Yes
n O(n)
10n O(n)
n O(10n)
n O(n2 )
n2 O(n)
10n2 O(n2 )
n lg n O(n2 )
ln n O(2n)
lg n O(n)
3n + 4 O(n)
5n2 + 10n 2 O(n3 ), O(n2 ), O(n) ?
02-24: Big-Oh Examples II
n O(n) ? Yes
lg n O(2n ) ? Yes
lg n O(n) ? Yes
n lg n O(n) ? No
n lg n O(n2 ) ? Yes
n O(lg n) ? No
lg n O( n) ? Yes
3
n lg n O(n 2 ) ? Yes
3
n + n lg n + n n O(n lg n) ? No
3
n + n lg n + n n O(n3 ) ? Yes
3
n + n lg n + n n O(n4 ) ? Yes
02-25: Big-Oh Examples II
n O(n)
lg n O(2n )
lg n O(n)
n lg n O(n)
n lg n O(n2 )
n O(lg n)
lg n O( n)
3
n lg n O(n 2 )
3
n + n lg n + n n O(n lg n)
3
n + n lg n + n n O(n3 )
3
n + n lg n + n n O(n4 )
02-26: Big-Oh Examples III
!
n for n odd
f (n) =
n3 for n even
g(n) = n2
f (n) O(g(n)) ? No, if f(n) is even, n^3 is not smaller than n^2
g(n) O(f (n)) ? No, if f(n) is odd, n^2 is not smaller than n
T (n) (f (n)) if
T (n) (f (n)) if
T (n) (f (n)) if
Note this:
n/2 >= C(n) when C <= 1/2, n0 = 1 for every n >= n0
02-37: Calculating Big-Oh
for (i=1; i<n; i++)
for (j=1; j < n/2; j++)
sum++;
02-38: Calculating Big-Oh
for (i=1; i<n; i++) Executed n times
for (j=1; j < n/2; j++) Executed n/2 times
sum++; O(1)
SUPER
IMPORTANT! GOT
TRICK HERE!!
02-43: Calculating Big-Oh
for (i=0; i<n; i++)
for (j = 0; j<i; j++)
sum++;
n
" n(n + 1)
i =
i=1
2
(n2 )
02-44: Calculating Big-Oh
sum = 0;
for (i=0; i<n; i++)
sum++;
for (i=1; i<n; i=i*2)
sum++;
02-45: Calculating Big-Oh
Note this: these 2 operation is separated
sum = 0; O(1)
for (i=0; i<n; i++) Executed n times
sum++; O(1)
for (i=1; i<n; i=i*2) Executed lg n times
sum++; O(1) 1. O(n)
2. O(logn)
Running Time: O(n), (n), (n) Hence, choose the biggest one
O(n)
02-46: Calculating Big-Oh
sum = 0;
for (i=0; i<n; i=i+2)
sum++;
for (i=0; i<n/2; i=i+5)
sum++;
02-47: Calculating Big-Oh
sum = 0; O(1)
for (i=0; i<n; i=i+2) Executed n/2 times
sum++; O(1)
for (i=0; i<n/2; i=i+5) Executed n/10 times
sum++; O(1)
lg n
"
2i = 2lg n+1 2^(log8+1)-1
1 = 2^4 -1 = 15
i=0
= 2n 1
2(16)-1 = 15
(n)
02-55: Calculating Big-Oh
Of course, a little change can mess things up a bit ...
sum = 0;
for (i=1; i<=n; i=i+1)
for (j=1; j<=i; j=j*2)
sum++;
02-56: Calculating Big-Oh
Of course, a little change can mess things up a bit ...
sum = 0;
for (i=1; i<=n; i=i+1) Executed n times
for (j=1; j<=i; j=j*2) Executed <= lg n times
sum++; O(1)
So, this is code is O(n lg n) but is it also (n lg n)?
Yes!
02-57: Calculating Big-Oh
Of course, a little change can mess things up a bit ...
sum = 0;
for (i=1; i<=n; i=i+1) Executed n times
for (j=1; j<=i; j=j*2) Executed <= lg n times
sum++; O(1)
Total time sum++ is executed:
n
"
lg i Hard, Revision Again
i=1
Text
02-58: Calculating Big-Oh
Total # of times sum++ is executed: