谈谈线性规划--算法设计要素(一)

基础例子-最短路径的问题

在这里插入图片描述
对于这样一个例子,一般求解使用暴力破解方式,但每一个节点有2个选择,所以n个节点复杂度为 2 n {2^n} 2n ,这已经不是一个好的算法啦。
动态规划可以很好的解决这个问题。

  • 从后向前每个节点选取小的,例如C1可以选择2与5,要到终点距离最小,只能选取2。
  • 以此类推,使用后推法就可以得到最终的最短距离。可以从第四阶段可知S3 与S5 路径最短。

注意:子问题可能不满足全局的最优解
在这里插入图片描述

算法设计要素

以矩阵相乘链的问题为例

在这里插入图片描述
这里矩阵链相乘为例,动态规划设计按照下面流程:

要素设计

1、每步处理一个子问题,界定子问题边界
在这里插入图片描述
2、列出优化函数的递推方程以及初值
在这里插入图片描述
这里把矩阵拆分成两部分(最少相乘的次数),在计算两部分乘积Pi-1 Pk Pj(原因如下)
在这里插入图片描述
3、问题要满足最优结构:一个最优决策序列的任何子序列本身一定相对与子序列的初值和结束状态的最优决策序列。

递归解决

根据上面递推式,改写成递归如下:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

从图可以看出,递归实现的效率不高,同一个子问题计算多遍。可以采用空间换时间。

迭代实现

从下面考虑

迭代过程
  • 最小子问题算起
  • 计算顺序,保证后面用上前面计算的值
  • 存储结构保持计算结果–备忘录
解的追踪
  • 设计标记函数标记每一步的决策
  • 考虑根据标记函数追踪算法

划分子问题如下:
长度(划分的规模):几个矩阵相乘
在这里插入图片描述
在这里插入图片描述代码理解参考图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值