CPSC 320

Intermediate Algorithm Design and Analysis

Course Description

Systematic study of basic concepts and techniques in the design and analysis of algorithms, illustrated from various problem areas. Topics include: models of computation; choice of data structures; graph-theoretic, algebraic, and text processing algorithms.

Average difficulty
4.56 / 5
Average quality
4.38 / 5
Scroll to see reviews

Add a Review for this course

Please ensure that your review is respectful and constructive. Read about UBC's aim for creating a safe and inclusive learning environment here. These reviews may take several days to process and will be scanned for inappropriate or malicious content.

Please enter a name/username.
Enter a valid url including the 'https://' prefix. (https://www.example.com)
Please enter your course review. [minimum length: 50 characters]
3
3

The course - while it was hard as hell - was a highly useful course in the bigger picture. Learning complex algorithm patterns such as DP and D&C has helped visualize problems in a more constructive manner. With those two specifically, you will learn the value of what it actually means to “trust the natural recursion” - just doing so makes the design process so much more intuitive instead of thinking about solving every subproblem.
Difficulty:4.5
Quality:4.5
Shaurya Thareja, Dec 8 2025, course taken 2025W1
This is a good course but it could be better in several ways. In terms of what is good, the course covers many great topics and helps you grow as a computer scientist rather than just a code monkey. Expect to write proofs etc. The last unit on computational complexity and NP completeness is great. My prof (Alan) said that the material in this unit is something everyone (even those outside CS) should know about because it’s deep, interesting, and important and I completely agree. The assignments in this course are great and are probably your best learning tool. Don’t split the assignments up or get too much help from humans or AI because you’ll lose opportunities to learn. All that said, there are things about this course I found lacking. There’s not a lot of practice material given besides the assignments and some past exams so it’s kind of up to you to find extra practice resources if you want them. But such practice is important for some people to do well in this course, so it would be better if the course supported this more. I found that it took a long time to do the weekly textbook readings. There’s something to be said about struggling through readings, but I felt this took time away from more productive things related to this course. I didn’t mind the worksheet approach (flipped classroom). However, I think at times it’s a stretch to expect students to complete the worksheet themselves in the time given, so the whole thing devolves into watching the prof solve the worksheet which doesn’t seem that useful (I can read the worksheet solutions on my own time). A similar point could be made about tutorials.
Difficulty:4
Quality:3.5
ushankab, Apr 27 2025, course taken 2024W2
CPSC320 covers a wide variety of algorithmic techniques, more abstractly than CPSC221. The course focuses more on pseudocode and runtime/space complexity analysis and rarely touches on implementation details. LeetCode/competitive programming experience will be helpful (and CPSC320 also helps build those skills!) Start assignments early (as soon as they’re released) and reference tutorial solutions for hints. It’s difficult to study mechanically for this course, as exams and assignments will assess creative thinking and application of techniques in new situations. Exams are fair given the time constraints. This term’s exams were primarily multiple choice or fill-in-the-blank, with longer written questions on the final.
Difficulty:4.5
Quality:4.5
anon_320_student, Jan 4 2024, course taken 2023W1
One of the more difficult course in CPSC as it delves into challenging abstract topics. Assignments will take a large portion of your time. Though challenging, it is an important course that can help leapfrog your leetcode skills to be more competitive for internships.
Difficulty:5
Quality:4.5
Crispin, Apr 11 2023, course taken 2022W1
Took this with Patrice Belleville. Extremely difficult course, but the course was ran well. Assignments were very tough, I needed to go to office hours and consult with peers very often for understanding of concepts. Prof was understanding and fair. Start assignments early and go to lectures & office hours, assignments can take up a significant portion of time to understand and office hours are often quite packed. Concepts taught in the course are very useful for industry and leetcode.
Difficulty:5
Quality:4.5
Kristen F, Feb 15 2023, course taken 2022W1
Very useful code to get you a job in the industry. Helps you in almost all Data Structure and Algorithm questions. Please start your assignments on time.
Difficulty:4.5
Quality:5
anon, Feb 3 2023, course taken 2022W1
Strikingly similar to CPSC 121 in terms of course structure, but on more advanced topics (e.g., DP, greedy, etc.). Course was well ran and assignments were challenging, but fair.
Difficulty:4
Quality:4.5
Michael DeMarco, Oct 25 2022, course taken 2021W1
Pain. Gives you the ability to slay leet codes. One of the most difficult cs courses at ubc
Difficulty:5
Quality:4
Eugene, Nov 7 2022, course taken W1

Historical grade information

Grades information from UBC Grades Database