This document contains a summary of my studies in algorithms. It contains what I've already studied and what I plan to study.
Each section contains main theory algorithms and problems related to that theory. Every time I find a problem in a context and I realize the best solution belongs to a category bellow, I add the problem there.
- Data structures - To refresh memory about each data structure's strong/week points, complexity of operations. This should be used as a revision before an interview.
- Back tracking - Chess problem and problems that can be solved by "brute force", without dynamic programming.
- Combinatorial analysis - permutations, combinations, repetitions and its variations + math review
- Sorting algorithms - Refresh ideas behind each of them (divide and conquer, recursion) and compare complexity of the best ones.
- Parsing algorithms - Most common problems for text/language/expression parsing.
- Greedy algorithms - Most common problems that can be solved with greedy as best option. Discussion about greedy property.
- Dynamic programming - Most common problems that can be solved with dynamic programming as best solution
- Linear programming - TODO
- String searching algorithms - Most common algorithms for string searching and related problems
- Graph algorithms - Most common graph algorithms
- Computational Geometry algorithms - K-nearest point, segment intersection, convex hull, etc.
Juan study plan - https://github.com/juanplopes/icpc/blob/master/README.md