Download - Computational Complexity
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)
Examples• N3 + 5 * N2 – 3 * N + 7
N3 is the leading term
• N = 108
3 * N2 and 2 * N3
Constant coefficients can be ignored
Computational Complexity• Here the worst case performance of algorithms is studied• Constant factors are ignored• Determine the functional dependence of the running time
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
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
Problem• 7 * N – 2 < N2
Take c0 = 7, N0 = 1
?
Growth Rate• Functions in order of increasing growth rate is as follows
1 log N N N log N N2
N3
2N
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)
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
A Sample C Programvoid main ()
{
clrscr ();
clock_t start, end;
start = clock ();
delay (1000);
end = clock();
cout << “Time = ” << (end - start);
getch();
}
Required Header Files# include <conio.h>
# include <fstream.h>
# include <dos.h>
# include <time.h>
Reference
Any Questions?
Thank You!