【问题标题】:What are some dynamic programming questions that do not involve backtracking?有哪些不涉及回溯的动态规划问题?
【发布时间】:2015-11-09 05:13:49
【问题描述】:

你能举几个不涉及回溯的动态规划问题的例子吗?

据我所见,唯一不涉及回溯的问题是您在此步骤中将结果保存为递归调用的参数,这样当您达到停止条件时,您就有了回答。

但即使是这个结果也必须通过每一步的递归调用序列来返回。

类似的东西

/* To find factorial */
main()
{
 fun(5,1);
}

int fun(int n, int results)
{
 int ret = 0;

 if(n == 0)
  return results;

 ret = fun(n-1,results * n);

 return ret;
}

【问题讨论】:

    标签: recursion dynamic-programming tail-recursion backtracking


    【解决方案1】:

    可能我不明白你在这里所说的backtracking 是什么意思。但是第一个想到的例子是经典的

    Levenshtein 编辑距离 https://en.wikipedia.org/wiki/Levenshtein_distance

    对于两个字符串。在最简单的表述中,这个问题使用一个 mxn 数组——其中 m,n 是两个字符串的长度——来跟踪这对之间的累积差异(/“距离”),因为一个字符在其中一次前进一个字符。

    这种方法 - 据我了解 - 不是回溯 - 实际上甚至不是递归的,而是迭代的。毕竟没有递归调用,也没有从发现的角度重新审视数组的“节点”——但只是从查找的角度来看

    【讨论】:

    • 我想我不清楚是的。你能给我一个使用递归但不涉及回溯的问题的例子吗?通过回溯,我的意思是,将一个值从基本情况传递到前一帧,然后传递到它的前一帧等等,直到第一次调用,然后返回到将打印它的主函数。这不就是回溯吗?
    • 当然是回溯。我的例子/答案对你有帮助吗?
    • 嗯。但是您共享的链接指向递归实现。而且,它不断地向上面的框架返回一个值。所以我认为它既是递归的又是回溯的。我正在寻找一个使用动态编程和递归的示例,但不会将值一直发送回前一帧直到 main,基本上不会回溯。
    猜你喜欢
    • 2013-05-03
    • 2014-01-13
    • 2011-04-05
    • 1970-01-01
    • 2012-08-20
    • 2014-05-20
    • 2019-08-21
    • 2011-10-17
    相关资源
    最近更新 更多