摘要: 首先来看什么是最长公共子序列:给定两个序列,找到两个序列中均存在的最长公共子序列的长度。子序列需要以相关的顺序呈现,但不必连续。例如,“abc”, “abg”, “bdf”, “aeg”, ‘”acefg”等都是“abcdefg”的子序列。因此,一个长度为n的序列拥有2^n中可能的子序列(序列中的每一个元素只有选或者不选两种可能,因此是2^n)。 Example: LCS for input ... 阅读全文
posted @ 2015-06-18 22:24 Acjx 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 在 Dynamic Programming | Set 1 (Overlapping Subproblems Property) 和 Dynamic Programming | Set 2 (Optimal Substructure Property) 中我们已经讨论了重叠子问题和最优子结构性质,现在我们来看一个可以使用动态规划来解决的问题:最长上升子序列(Longest Increasing S... 阅读全文
posted @ 2015-06-18 21:45 Acjx 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 正如我们在 Dynamic Programming | Set 1 (Overlapping Subproblems Property) 中讨论的那样,当一个问题具有以下2种性质时,建议使用动态规划来求解: 1 重叠子问题(Overlapping Subproblems) 2 最优子结构(Optimal Substructure) 我们已经在 Dynamic Programming | Se... 阅读全文
posted @ 2015-06-18 21:04 Acjx 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 动态规划是这样一种算法范式:将复杂问题划分为子问题来求解,并且将子问题的结果保存下来以避免重复计算。如果一个问题拥有以下两种性质,则建议使用动态规划来求解。 1 重叠子问题(Overlapping Subproblems) 2 最优子结构(Optimal Substructure) 1 重叠子问题 类似于分治法,动态规划将子问题的解合并。当多次需要用到子问题的解时,应当考虑使用动态规划。在... 阅读全文
posted @ 2015-06-18 20:36 Acjx 阅读(571) 评论(0) 推荐(0) 编辑