目录

 

给定n个矩阵的行数和列数,确定一种乘法次序,使得基本运算“数乘”的总次数最少。

完全加括号

完全加括号的矩阵链乘积可递归地定义为:

  • 单个矩阵是完全加括号的
  • 矩阵链乘积A=(BC)

最优子结构

  • 矩阵链乘A1...n=A1...kAk+1...n,1≤k<n
  • 矩阵连乘Ak+1...n相乘的计算量。矩阵链乘问题的最优解具有最优子结构特性。

最优解的递推关系

  • P=<P0,P1,...Pn>

 

Ai...j=Ai...kAk+1...j,k=i,i+1,...,j−1

 

  • 确定优化函数和递推方程:二维数组m用来保存矩阵链乘时所需的最小计算量

 

m[i][j]={mini≤k<j{m[i][k]+m[k+1][j]+Pi−1PkPj}if i<j0if i=j

 

  • 设立标记函数:为了确定加括号的次序,设计表k的划分。

算法描述(伪代码)

  • 迭代实现 备忘录法
haskell
MatrixChain(P,n)
	令所有m[i,j]的初值为0;
	for r <- 2 to n   do
		for i <- 1 to n-r+1  do
			j <- i+r-1;
			m[i,j] <- m[i+1,j]+P_i-1P_iP_j;
			s[i,j] = i;
			for k <- i+1 to j-1  do
				t <- m[i,k]+m[k+1,j]+P_i-1P_kP_j;
				if t < m[i,j]
					then m[i,j] <- t;
						 s[i,j] <- k;

结束语

醉后不知天在水,满船清梦压星河

作者:花城

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-29
  • 2021-08-04
  • 2021-04-28
  • 2022-12-23
猜你喜欢
  • 2022-02-08
  • 2022-02-07
  • 2022-12-23
  • 2022-01-01
  • 2022-03-04
  • 2021-12-11
  • 2022-02-25
相关资源
相似解决方案