这里是回忆录版矩阵链乘法程序的程序,从介绍到算法,由cormen等。
MEMOIZED-MATRIX-CHAIN(p)
1 n length[p] - 1
2 for i = 1 to n
3 do for j = i to n
4 do m[i, j] = infinity
5 return LOOKUP-CHAIN(p, 1, n)
LOOKUP-CHAIN(p, i, j)
1 if m[i,j] < infinity
2 then return m[i, j]
3 if i = j
4 then m[i, j] 0
5 else for k = i to j - 1
6 do q = LOOKUP-CHAIN(p, i, k) +
LOOKUP-CHAIN(p, k + 1, j) +
p(i - 1)* p(k) *p(j)
7 if q < m[i, j]
8 then m[i, j] = q
9 return m[i, j]在描述中提到了这一点,因为我们可以将查找链的调用分为两种类型:
调用其中的mi,j=无穷,因此第3-9行是executed.
中返回。
有n个第一类型的平方调用,每个表条目一个。第二类型的所有调用都是由第一种类型的调用作为递归调用进行的。每当给定的查找链调用进行递归调用时,它都会对它们进行"n“调用。因此,共有第二种类型的n个多维数据集调用。第二种类型的每次调用都需要O(1)时间,而第一种类型的每一次调用都需要O(n)时间加上递归调用中所花费的时间。总时间是O(n立方体)。
我的问题是
。
谢谢!
发布于 2011-11-11 07:50:45
LOOKUP-CHAIN第5行中的for循环最多执行n次迭代(因为1≤i≤j≤n),以弥补2n=O(n)递归调用。如果您将这种递归算法描绘为一棵树,那么它的复杂性可能会更容易理解:
内部节点对应于“类型2",不超过n平方(因为回忆录),每个节点执行O(n) operations
的θ(1)操作。
https://stackoverflow.com/questions/8079889
复制相似问题