COMP3011: Design and Analysis of Algorithms