算法模式---贪婪算法初识

作为科班毕业的程序员,在下的代码能力感觉都是笑话。痛定思痛,决定啃一啃算法。发现好像都是大学的课本知识,摸摸头…尴尬。
当然不能一口吃一个胖子,这些仅作为入门学习

常用算法设计思想

常见分类

迭代法、贪婪法、穷举法搜索法、递推法、递归法、回溯法、分治法、动态规划法。

贪婪法 — 贪心算法

这种方法模式一般将求解过程分成若干个步骤,但每个步骤都最贪心,选择当前状态下收益最大,局部最有利的选择,并以此认定最后的结果也是最好的(最大的)

特点

贪婪法和动弹规划以及分治法一样,都需要对问题进行分解,定义最优解的子结构。
与其他方法不同之处在于,每一步选择完局部最优解就确定了,不再进行回溯了,也就是说,每个步骤确定后就不再修改了,直到算法结束。
但也因此很少情况下能得到最优解。

设计思想步骤

  • 建立对问题精准描述的数学模型,包括定义最优解的模型
  • 将问题分解为一系列的子问题,同时定义子问题最优解结构。
  • 引用贪心原则确定每个子问题的局部最优解,并根据其模型,用子问题局部模型堆叠出全局最优解

下面就是案例啦!累死我了

贪婪法例子:0-1背包问题

【问题描述】:有一个背包,最多能承载重量为 C=150 的物品,现在有 7 个物品(物品不能分割成任意大小),编号为 1~7,重量分别是 wi=[35、30、60、50、40、10、25],价值分别是 pi=[10、40、30、50、35、40、30],现在从这 7 个物品中选择一个或多个装入背包,要求在物品总重量不超过 C 的前提下,所装入的物品总价值最高。

常见的三种贪婪策略
1.根据物品价值选择,每次都选价值最高的物品
依次装入4,2,6,5,总重量是130,价值是165
2.根据物品重量选择最轻的物品,直到超过150
一次装入6,7,2,1,5,总重量140,总价值155
3.定义一个价值密度感念,SI=物品价值PI/物品重量WI
依次装入6,2,7,4,1,总重量150,价值170

三个方法都是正确的,但是第三种很明显模型设计的更好,所以效果很明显。

编程大赛的战旗游戏,贪心算法很明显被狠虐。实在是模型不太会设计。同样的模式老员工的建模会将各种欠款都考虑进去。所以,对战时候就像一个带眼睛一样。说多都是累啊,真累!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值