- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在解决 DP 相关问题,我遇到了广义 egg dropping puzzle .我可以使用不重复子问题的分而治之来解决这个问题。所以我相信不需要DP来解决掉蛋难题。谁能告诉我下面的算法在不需要 DP 的地方是否有效
n- eggs
k-floors
initial call : eggDroppingPuzzle(n,k)
eggDroppingPuzzle(eggs, floor)
{
if floor==1 return 1;
else if eggs=1 return K;
return 1+eggDroppingPuzzle(n-1,k/2-1);// problem is reduced by (size/2)-1
}
由于每次递归调用都没有重叠的子问题,所以我觉得不需要动态规划。
谁能解释一下我的不需要 DP 的算法是否正确。如果不正确,请向我解释使用 DP 的正确算法。
最佳答案
您的代码断言(不包括边缘情况)
eggDroppingPuzzle(eggs, floor) = 1+eggDroppingPuzzle(n-1,k/2-1)
这意味着:
这两个假设通常都是错误的,因为目的是尽量减少掉落的数量。例如,根据您的策略,
eggDroppingPuzzle(2, 100) = 1 + eggDroppingPuzzle(1, 49)
因为 eggDroppingPuzzle(1, 49) = 49,这意味着,对你来说 eggDroppingPuzzle(2, 100) = 50,这远远大于正确答案 14。这是因为你的策略不是最优的,因为这些错误假设。
递归策略不做这样的假设。它简单地说明了显而易见的事实:eggDrop(n, k) = 1 + min{max(eggDrop(n - 1, x - 1), eggDrop(n, k - x)): 其中 x 在 {1, 2, ..., k}}
显然,动态规划只是递归逻辑的自下而上方法,您用时间(重复计算)换取空间(存储数组)。是的,DP 方法是一种优化的蛮力方法。没有涉及聪明的策略。只是探索所有状态直到解决方案状态。
关于algorithm - 什么是需要使用动态规划方法来解决掉蛋难题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936735/
我正在创建我的第一个 WAR 文件。我一直在试验 ant buildfile 语法,我的 buildfile 的第一部分从我的 Eclipse 项目中获取内容并将其放入 /dist 文件夹中,然后将其
我是一名学习 SQL 和 PHP 的学生,我接到了一项任务,要使用 PHP 和 mySQLi 创建学生反馈表,我真的一直在思考如何为项目设计数据库! 我正在创建一个系统,用户可以在其中登录网页,如果用
这个问题在这里已经有了答案: Is it possbile to test for expected errors when the testee exits with failure using
我目前正在设计和开发一个 Web 应用程序,该应用程序有可能快速增长。我将提供一些一般信息,然后继续我的问题。我会说我是一名中级网络程序员。 以下是一些规范:MySQL - 数据库后端PHP - 用于
我不知何故无法在我的日志解析器应用程序中实现报告功能。 这是我目前所做的: 我正在编写一个应用程序,它读取日志文件并在字符串中搜索可以在用户配置文件中定义的多个正则表达式。对于从配置中解析的每个所谓的
我有兴趣学习如何在多开发团队场景中设计/规划 Web 应用程序开发。 假设“项目经理/负责人”的角色: 成功的 Web 应用程序开发需要哪些“文档”? 需要什么 UML 图,需要什么程度? 在设计/计
table a (t_a): id name last first email state country 0 sklass klass steve
我们建立了一个广泛使用 JQuery UI 的 AJAX 网站。我们有 30 多个自制的 JQuery UI 小部件(动态加载)。我们到处都使用 JQuery native 小部件:对话框、 slid
我是一名优秀的程序员,十分优秀!