Provides both a broad coverage of basic algorithms and data structures. Topics include sorting, searching, graph and string algorithms; greedy algorithm, branch-and-bound, dynamic programming and job scheduling; Arrays, linked lists, queues, stacks, and hash tables; Algorithm complexity, best/average/worst case analysis. Applications selected from machine learning problems.