小仙女趣谈算法

【本文又名:小仙女讲软考之算法设计和分析】

小仙女课堂开课啦,算法设计总学不好?多半是没理解透基本概念,看小仙女牌博客就好啦。

分治法——分而治之,各个突破

现实导入:

想想秦始皇是怎么统一六国的?“远交近攻,各个击破”。

对喽,先集中兵力打一个国家,成功后再攻击另一个。这便体现了分治的思想。

先打近的,再打远的,如果先打远的再打近的,会激起各国联合抗秦的斗志。所以,如果攻不下近的国家,远的国家也打不成,这体现了递归思想。

why?

原问题太大,太复杂,分开来看会容易些。

how?

分——治——合

what?

.归并排序:

先在各小组内排,再扩大小组

.最大子段和问题:

在8745319序列中找出含有3个元素的最大子段和?最大子段为874,其和为19

在一个给出序列中找出含有N个数字的连续字段,条件是其和最大。

.汉诺塔问题:

假设共有10个盘子,先借助C,把前9个盘子放到B上;然后再将第10个盘子放到C上;最后借助A,将B上的9个盘子放到C上。

 

 

动态规划法——拿最利于自己的东西

现实引入:

 

小偷去超市偷东西,假如已经将背包装满,准备离开时看到门口有块黄金可以偷,那他偷还是不偷?

有人说不偷,那如果他的背包里放着些吃的,把吃的拿出来,把黄金放进去,岂不是更好?

有人说偷,那如果他的背包里是价值更大的钻石呢?如果换了岂不是愚蠢。

在偷与不偷的思考过程中,就进行了一次动态规划的演算。

why?

最优子结构;重叠子问题

how?

定义什么是最优解——先假定已持有最优解——考虑是否采用面前东西

what?

.0-1背包问题:

放还是不放,is a question

.最长公共子序列(LCS):

12345和45679,求其LCS?45

贪心法——先吃了最优的

现实引入:

饿汉子问题。当你特别饿的时候,是见着啥吃啥还是等着挑个最美味的? 

why?

最优子结构;贪心选择性质

how?

仅根据当前已有的信息作出选择,且一旦作出选择就不再改变。就像你吃下去了就没办法再吐出来了。

what?

.活动选择问题(这个问题本仙女不懂,待我回天上后再仔细思考一下)

.背包问题 可以按“最小重量先放”、“最大价值先放”等原则,将东西放入背包

 

回溯法——深度优先查找

现实引入:

让你去一块玉米地,只可前进或后退,最终要找到其中最大个的玉米,你怎么做?

往前走的过程中,发现还是刚才碰到的那个大,再往后退去找它。这个往后退的过程就是“回溯”

why?

及时“剪枝”,能避免大量无谓的搜索。

how?

定义解空间——确定易于搜索的解空间结构——以深度优先的方式搜索解空间

what?

.0-1背包问题

.n皇后问题

 

 

小结:

本仙女这次下凡只是说说这些算法的基本概念,至于对各方法的比较和其在代码中是怎么具体实现的,请听以后的以后分解。

一家之言,姑妄论之。如果读者有什么想法可以交流,就再好不过啦~

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡夫卡的熊kfk

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

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

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

打赏作者

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

抵扣说明:

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

余额充值