应付后天的算法考试,还在复习算法。
这两天看Dynamic Programming,突然发现很多问题都属于相同的结构。那么DP可解的问题集合是不是可以划分成若干个等价集合呢?如果能通过问题结构得到DP问题的递归式,就离机械求解又进了一步 。因此,属于同一等价集合的问题应当存在相同或者至少相似的递归式。
看了一些问题,目前发现了三个等价结构:
1. Catalan结构
input: a sequence
output: pairs of elements from the sequence
例子: Minimum Weight Triangulation(MWT), Optimal Binary Search Tree
递归式:M[1, n] = max1<=i<=n{ M[1, i] + M[i, n] + const}
结论:空间复杂度n2,时间复杂度n3
2. Cut-line结构
input: a sequence
output: a divide of the sequence
例子:中文分词,英文分行, EMP。。。
递归式: M[n] = max1<=i<=n{ M[i] + f(i, n)}
结论:空间复杂度n, 时间复杂度n2
3. 0-1结构
input: a set
output: a subset
例子:Subset Sum, 0-1背包, Weighted Interval Scheduling, 天平分重量。。。
递归式: M[n, W] = max {M[n-1, W-wn]+wn, M[n-1, W]}
结论: 空间复杂度n2, 时间复杂度n2
应该还有很多问题,慢慢研究