动态规划学习(一)

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经过分解得到的子问题往往不是相互独立的。在用分治法求解的时候,子问题被重复计算了多次。
解决方法:保存已解决的子问题的答案,避免大量重复计算。

动态规划与分治法区别

  • 适用于动态规划算法的问题,经分解得到的子问题往往不是相互独立的。若用分治法求解,则分解得到的子问题数目太多,最终导致原问题需要指数时间。
  • 虽然子问题数目只有多项式量级,但用分治法求解时,子问题被重复计算多次。
  • 动态规划的基本思想:构造一张表来记录所有已解决的子问题的答案。

动态规划算法的基本步骤

  1. 找出最优解的性质(分析其结构特征)
  2. 递归定义最优值(优化目标函数)
  3. 自底向上得到最优值
  4. 根据计算最优值得到的信息,构造最优解。

两个矩阵相乘(标准解法)
设A是pxq的矩阵,B是qxr的矩阵,数乘次数pxqxr,算法时间复杂度为O(n3)

void matrixMultiply(int **Ma,int **Mb,int **Mc,int ra,int ca,int rb,int cb){
	if(ca ! rb) error("矩阵不可乘");
	for(int i=0; i<ra; i++){
		for(int j=0;j<cd;j++){
			int sum = 0;
			for(int k=0;k<ca;k++){
				sum += Ma[i][k] * Mb[k][j];
			}
			Mc[i][j] = sum;
		}
	}
}

矩阵连乘问题
给定n个矩阵:{A1,A2,…,An},其中Ai与Ai+1可乘。
求解这n个矩阵的连乘积。
矩阵乘法满足结合律,因此有多种计算顺序
在这里插入图片描述
动态规划法

  • 将矩阵连乘积(Ai Ai+1 … Aj)记为A[i:j]
  • 计算A[1:n]的最优计算次序:设最优计算次序在Ak和Ak+1之间将矩阵链断开(1<=k<n)
  • 则完全加括号方式为:(A1…Ak)(Ak+1…An)
  • 总计算量为A[1:k] + A[k+1,n] + A[1:k]和A[k+1]相乘的计算量。

1.分析最优解的结构
A[1:n]的最优计算次序所包含的矩阵子链也是最优的。即A[1:k]和A[k+1:n]的计算次序也是最优的。
最优子结构性质:矩阵连乘计算次序问题的最优解包含其子问题的最优解
2.建立递归关系
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干饼干圆又圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值