└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # How to become dangerous in Algorithms 2 | A guide to the intrepid adventurer. 3 | 4 | 5 | ## Description 6 | 7 | **Algorithms and data structures are the bases of all programs**, they can be the difference between a program running for 1 seconds vs running for the age of the universe. They can be the difference between finding a rapid solutions by remembering a similar solution, that you can frame a problem with a known problem, or detecting that it is a NP Complete problem because you can frame it as a similar known problem. In that case maybe a simple greedy algorithm is the best choice. When I say “become dangerous in algorithms” I don’t mean to do bad stuff, I mean become really good at algorithms :-D
8 | 9 | 10 | ## Algorithms and data structures 11 | 12 | Algorithms and data structures can be a tough subject, full of heavy math analysis, but for a gentle introduction that will let you go very far in terms of taking good choices for the most common problems read the following good book. It relies on more that 400 drawing to pass the intuition about algorithms. It uses Python. You can read it easily in one day.
13 | 14 | 1. **Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People**
15 | by Aditya Bhargava 16 | 17 | Then after reading it, you can continue in the easy path, but with more depth and more algorithms and data structures, also in Python.
18 | 19 | 2. **A Common-Sense Guide to Data Structures and Algorithms, 2th Ed**
20 | by Jay Wengrow 21 | 22 | Then **if you liked the subject and desire to go farther** and **want to see were the rabbit hole goes**, you can read the following four wonderful books, the first one is accessible but at the same time in depth, with a **Hitchhiker’s Guide to Algorithms**. The following two, are from competitive programming in C++ and the last one the classical bible of algorithms and data structures. In the site of the first one you can see links to good implementation of those complex algorithms shown in the book.
23 | 24 | 3. **The Algorithm Design Manual, 3rd Ed**
25 | by Steven S. Skiena
26 | [https://www.algorist.com/](https://www.algorist.com/)
27 | **The Stony Brook Algorithm Repository**
28 | [https://www.algorist.com/algorist.html](https://www.algorist.com/algorist.html)
29 | **Lectures and slides**
30 | [https://www3.cs.stonybrook.edu/~skiena/373/videos/](https://www3.cs.stonybrook.edu/~skiena/373/videos/) 31 | 32 | 4. **Guide to Competitive Programming: Learning and Improving Algorithms Through Contests 2th Ed**
33 | by Antti Laaksonen 34 | 35 | 5. **Algorithms: For Competitive Programming**
36 | by David Esparza Alba, Juan Antonio Ruiz Leal 37 | 38 | 6. **Introduction to Algorithms, 4rd Ed**
39 | by Cormen, Leiserson, Rivest, Stein 40 | 41 | 7. **Wikipedia list of algorithms**
42 | [https://en.wikipedia.org/wiki/List_of_algorithms](https://en.wikipedia.org/wiki/List_of_algorithms) 43 | 44 | 8. **Algorithm Wiki**
45 | Crowdsourced Resource on Algorithms and their Development
46 | [http://algorithm-wiki.org/](http://algorithm-wiki.org/) 47 | 48 | 9. **The Algorithms - Python**
49 | For a really complete list of implementations of algorithms
50 | [https://github.com/TheAlgorithms/Python/blob/master/DIRECTORY.md](https://github.com/TheAlgorithms/Python/blob/master/DIRECTORY.md) 51 | 52 | 10. **The Algorithms - Rust**
53 | [https://github.com/TheAlgorithms/Rust](https://github.com/TheAlgorithms/Rust) 54 | 55 | 56 | Then if you want to see the life’s work of a great men, one of his masterpieces, Prof. Donald Knuth and appreciate the most beautiful algorithms explained with an incredible attention to the smallest details, see the following book series. It will take several years to go through them. The algorithms are expressed in a assembly instruction set, MMIX, defined explicitly for the book.
57 | 58 | 11. **The Art of Computer Programming, Volumes 1-4A Boxed Set**
59 | by Donald Knuth, Donald John Fuller 60 | 61 | 12. **MMIX Supplement, The: Supplement to The Art of Computer Programming Volumes 1, 2, 3 by Donald E. Knuth 1st Ed**
62 | by Martin Ruckert 63 | 64 | 13. **Art of Computer Programming, Volume 1, Fascicle 1, The: MMIX -- A RISC Computer for the New Millennium 1st Ed**
65 | by Donald Knuth, John Fuller 66 | 67 | 14. **The Art of Computer Programming, Volume 4, Fascicle 5: Mathematical Preliminaries Redux; Introduction to Backtracking; Dancing Links 1st Ed**
68 | by Donald Knuth 69 | 70 | 15. **Art of Computer Programming, Volume 4, Fascicle 6, The: Satisfiability 1st Ed**
71 | by Donald Knuth 72 | 73 | Nice to have book that introduce and give already a middle ground on the subject of algorithms, with nice illustrations.
74 | 75 | 16. **Introduction to the Design and Analysis of Algorithms 3rd Ed**
76 | by Anany Levitin 77 | 78 | 79 | Also a good introduction book to algorithms, with simple explanations and Java code.
80 | 81 | 17. **Algorithms 4th Edition**
82 | by Robert Sedgewick, Kevin Wayne 83 | 84 | 85 | ## BioInformatics algorithms 86 | 87 | 1. **BioInformatics Algorithms - An Active Learning Approach, 3rd Ed**
88 | by Phillip Compeau, Pavel Pevzner
89 | [https://www.bioinformaticsalgorithms.org/](https://www.bioinformaticsalgorithms.org/) 90 | 91 | 92 | ## Numerical algorithms 93 | 94 | In terms of numerical algorithms there are plenty to learn. You can go with a somewhat old book.
95 | 96 | 1. **Numerical Recipes 3rd Edition: The Art of Scientific Computing**
97 | by William H. Press 98 | 99 | You will need a bases of numerical methods and it’s applications.
100 | 101 | 2. **Numerical Methods for Engineers 8th Ed**
102 | by Steven Chapra, Raymond Canale 103 | 104 | 3. **Numerical Methods in Physics with Python**
105 | by Alex Gezerlis 106 | 107 | 4. **Computational Physics: Problem Solving with Python 3rd Ed**
108 | by Rubin H. Landau, Manuel J Páez, Cristian C. Bordeianu 109 | 110 | 5. **Applied Computational Physics**
111 | by Joseph F. Boudreau, Eric S. Swanson 112 | 113 | 6. **Hans Petter Langtangen - Various writings**
114 | [http://hplgit.github.io/](http://hplgit.github.io/) 115 | 116 | 7. **Hans Petter Langtangen - Last versions**
117 | [https://library.oapen.org/discover?rpp=10&etal=0&query=Langtangen%2C+Hans+Petter&scope=&group_by=none&page=1](https://library.oapen.org/discover?rpp=10&etal=0&query=Langtangen%2C+Hans+Petter&scope=&group_by=none&page=1) 118 | 119 | 120 | ## Mathematical bases 121 | 122 | For in depth algorithm analysis you will need discrete math, the following is a good book:
123 | 124 | 1. **Discrete Mathematics with Applications 5th Ed**
125 | by Susanna S. Epp 126 | 127 | You will need to learn **Linear Algebra** with examples in code (Python and Matlab) without calculus.
128 | 129 | 2. **Linear Algebra: Theory, Intuition, Code**
130 | by Mike X Cohen 131 | 132 | Then for common mathematics you start with a **Pre Calculus** book like.
133 | 134 | 3. **Precalculus**
135 | by Jay Abramson
136 | [https://openstax.org/details/books/precalculus](https://openstax.org/details/books/precalculus) 137 | 138 | 139 | Then to my knowledge there are **3 similar good paths that you can follow**, but with increasing depth in mathematics and **Calculus**.
140 |
141 | 142 | **First path**
143 | 144 | 4. **Engineering Mathematics, 5th Ed**
145 | by Prof Anthony Croft, Dr Robert Davison, et al. 146 | 147 | **Second path**
148 | 149 | 5. **Modern Engineering Mathematics, 6th Ed**
150 | by Glyn James, Phil Dyke 151 | 152 | 6. **Advanced Modern Engineering Mathematics, 5th Ed**
153 | by Glyn James, David Burley, Dick Clements, et al. 154 | 155 | **Third path**
156 | 157 | 7. **Mathematical Methods for Physics and Engineering: A Comprehensive Guide 3rd Ed**
158 | by K. F. Riley 159 | 160 | 8. **Student Solution Manual 1st Ed for Mathematical Methods for Physics and Engineering 3th Ed**
161 | by K. F. Riley 162 | 163 | Then you need to learn about **Probability** and **Statistics** the following are two nice books with a companion book with the solutions.
164 | 165 | 9. **Probability: For the Enthusiastic Beginner**
166 | by David J. Morin 167 | 168 | 10. **Introduction to Probability, Statistics, and Random Processes**
169 | by Hossein Pishro-Nik
170 | [http://www.probabilitycourse.com/preface.php](http://www.probabilitycourse.com/preface.php) 171 | 172 | 11. **Student's Solutions Guide for Introduction to Probability, Statistics, and Random Processes**
173 | by Hossein Pishro-Nik
174 | [http://www.probabilitycourse.com/preface.php](http://www.probabilitycourse.com/preface.php) 175 | 176 | Then you will need to learn about **Optimization**, two good books, the first with code in Julia.
177 | 178 | 12. **Algorithms for Optimization**
179 | by Mykel J. Kochenderfer, Tim A. Wheeler
180 | Note: See the book PDF site link on the authors page.
181 | [https://mykel.kochenderfer.com/textbooks/](https://mykel.kochenderfer.com/textbooks/) 182 | 183 | 13. **Convex Optimization**
184 | by Boyd, Vandenberghe
185 | [https://web.stanford.edu/~boyd/cvxbook/](https://web.stanford.edu/~boyd/cvxbook/) 186 | 187 | In this context...
188 | 189 | * See my guide on Mathematics.
190 | **How to learn Mathematics from the ground up**
191 | [https://github.com/joaocarvalhoopen/How_to_learn_Mathematics_from_ground_up](https://github.com/joaocarvalhoopen/How_to_learn_Mathematics_from_ground_up) 192 | 193 | 194 | # All my other guides 195 | 196 | * The links to all my guides are in:
197 | **Guides on Linux - Programming - Embedded - Electronics - Aeronautics**
198 | [https://github.com/joaocarvalhoopen/Guides_Linux-Programming-Electronics-Aeronautics](https://github.com/joaocarvalhoopen/Guides_Linux-Programming-Electronics-Aeronautics) 199 | 200 | 201 | ## Have fun! 202 | 203 | Best regards,
204 | João Nuno Carvalho --------------------------------------------------------------------------------