【发布时间】:2018-01-13 08:55:19
【问题描述】:
我正在使用动态编程解决 LCS 问题。我在不查看解决方案的情况下自己推导 DP 解决方案时遇到了麻烦。
我目前推断给定两个字符串,P 和 Q:
- 我们可以枚举出大小为
2^n的P的所有子序列。 - 我们还可以枚举Q的所有子序列,其大小为
2^m。
因此,如果我们要检查共享子序列,则运行时间将是 O(2^n * 2^m) 或 O(2^(n+m))。
我不明白我们如何从这种蛮力解决方案转到动态编程解决方案。子解表的推导逻辑是什么?
我只是不明白我们如何从这一点直接跳到 DP 的子解决方案表。这样做的逻辑是什么?
我了解我们需要确定重叠的子解决方案。但是我找不到一个很好的解释来识别这个然后进入子解决方案表。
让我知道这个问题是否有意义。
【问题讨论】:
-
一旦你了解了基础知识,它就非常简单了。
-
是的,每个人都告诉我,说实话我无法理解。 (不看解决方案)。我试图完全从头开始,我觉得自己像个小丑。
-
所以你没看懂我的回答??
标签: algorithm dynamic-programming