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)
- Elementary Implementations
- 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
- Implementation
- Directed Graphs
- Topological Sort
- Topological order of an acyclic digraph
- Strongly Connected Components
- Kosaraju-Sharir algorithm for computing strong components of a digraph
- Topological Sort
- 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