CS 580: Algorithm Design and Analysis