1 / 60

Complexity Analysis: Asymptotic Analysis

Complexity Analysis: Asymptotic Analysis. Recall. What is the measurement of algorithm? How to compare two algorithms? Definition of Asymptotic Notation. Today Topic. Finding the asymptotic upper bound of the algorithm. Wait…. Did we miss something?. The resource function!.

Download Presentation

Complexity Analysis: Asymptotic Analysis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Complexity Analysis:Asymptotic Analysis

  2. Recall • What is the measurement of algorithm? • How to compare two algorithms? • Definition of Asymptotic Notation

  3. Today Topic • Finding the asymptotic upperbound of the algorithm

  4. Wait… Did we miss something? The resource function!

  5. Resource Function We don’t know, yet Time Function of an algorithm A Time used Size of input Space Function of an algorithm A Space used Size of input And this one

  6. From Experiment • We count the number of instructions executed • Only count some instruction • One that’s promising

  7. Why instruction count? • Does instruction count == time? • Probably • But not always • But… • Usually, there is a strong relation between instruction count and time if we count the most occurred instruction

  8. Why count just some? • Remember the findMaxCount()? • Why we count just the max assignment? • Why don’t we count everything? • What if, each max assignment takes N instruction • That starts to make sense

  9. Time Function = instruction count • Time Function = instruction count • Time Function = instruction count • Time Function = instruction count

  10. Compute O()

  11. Interesting Topics of Upper Bound • Rule of thumb! • We neglect • Lower order terms from addition • E.g. n3+n2 = O(n3) • Constant • E.g. 3n3 = O(n3) Remember that we use = instead of (more correctly) 

  12. Why Discard Constant? • From the definition • We can scale by adjusting the constant c • E.g. 3n = O(n) • Because • When we let c >= 3, the condition is satisfied

  13. Why Discard Lower Order Term? • Consider • f(n) = n3+n2 • g(n) = n3 • If f(n) = O(g(n)) • Then, for some c and n0 • c * g(n)-f(n) > 0 • Definitely, just use any c >1

  14. Why Discard Lower Order Term? • Try c = 1.1 • Does 0.1n3-n2 > 0 ? • It is when • 0.1n > 1 • E.g., n > 10 • 1.1 * g(n)-f(n) = 0.1n3-n2 • 0.1n3-n2 > 0 • 0.1n3 > n2 • 0.1n3/n2 > 1 • 0.1n > 1

  15. Lower Order only? • In fact, • It’s only the dominant term that count • Which one is dominating term? • The one that grows faster • Why? • Eventually, it is g*(n)/f*(n) • If g(n) grows faster, • g(n)/f*(n) > some constant • E.g, lim g(n)/f*(n)  infinity The non-dominant term The dominant term

  16. What dominating what? Left side dominates

  17. Putting into Practice • What is the asymptotic class of • 0.5n3+n4-5(n-3)(n-5)+n3log8n+25+n1.5 • (n-5)(n2+3)+log(n20) • 20n5+58n4+15n3.2*3n2 O(n4) O(n3) O(n5.2)

  18. Asymptotic Notation from Program Flow • Sequence • Conditions • Loops • Recursive Call

  19. Sequence Block A f (n) f(n) + g(n) = O( max(f(n),g(n)) ) Block B g (n)

  20. Example f(n) + g(n) = O(max (f(n),g(n)) Block A O(n) O(n2) Block B O(n2)

  21. Example f(n) + g(n) = O(max (f(n),g(n)) Block A Θ(n) O(n2) Block B O(n2)

  22. Example f(n) + g(n) = O(max (f(n),g(n)) Block A Θ(n) Θ(n2) Block B Θ(n2)

  23. Example f(n) + g(n) = O(max (f(n),g(n)) Block A O(n2) Θ(n2) Block B Θ(n2)

  24. Condition O( max (f(n),g(n)) ) Block A Block B f (n) g (n)

  25. Loops for (i = 1;i <= n;i++) { P(i) } Let P(i) takes timeti

  26. Example for (i = 1;i <= n;i++) { sum += i; } sum += iΘ(1)

  27. Why don’t we use max(ti)? • Because the number of terms is not constant for (i = 1;i <= n;i++) { sum += i; } Θ(n) for (i = 1;i <= 100000;i++) { sum += i; } Θ(1) With large constant

  28. Example for (j = 1;j <= n;j++) { for (i = 1;i <= n;i++) { sum += i; } } sum += iΘ(1)

  29. Example for (j = 1;j <= n;j++) { for (i = 1;i <= j;i++) { sum += i; } } sum += iΘ(1)

  30. Example : Another way for (j = 1;j <= n;j++) { for (i = 1;i <= j;i++) { sum += i; } } sum += iΘ(1)

  31. Example Your turn for (j = 2;j <= n-1;j++) { for (i = 3;i <= j;i++) { sum += i; } } sum += iΘ(1)

  32. Example : While loops While (n > 0) { n = n - 1; } Θ(n)

  33. Example : While loops While (n > 0) { n = n - 10; } Θ(n/10) = Θ(n)

  34. Example : While loops While (n > 0) { n = n / 2; } Θ(log n)

  35. Example : Euclid’s GCD function gcd(a, b) { while (b > 0) { tmp = b b = a mod b a = tmp } return a }

  36. Example : Euclid’s GCD Until the modding one is zero function gcd(a, b) { while (b > 0) { tmp = b b = a mod b a = tmp } return a } How many iteration? Compute mod and swap

  37. Example : Euclid’s GCD a b

  38. Example : Euclid’s GCD a b a mod b If a > b a mod b < a / 2

  39. Case 1: b > a / 2 a b a mod b

  40. Case 1: b ≤ a / 2 a b We can always put another b a mod b

  41. Example : Euclid’s GCD function gcd(a, b) { while (b > 0) { tmp = b b = a mod b a = tmp } return a } O( log n) B always reduces at least half

  42. Recursive Program

  43. Code that calls itself void recur(int i) { // checking termination // do something // call itself }

  44. Find summation from 1 to i int sum(inti) { //terminating condition if (i == 1) //return 1; // recursive call int result; result = i + sum(i-1); return result; } void main() { printf(“%d\n”,sum()); }

  45. Order of Call: Printing Example void seq(inti) { if (i == 0) return; printf("%d ",i); seq(i - 1); } void seq(inti) { if (i == 0) return; seq(i - 1); printf("%d ",i); }

  46. Draw Triangle void drawtri(intstart,inti,int n) { if (i <= n) { for (int j = start;j <= i+start-1;j++) { printf("%d ",j); } printf("\n"); drawtri(start,i + 1,n); } }

  47. Programming Recursive Function • First, define what will the function do • Usually, it is related to “smaller” instant of problem • Write the function to do that in the trivial case • Call itself to do the defined things

  48. Analyzing Recursive Programming • Use the same method, count the most occurred instruction • Needs to consider every calls to the function

  49. Example void sum(inti) { if (i == 0) return 0; int result; result = i + sum(i - 1); return result; } Θ(n)

  50. Example 2 void sum(inti) { if (i == 0) return 0; int result; result = i + sum(i - 1); int count = 0; for (int j = 0;j < i;j++) { count++; } return result; } Θ(n2)

More Related