Algo + DS
Algorithms
-
Union-Find Algorithm
-
Dynamic Connectivity
-
Quick Find
-
Quick Union
-
Improvements
-
Weighted Quick Union
-
Weighted Quick Union with Path Compression
-
-
-
Analysis of algorithms
-
Scientific Method of Analysis
-
Empirical Method of Analysis
-
-
Stacks and Queues
-
Stacks
-
Resizing Arrays
-
Queues
-
Deque
-
Randomized Queues
-
-
Elementary Sort
-
Selection Sort
-
Insertion Sort
-
Shell Sort
-
Shuffling
-
Shuffle Sort
-
Knuth Shuffle
-
-
Convex Hull
-
-
Merge Sort
- Bottom up mergesort
-
Quick Sort
-
Quick Select (Selection)
-
3- way partition quicksort (Duplicate Keys)
-
System sorts
-
-
Priority Queues
-
Binary heaps
-
Heap sort
-
-
Elementary Symbol Tables
- Elementary Implementations
Sorted array (Binary Search)
Unordered List (Sequential Search)
-
Ordered Operations
-
Binary Search Trees
-
Ordered Operations in BSTs
-
Deletion in BSTs
-
Balanced Search Trees
-
2-3 Search Trees
-
Red-Black Trees
-
B-Trees
-
-
Geometric applications of BST
-
1d Range Search
-
Line Segment Intersection
-
Kd-Trees
-
Interval Search Trees
-
Rectangle Intersection
- Hash Tables
-
Uniform Hashing Assumption
-
Separate Chaining
-
Linear Probing
- Symbol Table Applications
-
Sets
-
Dictionary Clients
-
Indexing Clients
-
Sparse Vectors
Data Structures
-
Undirected Graphs
-
Implementation
-
Adjacency Matrix
-
Adjacency List
-
-
DFS
-
BFS
-
Connected Components
-
-
Directed Graphs
-
Topological Sort
- Topological order of an acyclic digraph
-
Strongly Connected Components
- Kosaraju-Sharir algorithm for computing strong components of a digraph
-
-
Minimum Spanning Trees
-
Kruskal's Algorithm
-
Prim's Algorithm
-
-
Shortest Path
-
Dijkstra's Algorithm
-
Bellman Ford Algorithm (Negative Weights)
-
-
Maximum Flow and Minimum Cut
- Ford-Fulkerson Algorithm
-
Radix Sorts
-
Key-Indexed Counting
-
LSD Radix Sort
-
MSD Radix Sort
-
3-way Radix Quicksort
-
Suffix Arrays
-
-
Tries
-
R-way Tries
-
Ternary Search Tries
-
-
Substring Search
-
KMP (Knuth-Morris-Pratt)
-
Boyer-Moore
-
Rabin-Karp
-
-
Regular Expressions
-
DFA
-
NFA
-
-
Data Compression
-
Run Length Encoding
-
Huffman Compression
-
LZW Compression
-
Burrows-Wheeler
-
Reductions
-
Linear Programming
-
Brewer's Problem
-
Simplex Algorithm
- Intractability
-
P
-
NP
-
NP-Complete
Strategies for algorithms
-
B.U.D. (Bottleneck, Unnecessary work, Duplicated work)
-
Space / Time Tradeoffs
Resources
-
Coursera - Algorithms Part 1
-
Coursera - Algorithms Part 2
https://www.toptal.com/algorithms/interview-questions
Most Important Algos / DS / Programming Concepts
-
Depth first search
-
Breadth first search
-
Matching parenthesis
-
Hash Tables
-
Variables / Pointer manipulations
-
Reversing a linked list
-
Sorting fundamentals
-
Recursion
-
Custom data structures (suffix tree)
-
Binary search
BUD Optimization Strategy
- Bottlenecks
- Unnecessary work
- Duplicated work
https://4tee-learn.blogspot.com/2017/12/optimisation-technique-15-bud.html
Questions to asking when solving a coding interview questions
-
What is the data types of the inputs?
- Can we assume the string is ASCII or Unicode?
-
Do we have to worry about load factors?
-
Do we have to validate inputs?
-
Can we assume this fits in memory?
-
Can we use additional data structures?
https://www.freecodecamp.org/news/learn-algorithms-and-data-structures-in-python