关于回溯解决方案的真正含义,我有几个问题。
- 说,你有来自当前状态的 n 个选项,回溯解决方案基本上意味着你尝试所有这些状态,并对子问题做同样的事情(你可能有 n-1 个状态的解决方案),并且依此类推,然后返回从第 (n-1) 帧到第 n 帧的最佳解决方案。
请参阅下面的问题:给定长度为 n 的绳索,如何将绳索切成长度为 n[0]、n[1]、...、n[m-1] 的 m 个部分,以获得最大乘积of n[0] n[1] ... *n[m-1] Soa 长度的绳索将被切割成 2*3*3 得到 18 的乘积。,
public class RopeCuttingMaxProduct
{
public static void main(String[] args)
{
System.out.println(fun(8));
}
static int fun(int n)
{
if(n == 1)
return 1;
int totalret = 0;
for(int i = 1;i<n;i++)
{
/*At every frame, two options 1.to cut 2.to not cut
* 1.If cutting, multiple ways to cut : Remember i+(n-i) == n
* 2.If not cutting, just return n
*/
/* Explore all possible solutions, from all possible paths
* and the subpaths that these lead to,
* and their subpaths*/
int reti = max(fun(n-i)*i,n);
if(reti > totalret)
totalret = reti;
}
return totalret;
}
static int max(int a, int b)
{
return a>b?a:b;
}
}
- 那么,所有回溯解决方案的时间复杂度都是指数级的吗?
- 这听起来很像递归,我无法想象其他任何递归都能实现这样的效果。你能给我一个没有递归实现的回溯解决方案的例子吗
- 它与蛮力有什么不同。这个问题的蛮力解决方案是尝试所有可能的方法组合来加起来n。我发现上述回溯解决方案的作用几乎相同。