Skip to content

Commit 19c3cbb

Browse files
authored
Update README.md
1 parent fb52b6c commit 19c3cbb

File tree

1 file changed

+35
-3
lines changed

1 file changed

+35
-3
lines changed

README.md

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ If you're interested in expanding your knowledge of algorithms, I've included a
147147

148148
## Books
149149
Some helpful books to formally introduce algorithims:
150-
* [Introduction to Algorithms (CLRS)](https://web.njit.edu/~wl256/download/cs610/Introduction-to-algorithm-3rdEdition.pdf) by Cormen, Leiserson, Rivest, Stein - Standard text for introductory algorithms courses; proof-based, very rigorous, comprehensive explanations.
150+
* [Introduction to Algorithms (CLRS)](https://web.njit.edu/~wl256/download/cs610/Introduction-to-algorithm-3rdEdition.pdf) by Cormen, Leiserson, Rivest, and Stein - Standard text for introductory algorithms courses; proof-based, very rigorous, comprehensive explanations.
151151
* [The Art of Computer Programming](https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043) by Knuth - Extremely high level, incredibly detailed text; should be used primarily as a reference.
152152
* [Algorithms Unlocked](https://book-store.github.io/cse/thirdyear/[Thomas_H._Cormen]_Algorithms_unlocked(BookZZ.org).pdf) by Cormen - More accessible, beginner-friendly text; read this if you find CLRS too daunting.
153153
* [Algorithm Design](http://184.168.171.185/BOOKS/DVD%201/Algorithm%20Design%20-%20Jon%20Kleinberg,%20Eva%20Tardos.pdf) by Kleinberg and Tardos - Great introductory book, probably better suited for beginners than CLRS; great explanations of graph theoretic algorithms and analyses.
@@ -156,14 +156,46 @@ Some helpful books to formally introduce algorithims:
156156
* [Introduction to Algorithms: A Creative Approach](https://github.com/haseebr/competitive-programming/blob/master/Materials/Introduction%20to%20Algorithms%20by%20Udi%20Manber.pdf) by Manber - Very light, not as proof-heavy as industry standard texts like CLRS but still very informative; provides excellent algorithmic intuition.
157157
* [Algorithms](http://www.cse.iitd.ernet.in/~naveen/courses/CSL630/all.pdf) by Dasgupta, Papadimitriou, Vazirani - Good, very readable, beginner-friendly algorithms textbook; used for decades at Berkeley and UCSD.
158158

159+
## Courses
160+
More courses avilable [here](https://github.com/prakhar1989/awesome-courses#algorithms)
161+
* [Algorithms](https://www.coursera.org/learn/algorithms-part1) on Coursera, taught by Wayne and Sedgewick (Princeton) - This online course goes hand in hand with Sedgewick's algorithms textbook, very good practical resource if you're using that book or you're familiar with Java.
162+
* [Algorithms](https://www.coursera.org/specializations/algorithms) on Coursera, taught by Roughgarden (Stanford) - More conceptual course, prioritizes mathematical analysis over implementation details.
163+
* [Introduction to Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/) on MIT OCW, taught by Leiserson and Demaine (MIT) - This is a good counterpart to Cormen's text since it's taught by the L in CLRS; very rigorous, detailed course.
164+
* [Design and Analysis of Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/index.htm) on MIT OCW, taught by Demaine, Devadas, and Lynch (MIT) - Intermediate algorithms course; goes in-depth on a handful of topics/probelms, should only be taken after introductory courses.
165+
* [Data Structures in Java](https://www.coursera.org/specializations/java-object-oriented) on Coursera, taught by Porter, Alvarado, and Minnes (UCSD) - Good explanation of Java data structures including comparisons and performance analyses.
166+
* [Advanced Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2008/) on MIT OCW, taught by Goemans (MIT) - Graduate level course, focuses largely on advanced data structures, graph theoretic algorithms, computational geometry, and number theoretic algorithms. Useful as a reference for exploring specific topics in-depth.
167+
* [Randomized Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-856j-randomized-algorithms-fall-2002/index.htm) on MIT OCW, taught by Karger (MIT) - Graduate level course, explores randomized algorithms which aren't often covered comprehensively in many introductory algorithms texts/courses. Requires solid background in linear algebra, probabilty theory, and statistics.
168+
* [Advanced Data Structures](http://courses.csail.mit.edu/6.851/spring12/lectures/) on MIT OCW, taught by Demaine (MIT) - Graduate level course, explores very advanced data structures and operations on them.
169+
* [Advanced Algorithms](http://people.seas.harvard.edu/~minilek/cs224/fall14/hmwk.html) taught by Nelson (Harvard) - Very challenging problem sets; lectures assume broad knowledge about algorithms.
170+
* [Introduction to Programming Contests](http://web.stanford.edu/class/cs97si/) taugth by Park (Stanford) - Good list of competitve programming algorithms and strategies for problem solving. Excellent resource for practice problems.
171+
159172
## Websites
160173
Websites that offer detailed explanations and complexity analyses for some of the above algorithims:
161-
162-
## Courses
174+
* [Topcoder Algorithms Tutorials](https://www.topcoder.com/community/data-science/data-science-tutorials/) - Phenomenal resource taught by competitive programming legends. Lots of challenging algorithms deconstructed and numerous applications demonstrated with Topcoder problems.
175+
* [GeeksforGeeks](http://www.geeksforgeeks.org) - Almost every well known algorithm is explained on this site with implementations, however some explanations are occasionally cursory/lacking in detail/unclear.
176+
* [IOI Syllabus](https://people.ksp.sk/~misof/ioi-syllabus/) - Detailed list of topics covered by the IOI
177+
* [E-maxx](http://e-maxx-eng.appspot.com) - Translated from [Russian](http://e-maxx.ru/algo/) to English, very good list of useful algorithms and impelmentations along with explanations; widely used within the competitive programming community.
178+
* [Algorithms Discussion](http://codeforces.com/blog/entry/13529) - Codeforces blog post containing diverse array of algorithms (including less common techniques) and links to explanations/implementations.
179+
* [500 Data Structures and Algorithms](https://techiedelight.quora.com/500-Data-Structures-and-Algorithms-practice-problems-and-their-solutions) - Collection of software engineering interview questions and solutions.
163180

164181

165182
## Online Judges
166183
Competitive programming websites and online judges which offer a plethora of interesting algorithmic problems for all skill levels:
184+
* [Topcoder](https://www.topcoder.com/my-dashboard) - Elite programming competitions; monetary prizes attract significant talent, makning this platform one of the most competitive. Very broad range of problems from beginner-friendly to extremely challenging. Challenge period avilable to win extra points by reading others' code and calling them out for incorrect solutions.
185+
* [Codeforces](http://codeforces.com/contests) - On par with Topcoder, Codeforces offers longer, albeit similar problems, with similar styles. Only disadvantage is that competition times are often inconvenient if you live in the US.
186+
* [Google Code Jam](https://code.google.com/codejam/) - Annual competition sponsored by Google, very fun problems (in my personal opinion).
187+
* [USACO]
188+
* [HackerRank]
189+
* [CodeChef](
190+
* [LeetCode](https://leetcode.com) - Offers light, fast interview-style problems rather than heavy algorithmic challenges. Excellent resource for preparing for software engineering interviews.
191+
* [HackerEarth](https://www.hackerearth.com) - Similar to LeetCode, not as competitive, offers fun 1v1 challenges.
192+
* [Project Euler](https://projecteuler.net) - Mathematical and number theoretic problems that require both mathematical insight and programming skill to solve; around 600 problems currently available.
193+
* [Sphere Online Judge (SPOJ)](http://www.spoj.com) - Perhaps the best known online judge; very fast, accurate checkers and a diverse array of problems; diverse probelms for all levels; used by many competitive programmers to hone their skills.
194+
* [UVa Online Judge](https://uva.onlinejudge.org) - Very large database of contest problems including ACM-ICPC, geared towards more advanced programmers.
195+
* [Timus Online Judge](http://acm.timus.ru/?locale=en) - Russian online judge offering unique types of problems.
196+
* [Peking University Online Judge (POJ)](http://poj.org) - Used by Peking University ICPC team, good resource.
197+
* [Kattis](https://open.kattis.com) - Good, reliable online judge used by ACM-ICPC.
198+
167199

168200
## Github Libraries
169201
(In case you don't speak Java)

0 commit comments

Comments
 (0)