小仙女趣谈算法

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

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

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

现实导入:

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

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

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

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皇后问题

 

 

小结:

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

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

发布了258 篇原创文章 · 获赞 769 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/qsbbl/article/details/77800223
今日推荐