This course examines the characteristics of algorithms that lead to efficient computer solutions for discrete problems. A variety of different algorithm classes and design techniques, including divide and conquer, greedy, dynamic programming, and backtracking, are introduced and compared. Design and analysis of randomized algorithms is introduced, along with strategies for dealing with computationally hard problems. Normally, one or more models of parallel algorithms will be discussed.
Prerequisites: CS 2333 , CS 2383 and ( STAT 2593 or STAT 3083 ). Note: Credit is only given for one of CS 3383, CS 3913 and CS 3933 .