algorithm - 使用 DP 的 Tsp 时间复杂度
问题描述
这是问题的递归公式:
C(i,S) = min { d(i,j) + C(j,S-{j}) }
实际上,当我尝试将其实现为代码时,我想到了以下代码:
int TSP(i, S){
if(S.size == 0)
return dist(start_vertex,i)
min = inf
cost = inf
for(int j=0;j<S.size;j++)
{
cost = dist(i,S[j])+TSP(j,S-{j});
if(cost < min)
min = cost;
}
global_cost+=min;
return min;
}
因为这for
会比较 n 次以找到最小值,这意味着它的递归为:
T(n) = nT(n-1)+n ==> T(n) = O(n!)
因为我们比较每个步骤以找到大小 S 的最小大小,当然,代码是阶乘的。那么它与子集有什么关系,那么为什么时间的复杂性是(n^2*2^n)
?它的时间复杂度的证明是什么?
解决方案
推荐阅读
- python - 面板/选项卡选择上的散景 python 回调
- angular - 如何根据智能表中下拉列表的选定值显示列中的值
- c# - 在正则表达式匹配字符中获取行号和位置的最简单方法是什么?
- java - 如何禁用所有 JAVA 进程的核心转储
- python - 如何使用来自另一个模型的外键创建两个选择字段?
- javascript - 转换 Ajax 以停止使用 jQuery
- flutter - Flutter - 如何隐藏或设置 tablerow 可见?
- python - 从一行上的数据创建一个 numpy 数组
- php - 将 PHP 变量生成为自定义二维码的问题
- sapui5 - sap.m.TableSelectDialog:自定义页脚中的按钮文本