Analysis of common algorithms for processing strings, trees, graphs and networks. Comparison of sorting and searching algorithms. Algorithm design strategies: divide and conquer, dynamic, greedy, back tracking, branch and bound. Introduction to NP-completeness.