Overview

CSCI 140 is an introduction to algorithm design and analysis techniques. The course covers basic techniques used to analyze algorithms, basic techniques used in designing algorithms, and important classical algorithms. The goal is to learn how to apply all of the above to designing solutions to new problems (a skill that you will practice throughout the semester). Along the way there will be proof-writing and coding.

The prerequisites for the class are CSCI054 and CSCI062. Send me (Prof. Chen) an email if you have questions about the prerequisites.

Resources

The professor for this class is Professor Chen. I'm happy to talk about the class, about CS more generally, or about anything else. My office hours are Tuesdays 2:30-3:45pm and Thursdays 10-11:15am. I'm also happy to meet by appointment (in person or on Zoom): send me an email with some times that work for you and a sense of what you want to talk about. I'm also available for occasional small group lunches/dinners if you'd just like to chat: see the sign-up sheet on my office door. The best way to contact me is by email.

The mentors/TAs for the class are: Taylor Campbell, Alan Jiang, Jade Jiao, Steven Kim, and Harper Noteboom. In general the mentor hours will be on the 1st or 2nd floor of Edmunds at times TBD. Please expect occasional changes and cancellations; these will be posted on Slack.

We'll use Canvas for distributing course materials. We'll use Slack for announcements and informal discussion. And we'll use Gradescope for submitting and returning assignments. Let me know if you run into issues accessing any of these.

There is no required textbook for the class. However, you may find it helpful to refer to the following:

You are encouraged to look for and to use other resources to learn more about the ideas and concepts. You may not, however, look directly for, or ask about, answers to specific individual questions on the weekly problem sets. Some other resources include:

If you find anything particularly helpful you are encouraged to share it with the class on Slack. If you have any questions about what is allowed please reach out to me directly via email.

If you need (or would like to have a discussion about) accommodations please contact the Disability Coordinator on your home campus. The process for Pomona students is available here.

