01 — Foundations MOC
← Back to Software Engineering - Map of Content
The bedrock of computer science. Everything in software engineering ultimately rests on these concepts.
Data Structures
Linear Structures
- Arrays — Contiguous memory, O(1) random access, fixed vs dynamic sizing
- Linked Lists — Singly, Doubly, Circular; pointer-based traversal, O(1) insert/delete at known position
- Stacks — LIFO, call stack, expression evaluation, undo mechanisms
- Queues — FIFO, priority queues, deques, circular buffers, BFS applications
Tree Structures
- Binary Trees — Traversals (in-order, pre-order, post-order, level-order)
- Binary Search Trees (BST) — Search, insert, delete in O(log n) average
- Self-Balancing Trees — AVL trees, Red-Black trees, B-Trees, B+ Trees (used in Relational Databases)
- Heaps — Min-heap, Max-heap, binary heap, Fibonacci heap, priority queue implementation
- Tries (Prefix Trees) — Autocomplete, spell-checking, IP routing
- Segment Trees / Fenwick Trees — Range queries, interval problems
Graph Structures
- Representations — Adjacency list, adjacency matrix, edge list
- Directed vs Undirected — DAGs, cyclic graphs, weighted graphs
- Special Graphs — Bipartite, planar, sparse vs dense
Hash-Based Structures
- Hash Tables / Hash Maps — Hash functions, collision resolution (chaining, open addressing)
- Hash Sets — Membership testing, deduplication
- Bloom Filters — Probabilistic membership, false positives, no false negatives
- Consistent Hashing — Used in Distributed Systems for partitioning
Advanced Structures
- Disjoint Set / Union-Find — Connected components, Kruskal’s algorithm
- Skip Lists — Probabilistic balancing, used in Redis
- LRU Cache — Combination of hash map + doubly linked list, used in Caching
- Persistent Data Structures — Immutable variants, structural sharing (used in Functional Programming)
Algorithms
Sorting
- Comparison-Based — Bubble, Selection, Insertion, Merge Sort, Quick Sort, Heap Sort
- Non-Comparison — Counting Sort, Radix Sort, Bucket Sort
- Hybrid — Timsort (Python/Java default), Introsort (C++ default)
- Analysis — Stability, in-place vs extra space, best/average/worst case
Searching
- Linear Search — O(n), unsorted data
- Binary Search — O(log n), sorted data, bisect variants
- Interpolation Search — Uniformly distributed data
- Ternary Search — Unimodal functions
Graph Algorithms
- Traversal — BFS, DFS, topological sort
- Shortest Path — Dijkstra, Bellman-Ford, Floyd-Warshall, A*
- Minimum Spanning Tree — Prim’s, Kruskal’s
- Network Flow — Ford-Fulkerson, Edmonds-Karp, max-flow min-cut
- Strongly Connected Components — Tarjan’s, Kosaraju’s
- Cycle Detection — Floyd’s tortoise and hare, coloring
Dynamic Programming
- Core Concepts — Overlapping subproblems, optimal substructure, memoization vs tabulation
- Classic Problems — Knapsack, LCS, LIS, edit distance, matrix chain multiplication, coin change
- On Trees — Tree DP, rerooting
- Bitmask DP — Subset enumeration, TSP approximation
Greedy Algorithms
- Core Concept — Locally optimal choices lead to global optimum
- Classic Problems — Activity selection, Huffman coding, interval scheduling, fractional knapsack
Backtracking & Recursion
- Backtracking — N-Queens, Sudoku solver, constraint satisfaction
- Divide and Conquer — Merge sort, quick sort, closest pair of points, Strassen’s matrix multiplication
- Recursion Patterns — Tail recursion, mutual recursion, recursive descent parsing
String Algorithms
- Pattern Matching — KMP, Rabin-Karp, Boyer-Moore, Aho-Corasick
- Suffix Structures — Suffix arrays, suffix trees
- Edit Distance — Levenshtein distance, longest common substring
Randomized & Probabilistic
- Monte Carlo — Approximate answers, randomized primality testing
- Las Vegas — Always correct, randomized runtime (randomized quicksort)
- Reservoir Sampling — Streaming data, uniform sampling
- HyperLogLog — Cardinality estimation
Computational Complexity
Time Complexity
- Big-O Notation — Upper bound, worst case
- Big-Ω (Omega) — Lower bound
- Big-Θ (Theta) — Tight bound
- Amortized Analysis — Average over sequence of operations (e.g., dynamic array resizing)
- Common Classes — O(1), O(log n), O(n), O(n log n), O(n²), O(2ⁿ), O(n!)
Space Complexity
- Auxiliary Space — Extra space beyond input
- In-Place Algorithms — O(1) extra space
- Space-Time Tradeoffs — Hash tables vs sorted arrays, memoization vs recomputation
Complexity Classes
- P — Solvable in polynomial time
- NP — Verifiable in polynomial time
- NP-Complete — SAT, 3-SAT, traveling salesman (decision), graph coloring
- NP-Hard — At least as hard as NP-Complete, may not be in NP
- P vs NP Problem — The million-dollar open question
- PSPACE, EXPTIME — Higher complexity classes
- Undecidable Problems — Halting problem, Rice’s theorem
Reductions
- Polynomial-Time Reductions — Proving NP-completeness
- Problem Transformations — Reducing unknown to known problem
Mathematics for CS
Discrete Mathematics
- Logic — Propositional logic, predicate logic, proof techniques (induction, contradiction, pigeonhole)
- Set Theory — Sets, relations, functions, cardinality
- Combinatorics — Permutations, combinations, binomial coefficients, inclusion-exclusion
- Graph Theory — Euler/Hamiltonian paths, planarity, coloring, matching
- Number Theory — Modular arithmetic, GCD, primes, Fermat’s little theorem (used in Cryptography)
- Recurrence Relations — Solving recurrences, Master theorem
Linear Algebra
- Vectors and Matrices — Operations, transpose, inverse
- Eigenvalues/Eigenvectors — PCA, spectral methods
- Matrix Decompositions — SVD, LU, QR (used in ML Fundamentals)
- Vector Spaces — Basis, dimension, linear independence
Probability & Statistics
- Probability — Conditional probability, Bayes’ theorem, random variables, distributions
- Distributions — Normal, Bernoulli, Binomial, Poisson, Exponential
- Expectation & Variance — Linearity of expectation, law of large numbers
- Statistical Inference — Hypothesis testing, confidence intervals, p-values
- Bayesian Statistics — Prior, posterior, likelihood (used in ML Fundamentals)
- Markov Chains — State transitions, steady state, PageRank
Information Theory
- Entropy — Shannon entropy, information content
- Compression — Huffman coding, arithmetic coding, LZ77/LZ78
- Error Correction — Hamming codes, Reed-Solomon, checksums
- Channel Capacity — Shannon’s theorem, noise
Queueing Theory
- Fundamentals — Arrival rate (λ), service rate (μ), utilization (ρ = λ/μ), queue length, wait time, Kendall’s notation (A/S/c)
- Little’s Law — L = λW (items in system = arrival rate × time in system), universally applicable regardless of distribution
- M/M/1 Queue — Single server, Poisson arrivals, exponential service times, steady-state: mean wait = ρ / (μ(1−ρ)), diverges as ρ → 1
- M/M/c Queue — Multiple servers, Erlang-C formula for probability of waiting, used for call center and thread pool sizing
- Applications — Load balancer sizing, thread pool tuning (why pool size matters), capacity planning (saturation inflection point), autoscaling thresholds, understanding latency percentiles under load (why p99 explodes near saturation)