Chevron Left
Back to Algorithmic Toolbox

Algorithmic Toolbox, University of California San Diego

4,373 ratings
928 reviews

About this Course

The course covers basic algorithmic techniques and ideas for computational problems arising frequently in practical applications: sorting and searching, divide and conquer, greedy algorithms, dynamic programming. We will learn a lot of theory: how to sort data and how it helps for searching; how to break a large problem into pieces and solve them recursively; when it makes sense to proceed greedily; how dynamic programming is used in genomic studies. You will practice solving computational problems, designing new algorithms, and implementing solutions efficiently (so that they run in less than a second)....

Top reviews


Jan 20, 2017

I liked the fact that the algorithms are not just the introductory searching and sorting algorithms. The assignments are fairly difficult (I have decent scripting experience), but not impossibly so.


Feb 10, 2019

The course is perfectly designed. The perfect start for those who start with data structures and algorithms. The Dynamic programming was a little bit tough but overall course is perfectly designed

Filter by:

859 Reviews

By Greg G.

Apr 25, 2019

I have a Mechatronics MSc and now I'm transitioning to CS after starting to work as a software developer. Even with an engineering background, this course was challenging: you need to think hard when designing algorithms, then precisely design and test a solution. (Stress) testing is a concept that is frequently used in everyday software development, too.

For some assignments, you'll find the pseudocode in the slides so those need less brain power to implement but for others, you'll have to come up with your own original solution. This requires time and research. It's possible to ask others in the forum or Google around for hints, and most assignments can be solved in multiple ways (e.g. I solved several of the dynamic programming assignments with memoized recursive functions). You won't find many hints from the teachers, though since that would spoil the learning part here - the essence of the course is not in the slides but in solving the assignments on your own.

Upsides of the course are the automatic grading system, the diversity of the assignments and the quality of the mathematical content and the slides.

Downsides of the course are the sometimes bad accent of the teachers - this could be eased with more accuraate captioning for the videos -, and the clumsiness of downloading slides (they are not available in one package, and trust me, you're going to use them a lot!)

Prerequisites for this course: you will need linear algebra knowledge to know about e.g. geometrical series or limit values, and you will need to know how mathematical proofs work. This is all advanced high school or 1st semester college material, so nothing special. Fortunately the teachers always point to extra links if you're in trouble.

Also, you'll need working knowledge for 1 programming language. Fortunately for many languages, you won't need to care about I/O, it's already in the starter files. I learned Python just for fun, during this course for example. All that is needed is basic control statements (loops-if), arrays and functions, nothing more.

Tips: 1. Don't give up! 2. You don't need to solve all the assignments, the ones after the minimum level are usually more advanced. 3. When in trouble, stress test if you can, it helps a lot. 4. If you're confident, you can 'make a run for it' and submit your file - you can submit as many times as you want.

By Josh Fiddler

Apr 25, 2019

Opted for 5 over 4. Not a perfect course but damn close: Assuming 'basic knowledge' one of the languages suggested should also have as a pre-requisite 'introductory computer science' since having an ability to code in say python at a basic level doesn't necessarily mean you understand anything about file and bitstream IO, or other useful abstractions that will make this course a wee bit more interesting.

Anyone who doesn't have a strong grasp of CS principles shouldn't be dissuaded however, it just means that your learning curve will be steeper. The trick is digging your heels in and researching the problems, sticking to your guns and hammering out even the most ugly of code until you have a correct solution... AND THEN trying to make the thing faster. You will get faster at writing our your plan, faster at implementing, and learn to read code line by line to understand what is happen beneath the abstraction.

I'd also urge people to avoid using built-in functionality of your language to solve a lot of these problems, ie. in the Majority Element problem, you *could* just use python's built-in counter to count instances for you but by doing that, do you really understand what is happening beneath the hood? Do you really understand what the output of that abstraction is doing? Probably not. So do it the 'by-hand' way and then take advantage of the built-ins when you rewrite the code for your own use or to put on your repo.

All in all, a great 'trial by fire' course if you're a novice, and if you're not a novice, it will help make you a better programmer. For sure.

By Priyesh Pandey

Apr 11, 2019

I had a very good experience doing this course. I have refined my algorithmic skills with this course and can apply the concepts really well at competitive programming. Thanks to coursera!


Apr 10, 2019


By Mohammed Bouchena

Apr 08, 2019

very ace

By Deepak Yadav

Apr 07, 2019

very good outstanding content

By Kirill Bochkarev

Apr 06, 2019

Very nice introduction to algorithms and O-notation! Highly recommend!

By Mehrdad Mahdavi

Apr 04, 2019

Some of the lectures was really bad and the instructor wasn't able to convey the context. I felt that I needed more illustration, example and intuition to get the idea so I had to go to other resources which to understand some topic which was really time consuming.

-The exercises were really good and help me to learn a lot.

-Some code stating skeleton were misleading

-I wrote my codes in C and it was really hard to implement exercises as some assignment required complex data structures such as dynamic sized arrays which C does't have

By Amog Chandrashekar

Apr 02, 2019

The content is top notch. Assignments are very helpful. If you are able to solve the problems by yourself, you will learn a lot. The problem that i faced is, some content is very complex, not easy to understand.

By Suman Kumar

Apr 01, 2019

Very good course.