CS 344: Design and Analysis of Computer Algorithms