我读到有关动态编程的内容。我读到这是为了能够擅长它,需要练习和直觉,但这个建议对我来说似乎很普遍 对我来说最困难的部分是找出一个递归公式。有时,解决方案中使用的公式对我来说似乎并不直观 例如,我阅读了以下问题:
你有2个字符串S和T.给出一个算法来查找数字 时间S出现在T中。对于S的所有字符,并非强制要求 在T中看起来是连续的。
解决方案基于以下递推公式,对我来说根本不直观:
假设M(i,j)表示我的字符数的计数 S出现在T的j个字符中。基本情况:
,则为1
i)如果j = 0,则为0 ii)如果i = 0
我想知道是否有某种问题的“分析”有助于定义/找到通过DP解决问题的适当递推公式?
答案 0 :(得分:0)
维基百科上的描述非常好,here:
“在数学,计算机科学和经济学中,动态规划是一种通过将复杂问题分解为更简单的子问题来解决复杂问题的方法。它适用于表现出重叠子问题和最优子结构特性的问题(如下所述)。适用时,该方法所花费的时间远远少于天真的方法。“
还阅读重叠子问题和最佳子结构。
答案 1 :(得分:0)
也许此链接有用:
https://www.geeksforgeeks.org/solve-dynamic-programming-problem/
https://www.geeksforgeeks.org/tabulation-vs-memoization/
1.如何将问题归类为动态编程问题?
2.确定状态
3.建立国家之间的关系
4.添加状态的备忘或制表