算法分析与设计实践 - 作业13 - 算法读书笔记

Note(读书笔记):阅读课外算法相关书籍,完成读后感一篇
要求:不少于800字,Word格式

在我在刚开始选择课外算法阅读读物时,看到很多人都推介经典的算法圣经——《算法导论》。大略了解了一下,都说这本书是算法的百科全书,但是一想到他内容多,读起来会比较枯燥,读起来肯定很费劲并且有可能会看不懂,因此觉得不是很适合我这种脑子比较笨的人。所以,我就想着找找看,能不能找到有趣一点的,或者说是更加易读懂,适合我自己的算法书来看。没想到还真让我找到了——《啊哈!算法》和《算法图解》,都是一些结合生活中的例子,讲得生动有趣、不枯燥的书。于是我就选择从《啊哈!算法》开始读起。
花了一些课外的时间读了《啊哈!算法》。这本书内容相对基础,书中的算法举例贴近生活,不会感觉太枯燥,算法读起来也较为通俗易懂。我是那种理论上理解了,但是应用起来就不会用的那种人,书中在算法后面会给出详细的代码和注释,感觉还是很适合我的。
这本书中其中有一大部分是数据结构的内容,比如栈、队列、链表、树、堆和图之类的,因为上学期有学过数据结构,因此就大略温习了一下,然后就看后面的算法,算法也都是比较基本的一些算法,比如排序、枚举、深度和广度优先搜索、图的遍历、最短路径算法、最小生成树算法,还有一些之前没太多了解的割点与割边算法、二分图的最大匹配算法等。
下面是书中有提到的,老师有布置的算法实践题,且个人认为比较重要的几个算法,归纳总结一下知识点,也可以算是为期末做准备。
解决最短路径问题的Floyd算法和Dijkstra算法
Floyd算法和Dijkstra算法都是用于求解有向图或无向图从一点到另外一个点最短路径。Floyd算法又称插点法,是一种利用动态规划的思想寻找给定的加权图中顶点间最短路径的算法。Floyd算法可以解决有负权边的图。Dijkstra算法使用的是“贪心”策略,也就是先选择局部最优解,最后获得全局最优解的策略。Dijkstra算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。但它有一个缺点就是无法处理有负权边的图。
构建最小生成树的Prim算法和Kruskal算法

Prim算法会从图种任意选择的一个单顶点,作为序列中的初始子树,每一次增加一条不在树中的权重最小的边,当图中所有顶点都包含在所构造的树中时算法停止。Kruskal算法则是是一步步地将森林中的树进行合并。按照权重非递减顺序对图中边进行排序,然后从一个空子图开始,扫描有序列表,并把列表中的下一条边加到当前子图中,直到生成最小生成树,特别要注意的是这一过程不能产生回路,若产生了回路则需要把这条边跳过。Prim算法适用于稠密图,Kruskal算法适用于稀疏图。
总的来说,《啊哈!算法》这本书主要还是适合作为基本算法入门学习,不过基础知识也是很重要的,待我把《算法图解》也读完了,想学到更多的算法,看来还是得读一些更深的,比如《算法》、《算法导论》之类的书。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值