This course focuses on the design and analysis of algorithms. As mathematical background, it covers inductive proof techniques, solving recurrence equations, graph theory and probability. It covers a detailed study of different techniques in designing solutions to problems including greedy algorithm, divide and conquer, dynamic programming, backtracking, and branch and bound. Some advanced data structures are introduced. There is an emphasis on the verification and analysis of time and space complexity. NP theory is introduced. In addition to several homework assignments, at least three large programming projects are assigned to analyze different algorithmic techniques. In one project students are encouraged to explore outside the textbook and propose a project of their interest. Some examples of successful projects include using genetic algorithms, ant colonies to solve the shortest path problem, animation of algorithms and implementing the traveling salesman problem on a cell broadband engine. Another project focuses on parallel programming using MPI on a cluster computer

Course announcements, power point lectures, homework, demos...etc. are on Blackboard