查看原文
其他

零代码的科普算法书《未来算法》读后

铭毅天下 铭毅天下Elasticsearch 2024-03-20
高中阶段,我的物理一直很差,好在其他科目还算可以,才能保证总成绩不至于太差。
究其原因,我现在回头看,当时真心不明白和纠结于问题大抵如下:
  • 小球为什么要往下滑?
  • 为什么是小球,而不是汽车?
  • 小球为什么不跳起来?
  • 现实中我怎么从来没见过绝对光滑的地面?
  • 学小球滑与不滑,这玩意到底有什么用?
......
在我对这些看似课程不相关问题模棱两可、抓耳挠腮的时候,老师早就讲到了别的知识点。这也导致我一步跟不上,步步跟不上。
这还没完,在高考结束 16 年后的今天,我还偶尔被梦中:“小球滑动、绝对光滑、物理考试不及格被老师谈话” 的场景惊醒吓出一身冷汗。
我对于高中物理老师的印象大致就是:“脑门发亮,每次上课都带一瓶饮料,讲的很好,但是我着实听不懂,我也不记得老师的名字了,姓也忘记了”。
高中物理之于我,是噩梦般的存在。
如果再深入分析,其实绝大多数都是我自己的原因。为什么别的同学不纠结这些问题?为什么很多同学都能考到接近满分?
在乡镇中学应试教育的岁月,老师和同学们关注都是:会做题、拿高分。自己的刨根问底和苛求老师的通俗易懂的讲解显得是那么的“另类”和“多余”。
这个问题到了大学和研究生阶段也没有改观,当然不再是物理(很庆幸我们计算机专业大学不用学物理)。
大学里学习核心专业课《数据结构》、研究生核心专业课《算法设计与分析》等课程,感觉老师基本都是照本宣科,能把书上的概念讲清楚,但是没有讲清楚算法背景、起源、应用场景等,更鲜有老师结合现实世界例子讲解的通俗易懂。
还好后来的我不再有高中的“执念”、“偏执”,采取了下面的几招,才算搞定个七七八八,至少找工作笔试面试都还不错。
  • 去找其他的书参考,比如:《大话数据结构》、《图解算法》系列书学习,这些书能把复杂问题讲的浅显易懂,且读了也不犯困。
  • 去找国内外顶级的公开课学习,比如:我学习北大张铭老师的《数据结构与算法》,学习了哈佛大学《CS50 计算机科学导论》公开课、MIT《算法导论》公开课。
  • 去自己敲代码实践,比如:为了备战笔试、面试,我将自己实践梳理的代码整理为博客《数据结构之步步为赢》专辑系列。
我印象最深的是 CS50 课的教授为了讲解二分查找的“撕书”视频,让我身临其境感到震撼,这或许是“通俗易懂”的最高境界,看了一遍一辈子忘不了的“肌肉记忆”效果,太形象、太生动了。
我特意从移动硬盘找到了当时听课的视频,现在看依然回味无穷,撕书现场截图如下:


说了那么多,感触最深的是:能把基础原理讲的通俗易懂绝非易事,需要非常深入的思考、提炼、练习和总结
由于数据结构和算法的重要性,工作之后我也持续关注相关的动态,尤其关注有什么新书、教程能把这种基础理论讲的通俗易懂,我认为《漫画算法》、极客时间的《数据结构与算法》课系列算是近几年做的比较好的。
前两天刷公众号消息,偶然间看到诸葛越老师的新书《未来算法》的发布,IT圈子的大V吴军、沈向洋、王小川写的推荐语,令我眼前一亮,当即下单买入。现在已全部读完,的确不负所望,是一本可读性非常强的科普书。


作者牛是书好的前提,作者诸葛越老师本科:清华、硕博:斯坦福,博士导师刚获得2021年图领奖、诸葛越是 Google 创始人之一谢尔盖·布林的同学、前Hulu全球副总裁、两个孩子一个读剑桥大学、一个读芝加哥大学、《魔鬼老大、天使老二》畅销书作者,应该是国内外不多见的计算机专家 + 育儿专家的综合体。可能国内能与之比肩的就是《数学之美》、《浪潮之巅》的作者吴军博士.....
《未来算法》脉络非常清晰,如下的图示贯穿全书全部章节,自顶向下的逐个展开讲解。


