CS575 - Spring 2012
CS575, Spring 2012, section 02. T/Th 1:15pm-2:40, in UU209
Prof. Patrick H. Madden, ENGB N-14. Office hours, T/W, noon to 1pm, or by appointment
TA: Peng Liu. Office hours Monday and Wednesday, 10am to noon, N23. Or email pliu3 at binghamton dot edu for an appointment.
This course will cover the design and analysis of algorithms, and will require implementation of many of them. Students should be familiar with at least one of C, C++, or Java, and be able to read data from standard input, and write to standard output. Familiarity with Makefiles is also essential. Programming assignments will typically require a page or two of code, with the parsing of input and generation of output both being very simple.
The text for the course is Introduction to Algorithms, by Cormen, Leiserson, Rivest, and Stein. There are a number of different editions, but are similar enough that any should be adequate. A number of research papers will be available through Blackboard.
Grading
- Exam 1: 25% March 1st. Big-O definitions, complexity analysis, basic sorting algorithms, basic data structures, plus a little dynamic programming.
- Exam 2: 25% March 29th. Dynamic programming, greedy algorithms (Kruskal, Huffman). Here's an old exam, and key. There's a typo on the key for problem 8; the number should be 15, not 14 (and 9 instead of 8). Also, for question 9, the final solution should be (A1A2)(A3A4), for a total of 29 multiplies. Instead of questions on knapsack or bitonic TSP, you might see a question of ferry loading....
Specific topics:
Dynamic programming (Fibonacci and variations, rod cutting, longest common substring, matrix multiplication, ferry loading, and possibly some variations, such as the number of ways to get from one location to another in a graph).
Greedy algorithms -- simple activity selection, Huffman coding, Prim and Kruskal algorithms.
Disjoint set data structures (know how to use them, how find_set works with path compression, and that you link the top of one disjoint set to the top of another).
Memory efficient graph data structures (the matrix is the easy thing to do, but is a horrible idea for sparse graphs)
Big-O definitions, of course....
Shortest path algorithms (Bellman-Ford, Dijkstra) will be on the final. - Final: 20% May 15, 2-4pm, LH005. Graph algorithms, computational geometry, NP-Completeness, and a few of the greatest hits.
Prep questions for this year
2007 Fall CS575 final
2007 Spring CS575 final - Programming Assignments (about 10): 30%
Course Schecule
- January 31: Big-O complexity, course overview. Read chapters 1-3 of Cormen.
- February 2nd: Big-O complexity. Keep reading Cormen, and also check out the paper by Hartmanis and Stearns (and Turing's paper too).
- February 7th. Quicksort partition functions, and why the matter.
- February 9th. TA will cover Makefiles, etc. There's also a worksheet, with questions to check if you're following the course so far....
and also a key... - February 14th. Master theorem, complexity wrap-up.
- February 16th. Heaps and heapsort. Engineering sort functions. Read the paper by Bentley.
- February 21st. Dynamic programming intro. Fibonacci, Knapsack, Matrix chain.
- February 23rd. More dynamic programming
- February 28th. Dynamic programming wrap-up.
- March 1st. Exam 1.
- March 6th. Huffman coding
- March 8th. Huffman coding
- March 13th. Fractional greedy knapsack, and 0-1 knapsack.
- March 15th. Graph representations, BFS, DFS, disjoint sets.
- March 20th. Bellman-Ford, Dijkstra
- March 22nd. Dijkstra, extended heaps
- March 27th. Review - Exam 2
- March 29th. Exam 2.
- April 10th. Max-flow, min-cut
- April 12th. Barnes-Hut, n-body problems, rectangle overlap, collision detection.
- April 17th. Graph partitioning, Hill-climbing algorithms (Kernighan-Lin, Fiduccia-Mattheyses)
- April 19th. Graph partitioning.
- April 24th. Boolean satisfiability. Basics of NP-Completeness
- April 26th. DPLL and satisfiability solvers
- May 1st. Polynomial time reductions. Graph coloring, Hamiltonian cycles, TSP.
- May 3rd. Simulated annealing.
- May 8th. Maybe a numerical algorithm? FFT?
- May 10th. Review for the final.
Programming Assignments:
- Insertion sort, due February 7th.
- Quick sort with different partitions, due February 14th
- Heap sort, due February 21st
- Longest common subsequence, due February 28th
- Ferry Loading, due March 6th
- Huffman coding, due March 20th
- Dijkstra's Algorithm, due April 17th
- Max flow-min cut, due April 26th
- Closest pair of points, due May 1st
- Graph partitioning, due May 10th