Non-required textbook: Introduction to Algorithms, 3rd edition, by Cormen, Leiserson, Rivest and Stein.
Prerequisites: Discrete math is important. Basic understanding of some data structures and probability will matter too. Overall, you should possess
mathematical maturity.
Topics:
This is an introduction to the design and analysis of algorithms, which involves discussing a few basic data structures as well. Many topics could fit in such a course, and not all intro courses go over exactly the same material.
Grading (exams)
Gradescope: How to submit homework. How to take exams.
Tips for doing well in this course, if you find it challenging:
Everyone involved in this course is to respect the following:
You are expected to keep up with the schedule that can be found on the course Schedule page.
I will use lecture time in various ways: I might focus on answering your questions about recent material, informally recap topics, discuss recent homework, or go over some practice problems. This will work best if you come prepared with questions about the course notes, and if you do the homework. As the semester progresses and we cover more challenging topics, I may shift to a more traditional live lecture style, but the recorded videos will still be your primary resource. I will not record our Zoom meetings, but if we discuss any new practice problems they will be posted in Piazza. If you are in a time zone that prevents you from attending "normal" class time, you will have opportunities to make up for this at other hours.
This is commonly just referred to as ``CLRS".
More info at MIT press.
Note: my Resources page refers to this book so you can find relevant chapters if you wish. The course doesn't explicitly rely on the book though. Also, CLRS is massive. We will not cover everything in it. See "Topics" below.
See the Resources page and search for the word "prerequisite" to see when you will need to know background material.
You will probably find this course difficult if you're not comfortable with induction, recursion and proofs, or if big-O seems like a challenging concept. It is assumed that you know the basics about arrays, linked lists and trees. Knowledge of basic probability will be helpful for two or three lectures but I will recap what you need to know.
If you have not done well in discrete math or have not passed data structures, you should contact me.
We will place all emphasis on theory instead of programming. This course is about figuring out how to solve a problem before you start coding.
To see what is taught in this course, please visit the
Resources page.
If you submit it, we will grade it and provide feedback, but this is done purely so that you can practice and understand where you might have incorrect reasoning. It is not factored into your final grade in any way.
Excused absence:
If you have a serious reason for not taking an exam, you should notify your academic advisor and/or Health Services, and of course you may CC me as well.
I cannot arrange a makeup exam if you have a predictable conflict that could be reasonably avoided. Check the exam schedule before making plans.
Important note:
The way I have taught the course until now, exam scores are typically low. It is important that you understand that exam scores are just numbers. Getting a 40 in this course is not the same as getting a 40 in a course where the median is 80. I will provide feedback and distributions after exams, so that you know where you stand.
Don't bet on getting a low score and passing because of a curve. Even though it's not easy to obtain high scores on my exams, getting under 30% is usually a strong indication that you have not comprehended the material well enough to pass the course. You might still pass with a curve, but that will not be determined until the end of the course.
Warning:
If you need credit for this course in order to graduate or maintain a scholarship, it is your responsibility to do well. There will be no extra credit options.
Don't cheat: