Note: If you are on the waitlist and/or seriously considering taking this course, please 1) send me an email, so I can add you to campuswire and give you access to the course materials before you are officially enrolled, 2) work on the entrance exam on CodeForces (ensuring sufficient background for this course), and 3) attend all the lectures. Note that this is a 10-week course, and it is unlikely to make up if you miss the first several weeks of class.

Hi, welcome to CS218! 🎉

The course covers efficient algorithms and data structures for problems from a variety of areas such as sorting, searching, selection, linear algebra, graph theory, and combinatorial optimization. It will also cover techniques for algorithm design (greedy, divide-and-conquer, dynamic programming) and rigorous proofs of correctness and time- and space-complexity (amortized analysis, Master Theorem). In particular, we will also put a strong emphasis on the practice. In the course, we will consider both design and analyze the interesting algorithms in theory, and include some training to implement them!

⏰ Lectures: TTh 12:30 – 1:50 PM

🏫 Classroom: SOM EDUCATION I | Room G650

We will use

  • CampusWire for sending annoucements and online discussions.
  • GradeScope to submit homework assignments. You should be added to GradeScope automatically if you are enrolled in the course.
  • CodeForces to test coding assignments. See more details here.

The course announcements will be sent via CampusWire, so please make sure you enable email notifications. ⚠

⚠ You will likely find this course difficult. There are several reasons why. First, Computer Science and Engineering are challenging disciplines requiring extensive time to master, and algorithm is the core of it. Second, the material covered in the course, combines both theory (analysis of algorithms) and practice (implementing them), and thus require you to have solid background in both math and programming. Third, this course will require generating your own algorithms in addition to just memorizing and understanding existing algorithms. If you don’t know programming, then there will also be the additional overhead of learning coding, and you should start learning it immediately. There are many online resources for doing so.

It is thus important for you to mentally prepare yourself for a difficult course. If you do your work, we are confident that you will finish this class with a satisfactory grade, and will one day (if not immediately) find what you learned in this course useful in your career (and fun, hopefully).

Please make sure you understand the policy of the course, especially about Academic Integrity.

✅Prerequisites: Upper level undergraduate algorithm course (CS141 or equivalent); proficiency in at least one high-level programming language. Proficiency with C++ is highly recommended


  • Yan Gu

    - ✉ Email: ygu [at]
    - Office: WCH 335


  • TBA

    - ✉ Email: TBA [at]
  • TBA

    - ✉ Email: TBA [at]

🗓 Calendar:

You can add the this to your Google Calendar if you want (by clicking the little “+” bottom right). All the lectures and assignment deadlines are included in this calendar.


Introduction to Algorithms (CLRS).
Third Edition. Cormen, Leiserson, Rivest, and Stein. MIT Press.
[UCR Library Link]

We will cover many other interesting topics that are not in the textbook.