1. 简介
将优化问题(optimize problem)转换成决策问题(decision problem),是一种非常实用的设计原则,转换完成之后,再利用二分法求解。
- 优化问题的返回值通常是实数或者整数;⇒ 可能的答案有无数多个;
- 决策问题的含义较为简单,只有“是”或“否”(自行脑补军队里,军官和新兵的对话)这两种答案的问题;⇒ 答案只有两个;
下面是以优化问题和决策问题的形式定义的旅行商问题:
- optimize(G) ⇒ 返回全部访问图 G 中的端点后,回到起点的最短路径;
- decision(G, x) ⇒ 返回全部访问图 G 的所有端点后,是否存在回到起点的路径中长度小于 x 的路径(决策问题)
double optimize(const Graph& g);
bool decision(const Graph& g, double x){
return optimize(g) <= x;
}