 Tue, Jan 14  Introduction  slides
 Tue, Jan 21  Data Structures  slides
 Tue, Jan 28  No class (Snowpocalypse)
 Tue, Feb 4  Data Structures  slides
 read Chapter 3 of CLRS
 read TopCoder tutorial on data structures
 read Fenwick tree
 try Fenwick tree visualization
 read DisjointSet Union
 Tue, Feb 11  No class (Snowpocalypse 2)
 Read Chapter 6 from Art of Programming Contests book
 TopCoder introduction to recursion part 1  part 2
 TopCoder introduction to combinatorics
 Problems to solve:
 Closest Sum
 Back to the 8queens (hint: there are 92 solutions to 8queens on 8*8 board, if you knew all of them can you check which is closest?)
 The Hamming Distance Problem
 Tue, Feb 18  Brute Force  slides
 Tue, Feb 25  Brute Force  slides
 read the part of the presentation slides from the last class and make sure you understand all the material
 if you haven't read already, read this: part 1 and part 2
 read the part of the presentation we didn't cover last time: generating all subsets and generating all permutations
 implement recursive and iterative methods for finding all subsets of elements of an array (e.g. you have array: 1..n, generate and print all subsets, you can choose n=5, as an example. Google for code and ideas. Here are some links you may find useful: , http://www.stanford.edu/class/archive/cs/cs106b/cs106b.1126/lectures/07/Slides07.pdf, http://911programming.wordpress.com/2010/06/07/javaextractingallsubsetsofasetusingarraylist/, http://www.geeksforgeeks.org/printallpossiblecombinationsofrelementsinagivenarrayofsizen/, etc.)
 implement recursive and iterative methods for finding all permutations of elements of an array (similar to previous, but for permutations). In these 2 problems you can Google for solution, but the goal is to understand it, not just copy. (Here are some links, that you may find useful: http://www.cuttheknot.org/do_you_know/AllPerm.shtml, http://forum.codecall.net/topic/64715howtogenerateallpermutations/, http://anh.cs.luc.edu/314315/recursion.html, and search for more)
 I want you all to work as a team and discuss solutions, ideas and explain all these material to other students in the class!
 Solve these problems:

Tue, Mar 4  Greedy, Divide and Conquer  slides
 quiz 2
 Read Chapter 4 from CLRS (Divide and Conquer)
 Read Chapter 16 from CLRS (Greedy)

Tue, Mar 18  Dynamic Programming  slides
 quiz 3
 Read Chapter 15 from CLRS (Dynamic Programming)
 TopCoder dynamic programming tutorial

Tue, Mar 25  Dynamic Programming  slides
 Read Chapter 15 from CLRS (Dynamic Programming)
 TopCoder dynamic programming tutorial
 Code the solutions to the problems discussed in class
 Solve some practice problems (links can be found in slides)
 Tue, Apr 1  Midterm Competition

Tue, Apr 8  Graphs  slides
 Start reading (Chapter 22) Section VI  Graph Algorithms of the "Introduction to Algorithms" CLRS book
 Read through TopCoder Graph Algorithms tutorial Part 1 and Part 2
 Solve UVa 10004  Bicoloring
 Read Kosaraju algorithm or Tarjan strongly connected components algorithm
 And solve UVa 11838  Come and Go

Tue, Apr 15  Graph algorithms  slides
 Read Section VI (chapters 23, 24, 25) of the "Introduction to Algorithms"
 Shortest path TopCoder tutorial, part 3
 Dijkstra algorithm tutorial

Tue, Apr 22  Number and string algorithms  slides
 Read Chapters 31 (Number Theoretic Algorithms), 32 (String matching) of the "Introduction to Algorithms"
 TopCoder tutorial on string algorithms
 TopCoder tutorial on prime numbers
 [not required] Trie data structure
 [not required] Suffix tree data structure
 [not required] Suffix array data structure
 Data structures
 theory due 11:59pm, Feb 11
 code due 11:59pm, Feb 18
 Complete Search
 theory due 11:59pm, Mar 4
 code due 11:59pm, Mar 9
 Problem Solving Strategies
 theory due 11:59pm, April 6
 code due 11:59pm, April 13
 Graph Algorithms
 theory due 11:59pm, April 21
 code due the end of the semester
 Required: "Introduction to Algorithms" by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein (used 2nd edition is cheap)
 More "competitive" book: "Competitive Programming 3" by Steven Halim
 "The Algorithm Design Manual" by Steven Skiena
 ...