小仙女讲软考之算法设计和分析

来源:互联网 发布:远程监控软件下载 编辑:程序博客网 时间:2024/06/10 04:52

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


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

现实导入:


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

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

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

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):

1234545679,求其LCS45

贪心法——先吃了最优的

现实引入:


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

why

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

how

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

what

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

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

 

回溯法——深度优先查找

现实引入:


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

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

why

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

how

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

what

.0-1背包问题

.n皇后问题



小结:

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

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


原创粉丝点击