Algorithms: Route-Planners for Creating Correct Programs. Necessary Mathematics. Sorting. Patterns: Solutions Waiting to be Found. Efficiency. Data Structures and Abstract Data Types. Program Correctness. Brute Strength Method. Divide and Conquer. Greedy Algorithms. Dynamic Programming: One Dimensional Problems. Dynamic Programming: Multi-Dimensional Problems.