# Awesome Algorithms

A curated list of awesome places to learn and/or practice algorithms. Inspired by awesome-awesomeness and all the other awesome Awesome libraries.

If you want to contribute, please read the contribution guidelines.

- Awesome Algorithms
  - Websites
  - YouTube Playlists
  - Online Courses
  - Books
  - Cheat Sheets
  - Github Libraries
  - Online Judges
  - Tools

## Websites

Websites you should use to learn classic algorithms

- A Visual Guide to Graph Traversal Algorithms - Interactive visualizations for learning how graph traversal algorithms work.
- W3School - Data Structures tutorial.
- CodeChef - Learning DSA by practice on Codechef
- Algorithm Visualizer - Dozens of animated algorithms (with code), and you can also create your own.
- Algorithms Visualization - A dense article on Algorithms Visualization.
- Big-O Cheat Sheet - Big-O complexities of common algorithms used in Computer Science.
- Code-Drills - Practice problems recommender (includes Codeforces, Codechef, and Spoj).
- CP-Algorithms - Algorithms and data structures are especially popular in the field of competitive programming.
- Data Structure Visualizations - Visualize the behavior of Data Structures and play with its operations.
- Geeks for Geeks - Lots and lots of well-explained and implemented algorithms.
- Path Finding - A visual representation of how algorithms such as A*, IDA*, Breadth-First-Search, Best-First-Search, and others describe a path between two points A and B.
- Programiz - Easy to follow tutorials on data structures and algorithms along with suitable examples.
- Rosetta Code - A programming chrestomathy site that aims to present implementations of many algorithms and data structures in different programming languages.
- Sorting Algorithms - Nice and simple animations of sorting algorithms. With short codes and discussions.
- Stoimen’s web log - Some algorithms nicely explained.
- The Sound of Sorting - The Sound of Sorting - “Audibilization” and Visualization of Sorting Algorithms
- VisuAlgo - Visualising data structures and algorithms through animation.
- Wikipedia - Algorithms - Of course!!
- Wikipedia - Data Structures - and why not ?!!
- Learnersbucket - Tutorials on data structures and algorithms in Javascript.
- redblobgames - interactive visual explanations of math and algorithms, using motivating examples from computer games.

## Youtube Playlists

High Quality Courses and tutorials on youtube

- Tim Roughgarden. Algorithms Illuminated - Tim Roughgarden, a pioneer of computer science, offers a companion to his book, with lecture videos and slides.
- FreeCodeCamp - Algorithms and Data Structures Tutorial - Full Course for Beginners - Complete beginner friendly Algorithms and Data Structures Tutorial with mindblowing animation.
- Abdul Bari - Introduction to Algorithm - This playlist is so much informative and provide simulation with code example. As like as you are in a class.
- Jenny’s Lectures- Algorithm - Another complete algorithm playlist from basic level to intermediate. Easy explanation and simulation.

## Online Courses

Free and High-Quality Courses Online

- Algorithms: Divide and Conquer, Sorting and Searching, and Randomized Algorithms - The primary topics are: asymptotic (“Big-oh”) notation, sorting and searching, divide and conquer, and randomized algorithms.
- Algorithms: Graph Search, Shortest Paths, and Data Structures - The primary topics are: data structures, graph primitives, and their applications.
- Algorithms: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming - The primary topics are: greedy algorithms and dynamic programming.
- Algorithms: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them - The primary topics are: shortest paths, NP-completeness and what it means for the algorithm designer, and strategies for coping with computationally intractable problems.
- Algorithms, Part I - This course covers the essential information that every serious programmer needs to know about algorithms and data structures. Part I covers elementary data structures, sorting, and searching algorithms.
- Algorithms, Part II - Part II focuses on graph- and string-processing algorithms.
- Khan Academy Algorithms - Algorithm course ministered by Tomas Cormen and Devin Balkcom.
- MIT - 6-006 - Well explained algorithms.
- MIT - 6-046j - Similar to the previous one, but with different algorithms.
- MIT - 6-00sc - An easy and well-explained introduction to algorithms.
- MIT 18-409 - Topics in Theoretical Computer Science: An Algorithmist’s Toolkit - It covers a collection of geometric techniques that apply broadly in modern algorithm design.
- Udacity Intro to Algorithms - Python-based Algorithms course.
- Algorithms in Motion - Beginner’s algorithms course with fun illustrations, based on the book Grokking Algorithms
- YogiBearian YouTube Channel - Lots of well-explained videos on various computer science subjects. Account terminated due to violations of Youtube Policies.

