The Efficiency of Algorithms
An Introduction |
Prof. David Bernstein |
Computer Science Department |
bernstdh@jmu.edu |
T(n) | n=10 | n=25 | n=50 | n=75 |
n^{3} | 0.001 sec | 0.016 sec | 0.125 sec | 0.422 sec |
2^{n} | 0.001 sec |
33.554 sec
|
35.702 yrs
|
11,979,620.707 centuries
|
Asymptotic Bound | Name |
O(1) | Constant |
O(\log n) | Logarithmic |
O(n) | Linear |
O(n^{2}) | Quadratic |
O(n^{3}) | Cubic |
O(a^{n}) | Exponential |
O(n!) | Factorial |
Suppose an algorithm has three "steps" with running times of O(n^{4}), O(n^{2}), and O(\log n).
Then, it follows from rule 3 that the running time for the entire algorithm is O(n^{4}).
Suppose an algorithm has one "step" with a running time of O(n) and that it repeats this "step" (in a loop) 1000 times.
Then, it follows from rule 1 that the running time for the entire algorithm is O(n).
What is the asymptotic bound on the worst case time efficiency of the following recursive algorithm?
int factorial(int n) { // Check for valid input if (n > 12) return -1; if ((n == 0) || (n == 1)) return 1; return n*factorial(n-1); }
What is the asymptotic bound on the worst case time efficiency of the following iterative algorithm?
int factorial(int n) { int i, value; // Check for valid input if (n > 12) return -1; value = 1; for (i=2; i<=n; i++) { value *= i; } return value; }
What is the asymptotic bound on the worst case time efficiency of the following algorithm? What about the space efficiency?
int factorial(int n) { int f[13]={1,1,2,6,24,120,720,5040,40320, 362880,3628800,39916800,479001600}; // Check for valid input if (n > 12) return -1; return f[n]; }