ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动态规划_备忘录法_矩阵链乘问题

2021-07-12 10:32:23  阅读:184  来源: 互联网

标签:链乘 ... 括号 Ai 矩阵 A1 备忘录 最优


目录

 

问题描述

给定nn个矩阵{A1,A2,A3,...,An}{A1,A2,A3,...,An},其中AiAi为Pi−1×PiPi−1×Pi矩阵,i=1,...,ni=1,...,n,并且AiAi与Ai−1Ai−1是可乘的。由于矩阵乘法满足结合律,所以计算矩阵的链乘可有许多不同的计算次序,两个矩阵Ai×jAi×j与Aj×kAj×k相乘的工作量为i×j×ki×j×k次数乘。
给定向量P=<P0,P1,...,Pn>P=<P0,P1,...,Pn>为nn个矩阵的行数和列数,确定一种乘法次序,使得基本运算“数乘”的总次数最少。

完全加括号

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

  • 单个矩阵是完全加括号的
  • 矩阵链乘积AA是完全加括号的,则AA可表示为两个完全加括号的矩阵链乘积BB和CC的乘积,并加括号,即A=(BC)A=(BC)

最优子结构

  • 矩阵链乘AiAi+1...AjAiAi+1...Aj简记为Ai...j,i≤jAi...j,i≤j,于是矩阵链乘A1A2...AnA1A2...An可记为A1...nA1...n,完全加括号形式为A1...n=A1...kAk+1...n,1≤k<nA1...n=A1...kAk+1...n,1≤k<n
  • 矩阵连乘A1...nA1...n的最优计算次序的计算量等于A1...kA1...k和Ak+1...nAk+1...n两者的最优计算次序的计算量之和,再加上A1...kA1...k和Ak+1...nAk+1...n相乘的计算量。矩阵链乘问题的最优解具有最优子结构特性。

最优解的递推关系

  • 由ii和jj确定子问题的边界,输入P=<P0,P1,...Pn>P=<P0,P1,...Pn>

 

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

 

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

 

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

 

  • 设立标记函数:为了确定加括号的次序,设计表s[i,j]s[i,j]记录求得最优时,最后一次运算的位置,即m[i][j]m[i][j]达到最小时kk的划分。

算法描述(伪代码)

  • 迭代实现 备忘录法
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;

结束语

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

作者:花城

标签:链乘,...,括号,Ai,矩阵,A1,备忘录,最优
来源: https://www.cnblogs.com/wl-blog/p/15000956.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有