Dates | Monday | Tuesday | Wednesday | Thursday | Friday |
---|---|---|---|---|---|
Week of 7/5-7/9 |
Introduction and stable matching.
Reading: Section 1.1. Review: Chapter 2 and 3. |
Finished up stable matching. Some representative problems.
Reading: Section 1.1 and 1.2 Greedy algorithms. Interval scheduling. Reading: Section 4.1. Homework 1 out. Due on Friday 8:30. |
Interval scheduling, and scheduling all intervals.
Reading: Section 4.1. Started talking about minimizing lateness. Reading: Section 4.2. |
Minimizing lateness. Section 4.2.
Minimum spanning tree algorithms. Section 4.5 and 4.6. |
Minimum spanning tree, Kruskal, Prim, Union-Find data structure, Clustering of maximum spacing.
Reading: Section 4.5, 4.6, 4.7. Homework 2 out. Due on Tuesday at 8:30. |
Week of 7/12-7/16 |
Dynamic programming. Weighted Interval Scheduling and Principles of Dynamic Programming.
Reading: Sections 6.1 and 6.2, and the handout on finding pj values for the jobs in Weighted Interval Scheduling. |
Dynamic programming. Segmented least square problem. Sequence alignment.
Reading: Section 6.3 and 6.6. Homework 3 is out. Due on Friday before class. |
Dynamic programming:
|
Dynamic programming:
|
Bellman-Ford algorithm, push and pull variants, Distance Vector Protocol.
Reading: Section 6.8 and 6.9. Floyd-Warshall algorithm (not in the book). Have a look at this Wikipedia page. |
Week of 7/19-7/23 |
Network flow
|
Augmenting path algorithm (Ford-Fulkerson), max-flow min-cut theorem.
Reading: Section 7.2. |
Applications of max-flow.
|
|
Wrap up max-flow min-cut.
Reading: Section 7.8, 7.9, and 5.1. |
Week of 7/26-7/30 |
Divide and conquer.
Reading: Section 5.1, 5.2. Review session from 3--5. |
Prelim (in class). |
Divide-and-Conquer. Finding closest pair of points in the plane.
Reading: 5.4. |
Divide-and-Conquer. Integer multiplication and Fast Fourier Transform.
Reading: 5.5, 5.6. |
Turing machines. Definitions. Language of a Turing machine. RE (recursively enumerable). R (recursive).
This material is not covered in the book. The instructor can refer you to some books about this material if you are interested. Please talk to the instructor. |
Week of 8/2-8/6 | Turing machines. Multi-tape and non-deterministic. Turing-recognizability. Turing-decidability. | Diagonalization, non-RE languages, non-recursive languages. NP (non-deterministic polynomial time). P (deterministic polynomial time). Reductions. |
NP-completeness. Polynomial time reductions. 3SAT is NP-complete.
|
NP-completeness.
|
NP-completeness.
|
Week of 8/9-8/13 | Cook-Levin Theorem. |
cornell.edu
after the @
sign.
ys246@
gck43@
cs4820-l@cs.cornell.edu
: All students should subscribe to this mailing list. Broadcast messages to students will be sent using this list.cs4820-staff-l@cs.cornell.edu
: If you want to contact the course staff, this mailing list is preferable to sending email to individual people.Generally the assignments will be fairly challenging. It is often helpful to look at the problems early; even if you don't spend a lot of time on them right away, it will help to have the problems stewing in your head for some time!
In particular, it is not a good idea to start the assignment the night before it is due. This course requires slightly different way of approaching the problems, and people tend not to do well under time pressure in such situations.
When questions ask you to ``give an algorithm'' for something, you should also provide a proof of correctness and an analysis of its running time. Unless otherwise specified, when a question asks for an ``efficient algorithm'', we are looking for an algorithm that runs in polynomial time.
You'll notice that some of the questions consist mainly of an English description, without much mathematical notation. This is intentional --- part of the point of the problem sets is to practice formalizing algorithmic problems that are initially described in free text. You can see examples of this process in the book for the course --- the problems considered are initially described informally, then formalized using mathematical notation. You should do the same, defining enough notation to be able to express the problem and its solution carefully, and explaining the meaning of all the notation you use.
Typically, the clearest way to explain an algorithm is in English, with the use of some notation. A clear explanation followed by annotated pseudo-code is also fine. On the other hand, solutions that consist of a long piece of pseudo-code with no accompanying explanation tend to be indecipherable by anyone but the author (and usually indecipherable by the author as well, after a few days). Moreover, our experience is that solutions like this usually turn out to have inaccuracies that render them incorrect. We reserve the right to deduct a significant number of points for solutions that consist only of pseudo-code with no explanation, even if they turn out to be correct. Along these lines, it's in your interest to write up solutions neatly --- this makes it easier to understand what's going on in your solution, and to assign partial credit even if it isn't completely correct.
There are a number of problems at the end of the chapters in the book. These represent a good way to get more practice solving problems related to the material (for example, to help in studying for the prelim and final). If you do work on any of these problems, we will be happy to discuss your solutions with you in office hours. If you want to use a result claimed in one of these end-of-chapter problems as part of the solution to one of the assigned homework problems for the course, you must include a proof of this result with your solutions. (I.e. you can't simply cite the fact that the question was asked in the book and rely implicitly on the answer. This is, of course, in contrast to the rest of the text, which you should feel free to cite as part of homework solutions.)
You are encouraged to work with other students in groups of 3-4 students for coming up with ideas for the homework problems. Please keep the group size small (at most 4). You must write up your solutions completely independently. A good rule of thumb when working in groups is that no one should leave the group meeting with anything written down. Also, you must list the names of the students you worked with on your assignment (there is no penalty for working in groups). Also cite any other source you use to solve the homework problems.
You are not allowed to use the web for finding the answers to the homework or exam questions.
We will assume that everyone has seen the material in CS 2110, 3110, and 2800, and we will use it as necessary in 4820. This includes elementary data structures, sorting, and basic terminology involving graphs (including the concepts of depth-first search and breadth-first search). Some of these are reviewed in the text.
The lectures and homework involve the analysis of algorithms at a fairly mathematical level. We expect everyone to be comfortable reading and writing proofs at the level of CS 2800.
We will cover some topics that are outside of the book, and we will not cover all the topics in the book.
Other reference books that might be useful for some topics: