This project aims to review well known data structures and algorithms, as well as implement them in various programming languages.
Objective: This repository aims to demonstrate common algorithms and data structures. Written in Python, C++, and Java.
| Algorithm | Time Complexity (Best) | Time Complexity (Average) | Time Complexity (Worst) | Space Complexity |
|---|---|---|---|---|
| Quicksort | O(n log n) | O(n log n) | O(n^2) | O(log n) |
| Mergesort | O(n log n) | O(n log n) | O(n log n) | O(n) |
| Heapsort | O(n log n) | O(n log n) | O(n log n) | O(1) |
| Bubble Sort | O(n) | O(n^2) | O(n^2) | O(1) |
| Insertion Sort | O(n) | O(n^2) | O(n^2) | O(1) |
| Selection Sort | O(n^2) | O(n^2) | O(n^2) | O(1) |
Graph (adjacency lists vs. matrices), directed and undirected graphs, weighted edges
BFS, DFS, Dijkstra’s algorithm, Bellman-Ford algorithm, A* algorithm for heuristic-based pathfinding: complexity and limitations
Arrays, Linked Lists, Stacks, Queues: insertion, deletion, and traversal.
Trees Binary Trees, Binary Search Trees, (Optional) AVL Trees: insertion, deletion, and traversal (in-order, pre-order, post-order).
Hash Tables chaining and open addressing.
Heaps/Priority Queues, Disjoint Sets, Tries
Fibonacci sequence (with memoization), Coin Change, 0/1 Knapsack, Longest Common Subsequence: time-space trade-offs, memoization and tabulation, iterative vs. recursive
Greedy algorithms, backtracking problems (e.g., N-Queens), and divide-and-conquer strategies.