算法分析与设计13《算法图解》读后感

Nicklaus Wirth曾提出“数据结构+算法=程序”,这个公式揭示了程序的本质,从中也能看出算法的重要性。如果说数据结构是程序的骨架,那算法就是程序的灵魂,正如这个比喻,在刚开始上算法课时,我对算法的感受就是如灵魂一样复杂、抽象、难以理解的,尤其是在算法的数学证明与复杂度分析方面。

《 算法图解》这本书不厚,只有200页不到,作者自称其为算法入门书籍,事实也是如此,它所涉及到的算法基本都是课上讲过的。在读完这本书后,我依然有所收获,一是对复杂度有了更深刻的理解,二是学习算法的观念有了改变。

算法本身就是为了解决,或是更好地解决问题而存在的,所以分析评价一个算法的性能是必不可少的,它帮助我们选择效率更高的解决方法。复杂度是评价算法性能优劣的重要标准。在读《算法图解》之前,我一直将算法复杂度简单地理解为用某种算法解决问题得出答案所需的时间,这种理解是浅显的。就如大O表示法,它指出了算法有多快,但它指的并不是以秒作为单位的速度,而是指出算法运行时间的增速。

书中以普通的遍历查找和二分查找进行举例说明,假设检查一个元素需要1毫秒,计算检索100个元素和10亿个元素时所需的时间。如果按照前面浅显的理解,检索100个元素时二分查找的速度差不多为遍历的15倍,那在检索10亿个元素时,遍历也不过需要30*15=450毫秒,几百毫秒的差距微不足道啊!然而,事实是随着元素数量的增加,二分查找需要的额外时间并不多,遍历查找的所需的时间实际是二分查找的3300万倍。鉴于这个例子,仅知道算法需要多长时间运行完毕是不够的,重要的是知道运行时间如何随检索列表的增长而增加。

书中在讲解算法时,结合了生动的例子,先将一个相对简单的问题的算法过程逐步推演,然后进行扩充。最后写出伪代码时,注释也没有脱离开之前的例子,不会产生跳脱感,理解起来更简单。下图是用二分查找猜数字的伪代码。
在这里插入图片描述
我现在学习算法的观念是不要被繁琐的数学证明唬住,弄清楚核心思维,代入实际问题一步步地推导演算,重要的是思维,而不是怎么写出代码,代码只是工具。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值