Here is the plan for the last month of the course: The course is about algorithms, their design and analysis. Form the beginning, the course had two components: one for breadth and one for depth. The breadth component covers general algorithms topics as covered by the text book. The purpose of this material is to show you basic principles of algorithm design and analysis so that you can better develop scalable software. The discussion is at a conceptual level to give you enough knowledge to find out more when you need it. This covers the chapters: Introduction, Basics of Algorithm Analysis, Graphs, Greedy Algorithms, Divide and Conquer, Dynamic Programming, Network Flow, NP and Computational Intractability, and Randomized algorithms for MAX 3-SAT. The depth component applies the basic principles of algorithm design and analysis to a specific task: Develop scalable algorithms that survive in an artificial world of simple organisms that create wealth by selling and buying financial derivatives based on combinatorial optimization problems. (The Specker Derivative Game: http://www.ccs.neu.edu/home/lieber/evergreen/specker/sdg-home.html) An interesting insight of this algorithmic, artificial world is that although the organisms need to solve NP-hard optimization problems to maximize their profit, it is sufficient that they work smart and find a maximal solution instead of a maximum solution. The maximal solution will guarantee that they never lose money if they buy the derivatives at or below the break-even price. The depth component offers the opportunity to apply what you learned in the breadth component in an interesting context. You are provided with an implementation of the basic game rules and you turn your algorithmic knowledge into intelligence for buying, selling, creating raw materials and finishing raw materials. You package the intelligence into software components that can be called by the robots. The most intelligent robots will win the game competitions. It is a battle of the algorithms. The SDG game models a trend in our society. Algorithmic traders are heavily used in real markets. From another vantage point, there are huge amounts of information available to companies. The companies that have the best algorithms to create useful knowledge from this data, have an advantage. In the rest of the course we will revisit the breadth topics we covered and will provide help with the depth component. The plan for Nov. 12: Analysis of the algorithms covered in the midterm and for the SDG components. Pseudo polynomial-time algorithms: A pseudo polynomial time algorithm is polynomial in the magnitude of the input numbers but not in the number of the bits needed to represent them. We saw such an algorithm for network flow (a variant of Ford Fulkerson). There are better algorithms. Is one lurking in the SDG implementation? Analyzing algorithms: running time, space consumption Using red-black trees for representing the CSP-formulae? http://www.ccs.neu.edu/research/demeter/DemeterF/java-src/DemeterF/edu/neu/ccs/demeterf/demfgen/lib/