实例分析,没有那么多术语:由贪心算法,np完全问题到动态规划(表格思想)

贪心算法,np完全问题

一:课程调度问题,若干节课都在同一个空教室上,如何排课最优?

答:step0:选出还没上课的结束最早的课,上课

        step1:重复step0

在这个问题中,这个直接了当的算法就是最优解,同时它也为我们介绍了贪心算法的概念:

每步都选择局部最优解,最终得到全局优解

but不是每次都可以都得到全局最优解

二:小偷的背包问题

背包存放物品重量有限,偷取总价值最高的物品放在背包内,如何设计?

贪心策略会是这样设计:

        step0:盗窃还可以装入背包的最贵物品

        step1:重复step0

很轻易可以举出例子,证明这并不能全局最优

小偷能偷的东西个数不会很多,这个题可以用其他算法获取最优解,但下面这个例子告诉了我们贪心算法的意义所在

三:集合覆盖问题

每个集合包含不同的元素,如何用最少的集合覆盖掉全部的元素?

贪心策略:step0:选出最能覆盖掉还没被覆盖掉的元素的集合

                step1:重复step0

一般思考策略,暴力求最优的解:算出能覆盖全部元素的所有集合组合(幂集),找出集合个数最少的那一个组合,则最多需要求解2的n次方个集合,效率很慢

而贪心算法的运行时间最多为n的平方,效率快的多

四:旅行商问题

一个旅行商想去n个不同的城市,求去完所有城市的较短路径

贪心策略:step0:选择还没去的最近的城市

                step1:重复step0

一般思考策略:计算所有线路,可以发现线路数量会是n的阶乘,速度很慢

小小总结

三和四都属于经典的np完全问题(基本不可能设计出快速解决算法的问题)

广度优先算法,狄克斯特拉算法等,都属于贪心算法

元素增加运行效率会大大变慢,需要列出所有组合的问题大概率是np完全问题

可以画成集合覆盖问题,旅行商问题的一定是np完全问题

贪婪算法经常用于对np完全问题的近似求解

动态规划

小偷的背包问题,动态规划求解

 由动态规划表格知:最优解是头手表和手机,总价值3000元

表格具体求解思路:

表格[行][列] = Max{表格[行-1][列],行头物品价值+表格[行][背包剩余容量]}

此题中,背包分为了0.5,1,1.5,的原因是存在重0.5的物品,如果全是整数则不用分成小数,如果小数为0.4或者其他,那么背包的表格还要分成0.4,1.4等

字符串最长公共子序列,动态规划求解

 可以知道,以上三个字符串与源字符串最大公共子序列(最右下角的值)

此题的表格构造方法是,若字符不相等,则值为左边或者上面的元素值

若字符相等,值为左上角的值加一

小小总结

动态规划,需要我们不断根据前面数据规划子问题,前面的数据可以用一维数组,二维数组(看起来就是表格)来存储

动态规划的数据,应该是离散的,即数据之间没有关联性,不会互相影响

所以动态规划的思想,是将大问题分散成一个个离散子问题

(不知不觉居然写了1100字诶!!(0.o惊讶))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏目艾拉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值