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
Chapter 2: Backtracking
what is backtracking
how to solve problems with backtracking
N-queens problem
coloring problem
knight's tour
Chapter 3: Dynamic Programming
overlapping subproblems and dynamic programming
what is "memoization" and "tabulation"?
Fibonacci numbers
knapsack problem
Chapter 4: Data Structures
data structures and abstract data types (ADTs)
arrays
linked lists
stacks
queues
binary search trees
priority queues (heaps)
associative arrays (hash tables)
Chapter 5: Graphs
directed and undirected graphs
graph traversal: breadth-first search and depth-first search
shortest path algorithms
Dijkstra's algorithm
Bellman-Ford algorithm
Chapter 6: Substring Search Algorithms
the most relevant substring search algorithms
naive substring search
Knuth-Morris-Pratt (KMP) substring search algorithm
Rabin-Karp algorithm
Z algorithm (linear pattern matching)
Chapter 7: Sorting
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
These are the topics we are going to consider on a one by one basis. After every topic there is a Q&A section where you can test your knowledge on the given topics. Thanks for joining my course, let's get started!