A sequel to MAT 320 (Discrete Mathematics for Computing). Techniques for algorithm design, including divide-and-conquer, greedy algorithms, dynamic programming, basic probability and statistics and hypothesis testing and introduced as needed, pseudorandom number generation, and matrix manipulation. Mathematica coding is used to illustrate each topic.