用于解决这个问题的网格是什么样的呢?要确定这一点,你得回答如下问题。

  • 单元格中的值是什么?
  • 如何将这个问题划分为子问题?
  • 网格的坐标轴是什么?

在动态规划中,你要将某个指标最大化。在这个例子中,你要找出两个单词的最长公共子串。hish和fish都包含的最长子串是什么呢? hish和vista呢?这就是你要计算的值。

别忘了,单元格中的值通常就是你要优化的值。在这个例子中,这很可能是一个数字:两个字符串都包含的最长子串的长度。

如何将这个问题划分为子问题呢?你可能需要比较子串:不是比较hish和fish,而是先比较his和fis。每个单元格都将包含这两个子串的最长公共子串的长度。这也给你提供了线索,让你觉得坐标轴很可能是这两个单词。因此,网格可能类似于下面这样。

如果这在你看来犹如巫术,也不用担心。这些内容很难懂,但这也正是我到现在才介绍它们的原因!本章后面有一个练习,到时你可以自己动手来进行动态规划。

results matching ""

    No results matching ""