## Books

The most highly regarded books to learn algorithms

### Algorithms and Data structures

- Algorithm Design - Pretty straightforward.
- Algorithms - Problems explained with Java, OO good practices, visualizations, and free online resources.
- Algorithms and Data Structures in JavaScript - Classical algorithms and data structures implemented and explained using JavaScript.
- Algorithms in a Nutshell - by George T. Heineman.
- Classic Computer Science Problems in Python -This great book presents dozens of coding challenges, ranging from simple tasks to clustering data using k-means.
- Data Structures and Algorithms Made Easy - A great way to implement algorithms with their specific programmable tasks.
- Data Structures Using C - The basic concepts and usages of data structures.
- Elementary Algorithms - An awesome book about algorithms and data structures.
- Grokking Algorithms - An illustrated book on algorithms with practical examples.
- Introduction to Algorithms - Essential!
- Real World Algorithms: A Beginner’s Guide - An introduction to algorithms for readers with no background in advanced mathematics or computer science.
- Swift Algorithms & Data Structures - A practical guide to concepts, theory, and code.
- The Algorithm Design Manual - Easy to read and full of real-world examples.
- The Art of Computer Programming - The Book.
- Structure and Interpretation of Computer Programs
- Advanced Algorithms and Data Structures - A different and a great way to introduce algorithms and data structures that can be used at work.
- Algorithmic Puzzles - A very accessible illustration of algorithms in the forms of puzzles. No programming experience is required!
- Standford CS166 - Standford CS166, a course in the design, analysis, and implementation of data structures.
- Grokking Data Structures - Grokking Data Structures carefully guides you from the most basic data structures like arrays or linked lists all the way to powerful structures like graphs. It’s perfect for beginners.

### Algorithm Analysis

- Sedgewick & Flajolet. An Introduction to the Analysis of Algorithm - Am advanced complete survey, intended only for the mathematically matured reader.
- McConnell. Analysis of Algorithms - A very accessible and brief book on algorithms analysis, with implemented code included.
- Vrajitoru & Knight. Practical Analysis of Algorithms - A very accessible and brief book on algorithms analysis, with implemented code included.

### Randomized Algorithms

- Motwani & Raghavan. Randomized Algorithms - A standard classic book.
- Mitzenmacher & Upfal. Probability and Computing: Randomization and Probabilistic Techniques in Algorithms and Data Analysis - Standard text for probability methods and their applications on randomized algorithms.

## Cheat Sheets

- Tech Interview Cheat Sheet
- Princeton DS Cheat Sheet
- CLRS in short
- Rice university DS course in short
- Useful Reddit thread
- Algo Deck - An open-source collection of +200 algorithmic cards.

## Github Libraries

Implementations of the most classic algorithms in a wide variety of programming languages

- C
  - by @fragglet
  - by @TheAlgorithms
- CoffeeScript
- C#
  - by @shkolovy
  - by @aalhour
  - by @justcoding121
- C++
  - by @xtaci
  - by @PetarV-
  - by @faheel
  - by @sslotin
- Erlang
- Go
  - by @arnauddri
  - by @floyernick
- Java
  - by @jpa99
  - by @phishman3579
  - by @asmolich
  - by @psjava
  - by @jeandersonbc
  - by @pedrovgs
  - by @Erdos-Graph-Framework
  - by @deepak-malik
  - by @yusufcakal
  - by @FarheenB
- JavaScript
  - by @jiayihu
  - by @felipernb
  - by @nzakas
  - by @duereg
  - by @mgechev
  - by @trekhleb
  - by @ManrajGrover
  - by @amejiarosario
  - by @zonayedpca
- Lua
  - by @evandrolg
- Objective-C
  - by @ EvgenyKarkan
- PHP
  - by @TheAlgorithms
- Python
  - by @nryoung
  - by @prakhar1989
  - by @laurentluce
  - by @nbro
  - by @keon
  - by @vinta
- Ruby
  - by @kanwei
  - by @sagivo
  - by @kumar91gopi
- Scala
- Swift
  - by @kingreza
  - by @waynewbishop
  - by @hollance
