Rensselaer Polytechnic Institute
Department of Computer Science


CSCI 2300: Introduction to Algorithms

Spring 2011

ANNOUNCEMENTS

OVERVIEW

This is a foundational course in the design and analysis of algorithms and the data structures they are coupled with. While we will concentrate on the theoretical design and analysis of algorithms and data structures, we will reinforce the theory with examples, laboratories, and applied homework questions.

The goal of this course is to provide a strong foundation in algorithms and data structures in preparation for jobs in industry or for more advanced courses. Algorithms are the basic language of computer science. After taking this course, you should be able to prove the correctness of and analyze the running times of different algorithms. You should also be able to use different algorithm-design techniques to solve particular problems. Data structures and algorithms also form a major component of any software system. After taking this course you should be able to make intelligent decisions about alternative techniques in the context of practical problems, choosing from existing data structures and algorithms or designing your own when necessary.

STAFF

Instructor: Sanmay Das
Office: Lally 302
Phone: x2782
Office hours: Mondays from 1:30-3:00 PM, and by appointment.

TA: Kedar Grama (gramak at rpi)
Labs: W 10-12 in Lally 104 with undergraduate programming mentors Cameron Helm, Hans Vorsteveld, and Roy Wellington.
and W 4-6 in Lally 104 with undergraduate programming mentors Matthew Gerrior, Eric Herdzik, and Hans Vorsteveld.

TA: Binh Nguyen (nguyeb2 at rpi)
Labs: W 12-2 in Lally 104 with undergraduate programming mentors Andrew Bolin, Cameron Helm, and Daniel Kimball.
and W 2-4 in Sage 2715 with undergraduate programming mentors Andrew Bolin, Matthew Gerrior, and Eric Herdzik.

POLICIES

TEXTBOOKS

There are two textbooks for this class

PROGRAMMING

This is not a programming class. The labs involve programming, but you are expected to be a competent C++ programmer coming in -- the lectures will not discuss any code. The TAs and undergraduate programming mentors can provide some help on programming issues in lab. Neither of the textbooks deals with programming issues at all. You may want to consult your textbooks from CS2, or Stroustrup's The C++ Programming Language.

LECTURES

Lectures will be on Mondays and Thursdays from 12pm to approximately 1:30pm in Amos Eaton 214.  The "Mathematical Background" appendix of CLRS is background reading for the whole class. In the readings, chapter numbers for CLRS are for the 3rd edition.The table of contents for the 3rd edition is here, if you want to compare to another edition.

SCHEDULE

The schedule below is provided to help you plan, but please bear in mind that it is tentative and subject to change based on the progress of the class. Some changes to the schedule are almost always necessary!  
Date Topics Readings Extras
Jan 24 Introduction. Course policies. Course overview. Some interesting problems. DPV Chapter 0
Jan 27 Generating random permutations. Fibonacci numbers. CLRS Section 5.3 (Randomized Algorithms), DPV Chapter 0.
Jan 31 Basic arithmetic. Divide and conquer algorithms DPV Sections 1.1, 2.1, 2.2
Feb 3 Mergesort and Selection DPV Sections 2.3, 2.4
Feb 7 Quicksort CLRS Chapter 7
Feb 10 Matrix multiplication, modular arithmetic. DPV 2.5, 1.2
Feb 14 Modular arithmetic, contd. Intro to graphs. DPV 1.2, 3.1-3.2
Feb 17 Depth-first search. Topological sort (linearization). DPV 3.3
Feb 21 No class. President's Day.
Feb 24 Strongly connected components. Eulerian tours. DPV 3.4
Feb 28 Midterm exam #1
Mar 3 Breadth-first search. Dijkstra's algorithm. DPV 4.1-4.4
Mar 7 Dijkstra's algorithm contd. Heaps, heap creation and heapsort. Shortest paths with negative edges. DPV 4.4-4.6, CLRS Chapter 6.
Mar 10 The Bellman-Ford algorithm. Shortest paths in DAGs. Minimum spanning trees. DPV 4.6, 4.7, 5.1.
Mar 21 Kruskal's algorithm for MSTs. The disjoint set data structure. DPV 5.1
Mar 24 Disjoint sets contd. Amortized analysis. DPV 5.1, CLRS 17.1, 17.3.
Mar 28 Hash tables. Chaining, open addressing. Intro to cuckoo hashing. CLRS 11.1, 11.2, 11.4; Cuckoo hashing notes from Rasmus Pagh
Mar 31 Cuckoo hashing contd. Bloom filters. Wikipedia on Bloom Filters
Apr 4 Universal hashing. Huffman coding part 1. CLRS 11.3; DPV 1.5, 5.2.
Apr 7 Huffman coding contd; Intro to dynamic programming DPV 5.2, 6,1, 6.2
Apr 11 Midterm exam #2
Apr 14 Dynamic programming contd. Edit distance, knapsack, memoization. DPV 6.3, 6.4.
Apr 18 Dynamic programming contd. Knapsack with unique objects, chain matrix multiplication. DPV 6.4-6.5.
Apr 21 Dynamic programming contd. Return to shortest-paths. All-pairs shortest paths. Independent sets in trees. The DP approach to TSP. DPV 6.6-6.7.
Apr 25 Flows, max-flow and the Ford-Fulkerson algorithm. DPV 7.2, 7.3. CLRS 26.1-26.3.
Apr 28 NP completeness. Reducing 3SAT to Independent Set. DPV 8.1-8.3.
May 2 Guest lecture by Prof. Anshelevich. Reductions, contd. DPV 8.3.
May 5 No class. Sanmay is at AAMAS
May 9 SAT to 3SAT. Circuit-SAT to SAT. Hamiltonian Cycle to TSP. All of NP to Circuit-SAT. Unsolvable problems. DPV 8.3. CLRS 34.3-34.5.
 


LABS

Jan 26: No lab
Feb 2: Lab 1
Feb 9: Recitation/OH
Feb 16: Lab 2. Supporting files are here
Feb 23: Recitation/OH
Mar 2: Recitation/OH
Mar 9: Lab 3. Supporting files are here
Mar 23: Recitation/OH
Mar 30: Lab 4. Supporting files are here
Apr 6: Recitation/OH
Apr 13: Recitation/OH (GM week day off moved to Tuesday?)
Apr 20: Lab 5. Supporting files are here
Apr 27: Recitation/OH
May 4: Lab 6. Sequence files for testing are here

HOMEWORKS

HW1: Due Feb 7
HW2: Due Feb 24
HW3: Due Mar 10
HW4: Due Mar 28
HW5: Due Apr 7
HW6: Due Apr 28
HW7: Due May 9