算法导论-第15章

本文通过实例讲解动态规划的基本概念与应用技巧,包括工厂装配线调度问题、矩阵乘法问题及最长公共子序列问题,并探讨了备忘录方法在递归求解中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   动态规划,就是一种求解最优解问题的。

这么说,估计大家也觉得太空泛了。想看详细的说明,请点这里

那么我就讲我的理解了。

首先,算法是一种策略,方法,思想,其中,有一种非常常见的常用思想——动态思想。

你要做一件事情,然后,到最后完成。

而你没做一件事情都影响后面,

而且你每次有很多的选择

那么如何每次遇到岔路口,你最后,最快走到终点???

1.你算算去下一个地方,有几种方法?每种方法花费多少?n种路

2.你要去下下一个地方,那在刚才1的基础上,也就是在下一个地方上,看这个时候去下下一个地方,有几种?从头到这里要花费多少?nxn种

3.。。。

4.无限下去,你会发现这个数据其实很庞大,是个n的n次指数


其实呢,这里面有很多没用的计算,我们用表记录每次中最短的距离,那些比较长的,我们直接不要了,这样就降低了很多很多。

你可以好好看书,按上面说的4个步骤:

什么最优结构了?递归定义最优解?什么最底向上计算?构造最优解?


这些真的都是一种陈述语,你要明白动态,规划,什么东西呢?理解里面的过程在干什么?不是 继续的看那些步骤,没用的

1。工厂装配线调度问题,是个经典的入门问题。不想多说

2.矩阵乘法问题。如何让矩阵乘法,它们的运算最低??关键就是找到那个合理分配的k的位置,这个地方就能产生最优解

具体的伪代码,看书吧,这个真不是一两句能讲清楚的


备忘录???干什么的???

因为动态规划一般是自底向上的,最优求解,能不能最顶向下的,递归调用???

完全,可以。

怎么办?

做一个备忘录,把子问题,求解的答案写进去。每次递归时候,就看看表里面的东西。


这里有一个非常经典的问题——最长公共子序列

典型的动态规划

1.知道什么是公共子序列?

2.记住有一个前缀的概念!


如何思考这个问题呢?

简单,

看书p209

假如xm=yn,zk=xm=yn,那说明zk-1就是xm-1和yn-1的一个最长

xm!=yn,zk!=xm,说明zk是xm-1和yn的一个最长

xm!=yn,zk!=yn,说明zk是xm和yn-1的一个最长


为什么???

你自己举个例子,你好好看看,是不是?

因为这个是个基础,我当时,怎么都想不明白,所以后面的就没法弄明白了


书上用了2个表,b表用来记录整个路径,而c表则记录了最长的路径的值。


最后的最优二叉查找树,你可以直接忽略掉,因为只是前面的那些东西,已经够你看了,最后,提一句,上面的连接有非常详细的代码,想跑跑代码的,就点上面连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值