什么是算法?从枚举到贪心再到启发式(上)

前言

有人问我,什么是启发式算法?这个说来就话长了。那么,什么是呢?咱今天就来聊聊,并且,假定屏幕前的你只有大一刚学完谭浩强红本本的水平。

从背包问题说起

所谓算法嘛,肯定是要用来求解问题的。因此我们接下来的展开都需要围绕一个问题展开,那么我就用最简单的0-1背包问题( 1-0 knapsack problem)来给大家讲讲吧。

你手头上有个背包,背包的容量有限,只能装 C C C kg的物品。
现在有 N N N个物品摆在你面前,每个物品都有自己的重量 w i w_i wi和价值 v i v_i vi
好了,现在要你做成决策了:究竟选哪些物品装进背包,才能使得在不超过背包容量的情况下,获得最大的价值呢?

作为一名优秀的大学生,这个问题不会有人看不懂的吧,不会的吧。

好了,现在我们遇到了一个问题,得想想办法来解决它!在此之前我们再讲一点东西,观察上面的问题,能发现什么特点呢?

一般而言,算法所需要解决的问题,都能分成两个部分:

  • 目标:什么是目标呢?简单点说就是要优化的东西,比如在上述背包问题中,要优化的就是所选物品的价值,使其最大。
  • 决策:顾名思义就是根据目标所作出的决策,比如在这里就是决定选取哪些物品装进我们的背包。
  • 约束:那么何又为约束呢?就是说再进行决策时必须遵循的条件,比如上面的背包问题,我们所选取的物品总的重量不能超过背包的容量。要是没有容量的约束,小学生才做选择呢,我全都要!

算例

知道了问题以后,就可以生成问题的算例了。那么什么又是问题的算例呢?就是问题参数的具体化,比如在上述的0-1背包问题中,背包的容量 C = 10 C = 10 C=10,物品个数为 N = 3 N = 3 N=3,各个物品重量为$W=[4, 5, 9] , 各 个 物

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值