区别于国内任何一本教科书的先算法概念、时间复杂度、链表、栈、队列、树、图、排序等的章节结构,《未来算法》将这些零散的知识点全都打散、掰开揉碎、结合四大算法(排序、分类、搜索、递归)、四大思维(分解、抽象、算法、模式识别)的脉络讲解,非常新颖。
欣慰的是:本书零代码,作者将看似复杂的算法结合现实生活衣(抽屉存放衣物类比栈)、食(炒鸡蛋顺序类比分解问题)、住(酒店逃生只带走手机问题类比贪婪算法)、行(公交车导航线路类比计算机抽象问题)等结合起来,其实想想这些问题我也都经历过,但是我为什么没有想到?以此维度思考反观作者,更能体现作者的细腻、缜密、细致入微的观察、深入浅出(作者解释深入浅出:对于一个问题,你想透了才能真正理解)的讲解,来源于生活、抽象于生活、升华于生活的见地。
很多例子还会让人感觉用的恰到好处,比如:
  • 以世界杯赌球讲解二分法;
  • 以扫地机器人讲解模式识别;
  • 以朋友圈讲解链表存储。
难能可贵的是:作者还在每一章节作为做了升华。比如:
  • 排序思维做时间管理;
  • 分类思维解除焦虑;
  • 搜索思维找工作;
  • 模式识别方式认清本质、识别规律并预测未来。
这些都是我非常喜欢的讲解方式,基于现实世界的小问题、生活中的小场景,展开论述,零公式、零代码,引出一个个的知识点,非常引人入胜,每一小节后面还提出一些发散性问题,进一步吸引读者思考以加深对概念的“反刍”理解。
更难能可贵的是:书中有大量的、形象化的插图辅助理解概念且作者将书中所有知识点以脑图的一页纸方式附赠呈现。这就是我一直提倡的知识的“点、线、面、体”的学习方式,我深知这会非常耗费时间,但,相信作者是站在高处俯瞰全局才会有了这般格局和视野,值得借鉴和学习。
为便于未来的我复习,我将书中的好奇点以及感兴趣的问题或定义梳理如下:

什么是计算思维?

计算思维,简单的说就是计算机怎么解决世界的问题。它包括几个部分:把复杂问题分解成简单问题,找出重复的模式,把物理世界的信息抽象表示成计算机能够理解的信息和很多约定俗成的算法。
计算思维主要包括四个方面:分解问题、抽象、算法、模式识别。
  • 算法:直接解决问题的方法。
  • 分解问题、抽象、模式识别:能帮助人们用算法来表示生活中的问题。
计算思维是贯穿编程的底层思维,分解问题是计算思维的核心,排序算法、分类算法、搜索算法、递归算法是基石,数据结构和模式识别是架构,以上支撑着未来前景无限的 AI 等领域。

计算思维四种思维之一——分解思维

拆解复杂问题,直到复杂问题成为可重复的简单问题。
分而治之、各个击破是兵家常用的策略。分解问题就是分治法。
当我们把一个大问题分解成小问题,再分解成具体的步骤之后,我们就可以用一种计算机语言把这些步骤表示出来,指导计算机做事。

计算思维四种思维之二——抽象思维

抽象就是在与计算机对话时,删除物理空间和时间细节,以集中解决关键的问题。
把生活中的问题抽象化,用约定俗成的算法来解。
抽象能力,是一种去伪存真的核心能力。我们生活中有太多的细节,虽然它们让生活有了诸多色彩,但在解决问题方面,很多细节是不必要的。
爱因斯坦说:“当你清楚的定义一个问题的时候,你已经解决了百分之九十了”。抽象是帮助我们把问题想清楚的强大工具。

计算思维四种思维之三——算法思维

计算机的算法就是一系列简单确定的操作来完成一项标准任务。算法是计算机用来解决问题的基本单元。
算法是流程化的、可调用的、逻辑清晰(足够清晰、没有歧义)的。
算法的特性:
  • 正确性。在任何情况下都必须正确。
  • 多样性。每个题都有多种不同的算法来解。
  • 重复性。重复执行,直到某一条件满足后结束。
  • 完整性。仅仅正确还不够,还要保证完整(都要覆盖到)。

计算思维四种思维之四——模式识别

模式识别,就是识别出哪些问题有共性,可以用同一个方法(比如排序)来解,这样我们就可以把这些问题交给计算机算法,让它重复做,做成千上万变。
对简单的模式给予合适的输入和输出,可以解决复杂的问题。
比如:抖音不是给一个人推荐视频,它的算法是给一亿人推荐视频。每个人看到的内容是不一样的,形式和方法却是一样的。

数据结构和算法的关系

