读书笔记

《算法导论(第三版)》读书笔记
在参考很多算法相关的书籍之后,鉴于可读性和难度等问题,最终选择了《算法导论》这本书来作为本学期算法课程的课外阅读书籍,这本书可以说是计算机领域算法学习的经典之作。虽然到目前为止由于对很多算法的研究浅薄导致我还没有读完它,但是可以看得出相对于其他很多教材《算法导论》言简意赅,伪代码相比于c++或者java代码的呈现更加清晰明了且精简,这一点让人眼前一亮。
再说回到算法本身,算法是一种将输入转化成输出的计算工具,而书中说到,一般来说,问题陈述说明了期望的输入、输出关系,而算法则用一个特定的计算过程来实现这样的输入和输出关系。而这个计算过程当中,耗费的时间和内存,就是算法的时间复杂度和空间复杂度,他们同时也是衡量一个算法优劣程度的重要指标,所以我们对算法的学习其实就是希望用最优的方法来解决问题。
其实在课堂上学习动态规划之前,我对于动态规划的理解主要停留在求最长公共子序列和求一些时间或者金钱问题的最优解上,而在课堂上,了解到了矩阵链问题,其实也是求最优解,但是是与线性代数的问题相结合。在这节课结束之后,去阅读了《算法导论》动态规划这一块的内容,发现从矩阵乘法的原理到动态规划公式都非常清晰,伪代码的部分也加深了我对于这个问题的理解。书中用到了MATRIX—CHAIN—ORDER计算的m表和s表来具体分析某个节点的动态规划情况。
在这里插入图片描述
结合图表的方式使得我对于矩阵链乘法的实现过程更加明了,也使得我在实践课写代码的过程中更加得心应手。
除了对课堂内容的加深理解,其他内容的补充也很重要,不仅仅是学到新的算法,也对现在已知的知识有更深刻的理解。比如B—tree。B树在数据库索引中有着非常广泛的运用,在学习数据库内容的时候我就十分好奇,为什么数据库要用B树或者B+树作为索引,在书中了解了B—tree之后,我有了更深的理解。B—tree并不是B tree二叉树,而是B树平衡树,B代表的是balance而非binary。B—tree 是利用了磁盘块的特性进行构建的树,可以说是为了直接存取而设计的一种平衡搜索树。每个磁盘块是一个节点,每个节点包含一系列的关键字。把树的节点关键字增多后树的层级比普通的二叉树少,于是可以有效地减少数据增删改查时的次数和复杂度。
在这里插入图片描述
B—树插入有以下几个过程:
(1)根据要插入的关键字的值,先进行查找操作,查找到待插入数据的当前节点位置。
(2)判断当前结点关键字的个数是否小于树的阶数(节点拥有的最多子节点数目),若满足,则直接插入数据并结束,否则,进行下一步骤。
(3)以结点中间的关键字为中心分裂成左右两部分,然后将这个中间的关键字插入到父结点中,这个关键字的左子树指向分裂后的左半部分,这个关键字的右子支指向分裂后的右半部分,然后将当前结点指向父结点,持续执行本步骤。
于是,对于一颗高度是h的B树来说,插入步骤需要进行O(h)次磁盘存取,每次调用只做了O(1)的磁盘读或者写操作,所占用的cpu时间相比于普通的二叉树会小很多。而删除的过程与插入的类似,占用的cpu时间也相同。
在明白了B树增删改查的原理之后,我也就明白了数据库系统采用B树或者B+树而不是使用二叉树来进行索引,这让我不仅对算法本身有了更加深刻的了解,也对数据库的增删改查有了更加明了的认识。
除了举例的两个算法之外,还有简单算法如蛮力法,分治法,贪心算法,或是相对高阶的红黑树算法等,在《算法导论》中都有涉及,让我对于课本知识有了更加深刻的理解,也在课外拓展了不少内容。希望在以后写代码的日子中可以更多地提升代码质量,采取低时空复杂度的优秀算法,而不是像以前那样觉得“万物皆可暴力”,将题目都用蛮力算法先模拟一遍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值