More generally, life happens to all of us and we know there may be times when staying on top of the workload in this class is going to feel like too much on top of everything else that you're managing. If that happens, please come talk to me so that I'm aware and can work with you to try to figure out a plan. Please keep in touch! (Note: I highly encourage you to come talk to me even if there isn't anything in particular that you feel you need to discuss!)

Logistics

The basic flow each week will be as follows:

The lectures will be in Edmunds 114.

You will be assigned to a small group of approximately 5 students the first week of class. Your group will work together for the entire semester; your first task will be to find an hour when all of you can meet either Thursday or Friday. The plan is for each group to have an assigned TA who will attend the meetings to answer questions, talk through concepts, etc. Each week there will be a low-stakes assignment to work on during your group meeting; this should be turned in by 10pm Friday evening on Gradescope. There are no extensions on the groupwork so please make sure everyone knows who is submitting each week's assignment! Because they will be graded on completeness and not correctness, please make if clear in your submission that you looked at every question even if you decided not to submit a response! There may occasionally be anonymous surveys for you to give feedback on how your group is doing, but please feel free to bring up concerns with me at any time.

In addition, there will be a weekly problem set. The assignments will mostly be done and submitted in pairs and will also be submitted on Gradescope. The pairs will be by assignment for the first few weeks and then at your discretion after that. Problems on the assignment will ask you to apply concepts in new ways. You may discuss the problems with anyone else currently taking cs140 (or with the TAs or myself), but each pair must write up their own solution without referring to any written/typed/etc materials that may have been generated during such discussion. In addition, you must acknowledge who you worked with and what their contribution was. Submitting an answer copied from another student, found on the internet, or generated by an AI-powered system such as ChatGPT is considered an academic honesty violation (see academic honesty policy). Unless stated otherwise, problem sets are due by 10pm on the due date. There is an automatic 24-hour extension on all problem sets (i.e. until 10pm the next day); additional extensions will require documentation of circumstances that could not have been anticipated.

Finally there will be quizzes approximately every other Wednesday. No more than half the lecture time will be allocated to each of these quizzes; the rest of the time will be used on covering new material. You will have the option of re-taking a small number of the written quizzes at the end of the semester (if you need to miss one of the original quiz dates you should plan to include that quiz in the ones that you retake). The last quiz will have a different format: you will need to give a short presentation to me sometime during reading days or finals week. There is no final exam.

The breakdown of grades will be as follows:

Schedule

This is a high-level outline of the planned schedule. Note that the calendar is subject to change. For the readings "CLRS" refers to the book "Introduction to Algorithms, 4th edition" by Cormen, Leiserson, Rivest, and Stein.

Unless stated otherwise, all deadlines are at 10pm on the given date.

Week Day Date Topic Reading Due
1 M 1/19 *** no class - MLK Day *** intro survey due 8pm on 1/18
W 1/21 introduction, review, groups review discrete math (cs54), data structures (cs62)
Su 1/25 week01-ps (done in groups)
2 M 1/26 iterative, proving correctness (insertion sort) CLRS: 2.1
W 1/28 iterative, analyzing time/space (insertion sort) CLRS: 2.2
F 1/30 week02-group
Su 2/1 week02-ps
3 M 2/2 divide-and-conquer: correctness, analysis (mergesort) CLRS: 2.3, 3.1
W 2/4 asymptotics, bounds
* quiz01: iterative *
CLRS: 3.1-3.3
F 2/6 week03-group
Su 2/8 week03-ps
4 M 2/9 divide-and-conquer: analyzing (mergesort, master method) CLRS: 4.3-4.5, 7.1-7.4
W 2/11 randomization, lower bounds (quicksort) CLRS: 7.3, 8.1
F 2/13 week04-group
Su 2/15 week04-ps
5 M 2/16 order statistics, asymptotics/bounds revisited CLRS: 9.1-3
W 2/18 data structures (arrays, linked lists, stacks, queues, trees)
* quiz02: divide-and-conquer *
CLRS: 10.1-10.3
F 2/20 week05-group
Su 2/22 week05-ps
6 M 2/23 data structures, amortized analysis (heaps, heapsort) CLRS: 6.1-6.5
W 2/25 amortized analysis (dynamic tables) CLRS: 16.1-16.2, 16.4
F 2/27 week06-group
Su 3/1 week06-ps
7 M 3/2 data structures (bst, hash tables, searching) CLRS: 11.1-11.5, 12.1-3
W 3/4 data structures (bst, searching)
* quiz03: data structures *
CLRS: 12.1-3, 13.1
F 3/6 week07-group
Su 3/8 week07-ps
8 M 3/9 trees/graphs (traversals, dfs, bfs, topological sort) CLRS: 20.1-20.5
W 3/11 graph algs (SSSP, Dijkstra's, Bellman-Ford) CLRS: 22.1, 22.3
F 3/13 week08-group - optional/optional
9 M 3/16 *** no class - Spring break ***
W 3/18 *** no class - Spring break ***
10 M 3/23 graph algs (MST, Prim's, Kruskal's) CLRS: 21.1-21.2
W 3/25 greedy (scheduling)
* quiz04: graph algorithms *
CLRS: 15.1
F 3/27 week10-group
Su 3/29 week10-group
11 M 3/30 greedy (graph algs) CLRS: 21.1-21.2, 22.3
W 4/1 greedy (graph algs, knapsack) CLRS: 22.3
F 4/3 week11-group
Su 4/5 week11-ps
12 M 4/6 dynamic programming (1D) 14.1, 14.3
W 4/8 dynamic programming (2D, sequence alignment)
* quiz05: greedy algorithms *
14.3, 14.4
F 4/10 week12-group
Su 4/12 week12-ps
13 M 4/13 dynamic programming (graphs, Floyd-Warshall) CLRS: 23.1-23.2
W 4/15 reductions (APSP: Johnson) CLRS: 23.3
F 4/17 week13-group
S 4/19 week13-ps
14 M 4/20 reductions (network flow, bipartite matching) CLRS: 24.1-24.3
W 4/22 complexity classes (P, NP NPC)
* quiz06: dynamic programming *
CLRS: 34.1-34.2
F 4/24 week14-group
Su 4/26 week14-ps
15 M 4/27 NPC reductions (clique, vertex cover) CLRS: 34.3-34.5
W 4/29 NPC reductions (TSP) CLRS: 34.3-34.5
F 5/1 week15-group
S 5/3 week15-ps
16 M 5/4 approximation algorithms (vertex cover, TSP) CLRS: 35.1-35.2
W 5/6 * quiz01-quiz06 retakes *
17 R 5/14 * quiz07: NPC reductions * done by noon