Study smarter with Fiveable
Get study guides, practice questions, and cheatsheets for all your subjects. Join 500,000+ students with a 96% pass rate.
Combinatorial optimization sits at the heart of computer science and discrete mathematics—it's where theoretical elegance meets real-world problem solving. You're being tested on your ability to recognize problem structures, understand computational complexity, and select appropriate algorithmic strategies. These problems appear everywhere: from routing delivery trucks to scheduling exams to designing computer chips. The key insight is that while many of these problems are NP-hard (meaning no efficient exact solution exists for large inputs), understanding their structure helps you choose the right approximation algorithms, heuristics, or special-case solutions.
Don't just memorize problem names and their definitions. Know why certain problems are computationally hard, how different problems relate to each other, and which algorithmic techniques apply to each category. Exam questions often ask you to identify which optimization framework fits a given scenario, compare the complexity of related problems, or explain why a greedy approach works for one problem but fails for another.
These problems focus on finding optimal routes or maximizing throughput through network structures. The underlying principle is that graphs model connectivity, and edge weights capture costs or capacities.
Compare: Shortest Path vs. Maximum Flow—both operate on weighted graphs, but shortest path minimizes cumulative edge weights along one path while maximum flow maximizes throughput across multiple simultaneous paths. If asked about network bandwidth, think flow; if asked about travel time, think shortest path.
These problems involve selecting subsets to either fill a container optimally (packing) or ensure complete coverage (covering). The tension between these dual perspectives is a recurring exam theme.
Compare: Knapsack vs. Bin Packing—knapsack maximizes value in one fixed-capacity container, while bin packing minimizes containers needed for all items. Knapsack asks "what fits best?" while bin packing asks "how few bins suffice?"
These problems extract or exploit structural properties of graphs—connectivity, independence, and partitioning. Understanding graph structure often reveals efficient algorithms or proves hardness.
Compare: Vertex Cover vs. Set Cover—vertex cover is a special case where each "set" corresponds to an edge (containing its two endpoints). The 2-approximation for vertex cover beats the bound for general set cover because of this restricted structure.
These problems pair elements from two sets optimally. The key structure is the bipartite graph, where edges connect elements across sets but never within the same set.
Compare: Assignment Problem vs. General Matching—assignment restricts to bipartite graphs with perfect matchings, enabling polynomial-time solutions. General weighted matching on non-bipartite graphs requires more sophisticated algorithms like Edmonds' blossom algorithm.
| Concept | Best Examples |
|---|---|
| NP-hard problems | Traveling Salesman, Graph Coloring, Vertex Cover, Set Cover, Bin Packing |
| Polynomial-time solvable | Minimum Spanning Tree, Shortest Path, Maximum Flow, Assignment Problem |
| Dynamic programming applies | Knapsack (0/1), Shortest Path (Bellman-Ford) |
| Greedy works optimally | Minimum Spanning Tree, Fractional Knapsack |
| Greedy gives approximation | Set Cover (), Vertex Cover (2-approx), Bin Packing |
| Graph connectivity focus | MST, Maximum Flow, Shortest Path |
| Resource allocation models | Knapsack, Bin Packing, Assignment Problem |
| Scheduling applications | Graph Coloring, Set Cover, Assignment Problem |
Which two problems are both NP-hard but have fundamentally different approximation guarantees—one admitting a constant-factor approximation and one only a logarithmic approximation? Explain why.
Compare and contrast the Knapsack Problem and Bin Packing Problem: what structural difference explains why dynamic programming solves one efficiently but not the other?
Both Minimum Spanning Tree and Shortest Path operate on weighted graphs. Why does the greedy approach guarantee optimality for MST but require more careful algorithm design (like Dijkstra's) for shortest paths?
If an FRQ describes a scenario where you must assign workers to jobs with varying efficiency ratings, which problem framework applies, and what algorithm would you recommend?
Vertex Cover and Independent Set are called "dual" problems. If a graph has 10 vertices and a minimum vertex cover of size 4, what is the size of its maximum independent set, and why?