- Language agnostic
  - by @kennyledet
  - by @indy256
  - by @sagivo
  - by @patmorin
  - by @btjanaka

## Online Judges

Online Judges to practice what you learned above

- A2 Online Judge - Online Judge and problem archive.
- ACM-ICPC Live Archive - Hundreds of problems from previous ACM-ICPC Regionals and World Finals.
- AIZU ONLINE JUDGE - A Japanese online judge from the University of Aizu, offering a wide range of algorithmic challenges.
- Algo Muse - Research-based algorithmic problems.
- AtCoder - Japanese programming contest website.
- Baekjoon Online Judge - Korean Online Judge. 10000+ problems. Supports 60+ languages.
- Beecrowd - The Largest Competitive Programming and Online Code Judgement Platform in Latin America.
- CS Academy - Holds online contests and IOI practice contests
- CodeChef - More problems and monthly online contests.
- Codeforces - The only programming contests Web 2.0 platform
- Codefights - Practice programming and tackle your next tech interview
- CodeMarshal - Real-world contests online!
- CodeWars - A website that houses support to solve algorithms in many languages in varying difficulty.
- CoderByte - A decent website with algorithm challenges from beginner to advanced levels. Supports most of the popular languages like C++, python, javascript, ruby.
- Firecode - Firecode.io uses machine learning algorithms along with curated real-world interview questions, solutions & a vibrant social community of learners to get you ready for your next coding interview.
- Coding Blocks - Website that has problems based on Maths, Data Structures, Various Algorithm and also conducts Coding Competition.
- HackerEarth - Practice algorithmic problems & challenges and participate in hiring challenges.
- HackerRank - Featured algorithm and functional programming online judges
- HiHoCoder - Chinese and English problem-solving practice and recruitment challenge site.
- Infoarena - Romanian Online Judge. 1500+ algorithmic problems
- Interviewbit - Learn, practice, and prepare for interviews.
- Kattis- Online judge and problem archive
- LavidaOnlineJudge - Korean Online Judge(Half English). 1300+ problems.
- Learneroo Algorithms Tutorials - Learn and practice algorithms by solving challenges online.
- LeetCode - Learn algorithms and prepare for interviews.
- Paiza - A Japanese platform offering coding challenges and career preparation.
- PKU JudgeOnline - Chinese Online Judge.
- ProjectEuler - Mathematical problems that can be solved using algorithms (or just a pencil, depending on how much you already know).
- Rosalind - A platform for learning bioinformatics and programming through problem-solving.
- ShareCode.io - Online Judge and contest host with a lot of algorithmic problems in the archive to practice.
- Snakify - An introductory Python course with 100+ algorithmic problems and a step-by-step debugger (from Russia).
- SPOJ - More problems.
- TopCoder - Lots of problems and real-world/money-worthy problems in Graphic Design, Data Science, and Development.
- Toph - Bangladeshi Online Judge. Holds online contests regularly.
- URI - Brazilian Online Judge. Not so many problems, but it’s growing and it has online contests.
- UVA - Hundreds of problems (from previous ACM-ICPC Regionals, World Finals, and others).
- Codility - Compete to land coding jobs at top companies

## Blogs

Awesome list of blogs, mainly for competitive programming but you can refer to these when learning a new topic/algorithm

- An awesome list for competitive programming! - Awesome blog for all the resources and list of books and algorithms.
- Algorithms Weekly - A good blog by Petr Mitrichev, mainly in Java.
- Sport of Programming - Informative blog for starting with the sport of programming.
- Algorithms and Data Structures - For getting a deeper knowledge of algorithms and how to think in the right direction.
- Algorithm Tutorials by Tanuj Khattar - Excellent blog by Tanuj Khattar. Covers tutorials on some interesting data structures along with example problems to solve.

## Tools

Some tools that can help you in the learning of algorithms

- interactive-coding-challenges - Interactive, test-driven coding challenges (algorithms and data structures).

## Related Awesome Lists

- Math - Freely available lecture notes on mathematics.
- Theoretical Computer Science - The interdisciplinary of Mathematics and Computer Science, Distinguished by its emphasis on mathematical technique and rigour.

## License

And for the sake of copyleft, here’s our license:

This work is licensed under a Creative Commons Attribution 4.0 International License.

algorithms.md Github