计算机需要有一些地方存东西,计算机把这些“东西”叫数据,存放“东西”的地方和方式,就是数据结构(队列、堆栈、键值对、图等)。
算法的有效性依赖于数据结构,用对了数据结构,算法就会更快、更好。

最佳停止问题

最佳停止问题的场景是:你有一系列可能选择的目标,你可以一个一个地检验,记住他们的特点和优点,给他们打分。但是你看过了就不能回头了。
问题是:你什么时候做决定,是最佳的选择呢?这个最佳选择的答案是:37%。
也就是说,在你所有的可能选择中,前面 37% 不要选,用来积累数据,建立你对选择对象质量的评估标准,让你知道什么是好的,什么是不好的。
从第38%个开始,你就转成开放的可以做决定的状态。这时候,你如果遇到比前面看到的都更好的选项,你就可以做出选择。
基于作者引出最佳停止问题的定义我浮想联翩,让我想到 20 多年前左右捡甜瓜的场景。
当时我们几个小孩在一块甜瓜地旁边的路上玩,大点的甜瓜都让瓜农大爷(种瓜的主人)收走了,只剩下一些小的,不过由于瓜农大爷捡拾的匆忙,可能还会剩下大点的甜瓜。
天快黑了,瓜农大爷说:你们小孩去里面捡吧,但等下一辆车来了,你们就出来。实际上下一辆车也就十来分钟的时间。
这时候,我们都有一种如获至宝的感觉,我们几个小孩一人一趟的去找,由于是徒手,加上小孩手小,最多只能拿一个瓜。
绝大多数小孩和我一样,明明看到有相对大的,但没有选择,总感觉后面可能还有更大的,最后眼看着下一辆车要来了,我们中的绝大多数小孩(包括我)只捡了最后那一刻的那一个相对小的瓜,灰溜溜的从瓜田里跑了出来。
我印象很深,当时有一个小女孩捡到了最大的瓜。她的捡拾方法是:捡到一个相对大的瓜,就抱着不放,看后面如果有大的就换,如果没有大的就一直抱着。
当时,我就在反思:为什么我只捡到一个小瓜?直到今天看这本书我才恍然大悟,原来这是个最佳停止问题。
故事还没有结束,那个小女孩,后来是我的初中同班同学加同桌,再后来成为我们村里唯一的复旦大学女博士。......

优化与最优

最优,所有可能的解里面最佳的一个。
优化,是一个动词,是把解决方案不断变好的过程。是计算思维的核心概念,它是计算和数据的根本区别所在,也是我们日常生活中非常有用的方法。
优化的精髓是要在有限的时间内,用有限的资源找到针对一个问题的可以接受的解决方案。
优化往往追求时间和空间的平衡。优化可能导致最优解的出现,但是很多时候,只是找到一个可以接受的比较好的解。
如果我们对一件事的价值没有想清楚,那我们应当先好好回答“什么对我更重要”这个如何衡量的问题。

什么是未来算法?

未来算法教你像计算机一样思考。
学会了计算思维,你可以看透物联网世界和 AI 是怎么运作的,你也可以学会了一种解决大规模复杂问题的方法。

这不是很有趣吗?

对未知的好奇、对问题的好奇、对错误的好奇、对难题的好奇......

小结

一本科普读物的成书相对专业书籍难度很大,正如作者所说:“这是专业知识的凝结”。
一本计算机专业的科普书籍能结合 N 多生活中的实例深入浅出、通俗易懂的讲解,难度不可谓不大。
但,作者游刃有余、毫无保留的都做到了。很期待作者还有类似的更多书籍的出版。
计算思维不止要融入我们的编程工作中,还要融入到我们的日常生活,更要融入我们计算机人的血脉,以其指导我们的学习、工作、生活,我们会变得条理清晰、泾渭分明、豁达通透。
能把复杂的问题用大白话的语言结合生活的点滴案例讲解清楚,绝非一朝一夕之功!我自己每周都写博客,深知讲解清楚一个问题、一个概念的难度,作者的讲解方式值得我深入学习甚至是终身学习。
我还有很长很长的路要走,还需要读的书还有很多很多,还需要学习的知识还有很多很多.......
欢迎大家留言推荐最近影响你的一本书。

推荐:

  1. 你不得不读的好书 ——《此生未完成》读后感

  2. 有时间吗?看本书吧

  3. 《一年顶十年》干货读书笔记

  4. 哎!如果早十年读这本书……

  5. 认知升级——不做开始爱好者!

  6. 争当 2% 的人——《智能时代 · 大数据与智能革命重新定义未来》读书笔记


   中国最大的 Elastic 非官方公众号
继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存