Analysis of Algorithms[ Section 4.1 ]
Examples of functions important in CS:
• the constant function:f(n) =
Analysis of Algorithms[ Section 4.1 ]
Examples of functions important in CS:
• the constant function:f(n) = c
• the logarithm function: f(n) = logb n
Analysis of Algorithms[ Section 4.1 ]
Examples of functions important in CS:
• the constant function:f(n) = c
• the logarithm function: f(n) = logb n
• the linear function: f(n) =
Analysis of Algorithms[ Section 4.1 ]
Examples of functions important in CS:
• the constant function:f(n) = c
• the logarithm function: f(n) = logb n
• the linear function: f(n) = n
• the n-log-n function: f(n) = n log n
Analysis of Algorithms[ Section 4.1 ]
Examples of functions important in CS:
• the constant function:f(n) = c
• the logarithm function: f(n) = logb n
• the linear function: f(n) = n
• the n-log-n function: f(n) = n log n
• the quadratic function: f(n) = n2
Analysis of Algorithms[ Section 4.1 ]
Examples of functions important in CS:
• the constant function:f(n) = c
• the logarithm function: f(n) = logb n
• the linear function: f(n) = n
• the n-log-n function: f(n) = n log n
• the quadratic function: f(n) = n2
• the cubic function and other polynomials
f(n) = n3
f(n) =
Analysis of Algorithms[ Section 4.1 ]
Examples of functions important in CS:
• the constant function:f(n) = c
• the logarithm function: f(n) = logb n
• the linear function: f(n) = n
• the n-log-n function: f(n) = n log n
• the quadratic function: f(n) = n2
• the cubic function and other polynomials
f(n) = n3
• the exponential function:
f(n) =
Analysis of Algorithms[ Section 4.1 ]
Comparing growth rates
• f(n) = c
• f(n) = logb n
• f(n) = n
• f(n) = n log n
• f(n) = n2
• f(n) = n3
• f(n) = bn
Analysis of Algorithms[ Section 4.2 ]
How to analyze algorithms
- Experimental studies
Analysis of Algorithms[ Section 4.2 ]
How to analyze algorithms
- Counting the number of primitive operations
Note: possible difference between the worst-case running time and the average-case running time
Analysis of Algorithms[ Section 4.2.3 ]
Asymptotic notation
Big-Oh notation:
Let f(n) and g(n) be functions from integers to reals. We say that f(n) = O(g(n)) if there are constants c>0 and n0>0 such that
f(n) · c g(n) for every n ¸ n0
We also say that f(n) is order of g(n).
Analysis of Algorithms[ Section 4.2.3 ]
Examples:
f(n) = 5n-3 g(n) = n
Analysis of Algorithms[ Section 4.2.3 ]
Examples:
f(n) = 7n2+(n3)/5 g(n) = n4
Analysis of Algorithms[ Section 4.2.3 ]
Examples:
Insert-sort algorithm
// input: array A, output: array A is sortedint i,j;int n = A.length;for (i=0; i<n-1; i++) { j = i; while ((j>=0) && (A[j+1]<A[j])) {
int tmp = A[j+1];A[j+1] = A[j];A[j] = tmp;j--;
}}
Analysis of Algorithms[ Section 4.2.3 ]
Asymptotic notation continued
Big-Omega notation:
Let f(n) and g(n) be functions from integers to reals. We say that f(n) = (g(n)) if there are constants c>0 and n0>0 such that
f(n) ¸ c g(n) for every n ¸ n0
Analysis of Algorithms[ Section 4.2.3 ]
Asymptotic notation continued
Big-Theta notation:
Let f(n) and g(n) be functions from integers to reals. We say that f(n) = £(g(n)) if f(n) = O(g(n)) and f(n) = (g(n)).
Analysis of Algorithms[ Section 4.2.5 ]
Words of caution:
• what is 10100n ?
• exponential algorithms are a big NO (unless the input is really small)