Hands-on Algorithmic Problem Solving
A one-stop coding interview prep book!
About this book
In short, this is a middle-to-high level algorithm book designed with cracking coding interviews at hearts. It offers a one-stop coding interview prep experience. The structure of the book: (1) math and CS theories as coding is not just code after all, (2) Python data structures, (3) algorithm design principles, (4) Classical algorithms explained with core principles. (5) Problem patterns.
Besides trying to make the content easy to follow, here summarizes the uniqueness of this book: (1) it offers Python source code that is tailored to be simple so that it would be natural for you to use in interviews (2) all the exercises and examples are from Leetcode problems so that you get to practise online (3) Classical algorithms are explained with design principles. No algorithm is magic. (Check out advanced graph algorithms as an example) (4) problem patterns to help you tackle coding interview questions topic by topic.
How did I come up with this book?
Preparing for the coding interview is not easy! Cracking the coding interview? Nearly impossible for most of us! Luck does play a role in the outcome. So, let's just treat it as a learning process and have some fun!
Computer Science is really not just computer science. It is a combination of all fields; our normal interview problems fall into the enumerative combinatorics and our computer vision mostly consists of Linear Algebra. What really matters is our passion to learn and the ability to apply this knowledge to solve real-life problems.
There are plenty of books out there focusing on either teaching algorithmic knowledge (Introduction to Algorithms, Algorithmic Problem Solving, etc) or introducing the interview process and solving interview problems(Cracking the Coding Interview, Coding Interview Questions, etc), but none of these books truly combine the two. This is a book designed to make up this role in the categorization. Principle, Pattern, and Leetcode Problems make up the core of this book.
This is NOT a book that provides hiring statistics for each company or gives the reader quick tricks in order to pass a few coding interviews. Its purpose is to show you the beauty of algorithmic problem solving in the hope that you will be more passionate and confident about software engineering; the interview questions just set up a playground where we strengthen what we learn.
Table of Contents
Warm Up: Abstract Data Structures and Tools
- Abstract Data Structures
- Discrete Programming
- Recurrence Relation
Get Started: Programming and Python Data Structures
Core Principles: Algorithm Design and Analysis
- Complexity Analysis
- Search Strategies(source code: Graph Search, source code: Tree Traversal)
- Combinatorial Search( source code)
- Reduce and Conquer
- Decrease and Conquer
- Sorting and Selection( source code: sorting algorithms, Python comparison and sort functions)
- Dynamic Programming
- Greedy Algorithms
- Advanced Data Structures
- Advanced Search on Linear Data Structures( source code)
- Advanced Graph Algorithms
- String Pattern Matches
- Math and Geometry Algorithms
- Dynamic Programming Questions (15%)
- Array Questions (15%)
- Linked List, Stack, Queue, and Heap Questions (12%)
- String Questions (15%)
- Tree Questions (10%)
- Graph Questions (15%)
Note: everything is still in progress, so use it with caution.
Referring Books and Materials
Skiena, Steven S. The algorithm design manual: Text. Vol. 1. Springer Science & Business Media, 1998.
T. H. Cormen, Introduction to algorithms, MIT press, 2009.
Manber, Udi. Introduction to algorithms: a creative approach. Addison-Wesley Longman Publishing Co., Inc., 1989.
Kleinberg, Jon, and Eva Tardos. Algorithm design. Pearson Education India, 2006.
Russell, Stuart J., and Peter Norvig. Artificial intelligence: a modern approach. Malaysia; Pearson Education Limited,, 2016. (Best book ever in explaining searching problem-solving, differentiate tree-search and graph-search)
D. M. Beazley, Python essential reference, Addison-Wesley Professional,2009.
S. Halim and F. Halim, Competitive Programming 3, Lulu Independent Publish, 2013.
B. Slatkin, Effective Python: 59 Specific Ways to Write Better Python,Pearson Education, 2015.
H. hua jiang, “Leetcode blogs,” https://zxi.mytechroad.com/blog/category, 2018, [Online; accessed 19-July-2018].
B. Baka, “Python data structures and algorithms: Improve application performance with graphs, stacks, and queues,” 2017.
“Competitive Programming,”https://cp-algorithms.com/, 2019, [Online; accessed 19-July-2018].
“cs princeton,”https://aofa.cs.princeton.edu/60trees/, 2019, [Online; accessed 19-July-2018]
Join me on discord server: https://discord.gg/ZXnSag7fMP, for early access of the book and a supportive community
Call for collaboration
If you have a continuous passion for teaching and writing, come and join us to shape the book together. Afterwards, you can build on top of this book to teach.
If you have ideas to improve the book, about formatting, more contents, or correct the errors, do not hesitate to let me know.