Prerequisites: Familiarity with Prim and Kruskal minimum spanning tree algorithms and Dijkstra shortest path algorithm. Discussion of representative algorithms and data structures encountered in applications. Worst case, average case, and amortized analysis. Data structures: search trees, hash tables, heaps, Fibonacci heaps, union-find. Algorithms: string matching, sorting and ordering statistics, graph algorithms. NP-completeness.