This document discusses branch and bound algorithms and NP-hard and NP-complete problems. It provides examples and proofs related to these topics.
1) Branch and bound is an algorithm that systematically enumerates candidate solutions by discarding subsets that are provably suboptimal. The knapsack problem is used as an example problem.
2) NP-hard and NP-complete problems are those whose best known algorithms run in non-polynomial time. If a problem can be solved in polynomial time, then all NP-complete problems can be. Proving problems NP-complete involves reducing other known NP-complete problems to the target problem.
3) Trees are connected graphs without cycles. They are used to represent hierarchies and