
Recursion, Backtracking, Dynamic Programming, Graphs, Data Structures, Sorting and Substring Search Algorithms
What you'll learn
- understand recursion and stack memory
- understand backtracking
- understand dynamic programming
- understand the fundamental data structures
- understand arrays and linked lists
- understand stacks and queues abstract data types
- understand tree data structures (binary search trees and heaps)
- understand hashing and hash-based data structures such as hash tables
- understand graph algorithms
- understand breadth-first search and depth-first search
- understand shortest path problem (Dijkstra's and Bellman-Ford algorithm)
- understand substring search algorithms (Rabin-Karp, Knuth-Morris-Pratt and Z algorithms)
- understand sorting algorithms
This course is for those who are interested in computer science and want to implement the algorithms and given data structures in C++ from scratch. In every chapter you will learn about the theory of a given data structure or algorithm and then you will implement them from scratch.
Chapter 1: Recursion
- theory behind recursion (recursive function calls)
- stack memory and heap memory
- recursion and stack memory of the OS
- recursive problems such as the Towers of Hanoi problem
- what is backtracking
- how to solve problems with backtracking
- N-queens problem
- coloring problem
- knight's tour
- overlapping subproblems and dynamic programming
- what is "memoization" and "tabulation"?
- Fibonacci numbers
- knapsack problem
- data structures and abstract data types (ADTs)
- arrays
- linked lists
- stacks
- queues
- binary search trees
- priority queues (heaps)
- associative arrays (hash tables)
- directed and undirected graphs
- graph traversal: breadth-first search and depth-first search
- shortest path algorithms
- Dijkstra's algorithm
- Bellman-Ford algorithm
- the most relevant substring search algorithms
- naive substring search
- Knuth-Morris-Pratt (KMP) substring search algorithm
- Rabin-Karp algorithm
- Z algorithm (linear pattern matching)
- stable sorting and adaptive sorting
- comparison based and non-comparison based sorting algorithms
- string sorting
- bubble sort
- selection sort and insertion sort
- quicksort
- merge sort
- counting sort and radix sort
Who this course is for:
- Intermediate C++ developers curious about algorithms and data structures