作业8——矩阵链乘法

该博客介绍了矩阵链乘法的问题,解析了如何通过动态规划找到使基本运算次数最少的乘法次序。博主详细阐述了算法设计,包括输入向量、输出计算所需最小乘法次数以及最后一次运算的位置,并提供了算法的时间复杂度分析和源码。
摘要由CSDN通过智能技术生成

1.问题

设A1,A2,…,An为n个矩阵的序列,其中Ai为Pi-1 x Pi 阶矩阵,这个矩阵链的输入用向量P = <P0,P1,…,Pn>给出。
给定向量P,确定一种乘法次序,使得基本运算总次数最小。

2,解析

Ai-j :

表示矩阵链相乘的子问题Ai Ai+1 … Aj.
m[i…j] : 表示得到乘积Ai…j 所用的最少基本运算次数 ;

当i = j , m[i…j]=0;
当i < j , m[i…j]= min{m[i,k]+m[k+1,j]+Pi-1 * Pk * Pj} i<=k<j

3.设计

Ai…j 的输入向量 P = <Pi-1,Pi,…,Pj> 1<=i<=j<=n

输出 计算Ai…j 所需最小乘法运算次数dp[i…j] 和最后一次运算的位置s[i…j]
例如 Ai…j = (Ai…Ak)(Ak+1…Aj)
s[i…j] = k

RecurMatrixChain(P[],n){
dp[][]=inf
s[][]
for (i from 1 to n-1)
dp[i][i+1] = P[i] * P[i+1] * P[i+2]
dp[i][i]=0

for 确定长度
	for 确定起点,终点
		for 确定分割点k
			if dp[i][j] >  dp[i][k] + dp[k+1][j] + P[i] * P[k+1] * P[j+1]
				更新dp[i][j]  s[i][j] = k   		

}

4,分析

T= O(n^3)

5,源码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int MAXN = 10;
const int inf = 0x3f3f3f3f;

void  RecurMatrixChain(int P[], int n) {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值