2. Background
• The running time of a program is proportional to some
constant multiplied by one of these terms plus some smaller
terms
Leading Term + Smaller Terms (Negligible for larger N)
3. Examples
• N3 + 5 * N2 – 3 * N + 7
N3 is the leading term
• N = 108
3 * N2 and 2 * N3
Constant coefficients can be ignored
4. Computational Complexity
• Here the worst case performance of algorithms is studied
• Constant factors are ignored
• Determine the functional dependence of the running time
5. Definition of Big-Oh Notation
• A function g(N) is said to O(f(N)) if there exists constants c0
and N0 such that g(N) is less than c0 * f (N) for all N > N0
6. Examples
• 7 * N - 2
7 *N – 2 is O (N)
Take c0 = 7, N0 = 1
• 3 * N3 + 20 * N2 + 5
3 * N3 + 20 * N2 + 5 is O (N3)
Take c0 = 4, N0 = 21
• 3 * log N + 5
3 * log N +5 is O (log N)
Take c0 = 11, N0 = 2
8. Growth Rate
• Functions in order of increasing growth rate is as follows
1
log N
N
N log N
N2
N3
2N
9. Examples of Algorithm Running Times
• Min element of an array: O (N)
• Closest points in the plane,
i.e. smallest distance pairs: N (N - 1)/2 O (N2)
10. Comparing Algorithms Experimentally
• Implement each algorithm
– Lots of work
– Error prone
• Run it with sample data
• Count the time
– Same hardware and software are used
11. A Sample C Program
void main ()
{
clrscr ();
clock_t start, end;
start = clock ();
delay (1000);
end = clock();
cout << “Time = ” << (end - start);
getch();
}
12. Required Header Files
# include <conio.h>
# include <fstream.h>
# include <dos.h>
# include <time.h>