如何解决在任何给定的问题中,是否有任何定义的方法来选择用于记忆的变量?
例如,如果我们有以下问题:
给定一组硬币 - [1,2,5] 和数量 - 11。找出制作 11 所需的最少硬币数量。
我们可以使用递归来探索状态空间。例如,根为空,我们从硬币数组的索引 0 开始。从根上,我们可以选择取硬币1(硬币数组的索引0)或不取硬币1,继续递归探索状态空间。
但是我们如何选择用于记忆的变量呢?是否有任何定义的通用方式来选择它?
在这个问题中,我直觉地选择了以下变量用于记忆:
元组键:(硬币的总和,我们正在探索的硬币数组的索引) 价值:硬币数量
但它不起作用。
解决方法
困难的部分是找到递归。所以你首先需要使用递归找到一个解决方案,剩下的就很简单了。
通常,我们可以尝试将答案表达为函数。例如,让 f(x)
等于制作 x 所需的最小硬币数量。所以答案是f(11)
。
接下来,我们尝试找到一些递归和基本情况。在这种情况下,f(x) = min(f(x-1),f(x-2),f(x-5)) + 1
、f(0) = 0
和 f(x) = inf
如果 x < 0
。
您可以在记忆之前实现此功能,并使用少量输入进行测试以查看其是否有效。
递归部分完成后,备忘录参数是影响结果的函数参数。在这种情况下,只有一个参数,它是您应该在备忘录中使用的参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。