未来算法:下一个十年赢在计算思维|周末读书
内容简介
我们的未来,是人和机器一起仰望星空的时代。
这本书用通俗易懂的语言和生动活泼的例子,介绍了有关“未来算法”的新知识,重点拆解了排序、分类、搜索、递归几大基本的未来算法,轻松讲述了数据结构、模式识别、抽象、优化的定义和应用,并提出了“计算思维”的新概念。
计算思维,简单地说就是计算机怎么解决世界上的问题。
这本书提供一种全新的看世界的视角,让你掌握现代信息运作的奥秘。作者认为,未来的十年是算法发展的黄金十年。
作者简介
诸葛越,夸克星辰科技创始人兼CEO。曾任Hulu公司全球研发副总裁,中国研发中心总经理;雅虎北京研发中心资深产品总监;微软北京研发中心项目总经理。计算机科学家。美国斯坦福大学计算机系硕士与博士,纽约州立大学石溪分校硕士,曾就读于清华大学。曾出版科技类图书《百面机器学习》《百面深度学习》。
目录
第一部分
01 分解问题:从炒鸡蛋到无人驾驶
02 排序算法:巴比伦的泥板
03 分类算法:全世界所有的东西
04 搜索算法:找到牛津大学
05 递归算法:洋葱、汉诺塔和昨天的你
第二部分
06 数据结构:皇室家谱和继承
07 模式识别:会扫地的机器人
08 抽象:10根手指限制了我们的想象
09 优化:如何找到最佳伴侣
第三部分
10 AI和未来计算
媒体及专家评论
计算机科学和AI近年来发展得日新月异,其中最重要的是计算思维的方法论。诸葛越的《未来算法》一书,用生活中的许多具体例子巧妙地介绍了有趣的计算机算法,解释了计算思维的重要性。
一切都是算法。当代生物学家和当代认知科学家已经开始发现:生命是基因和蛋白质的算法,思维是大脑的算法。人类杰出的智能,就在于能使用抽象程度越来越高的算法,理解和思考世界上的万事万物。未来属于对算法有深刻理解的人。
前言:什么是未来算法和计算思维
你是否想过,为什么计算机科学对现有的几乎所有的领域都产生了巨大的影响?
现有的科学领域,比如说医学、物理学、生物学、教育学,都是很专业的领域,而计算机科学属于解决问题的科学领域。它的影响力在于,它的方法能够渗入并帮助其他各个领域,解决那些领域本身存在的问题。
比如,计算机帮助医生在图像中寻找病人患癌症的可能性,帮助物理学家在千万张星空影像中找到新星,帮助生物学家快速排序病毒DNA(脱氧核糖核酸)并预测可能的变异,帮助教育专家了解每个孩子的不同并真正做到个性化教学。
计算机是机器,机器是死板的。计算机能懂得的命令是非常简单的。就像一个一两岁的小孩一样,一台普通计算机能够懂得的命令只有非常少的几种,比如“加一”“减一”“判断两个数是否相等”。这些简单的命令可以合起来让计算机完成一些标准的任务,比如把一串数字按大小排序。
那计算机为什么能做到那些炫酷的、人类做不到或者比不上的事情呢?这是因为它的速度特别快。快到什么程度?任何一台现代的计算机都可以在一秒之内读完《莎士比亚全集》。它可以在人无法感知的毫秒内完成几百万甚至数千万次的计算。
另外,计算机还有一个优点,就是它可以不厌其烦,不断地重复做一件事。比如,你让一个人把100本书按名字首字母顺序排列可能不算难。但是如果让他排1万本书,他就非常累了,可能要排好几天。计算机是不怕累的,它可以快速且不抱怨地重复劳动。别说有1万本书,哪怕是10万本、100万本、1亿本,它都可以正确地排出来。
理解了既死板又强大的计算机,你就理解了它是怎么做事的。计算思维的核心方法,就是充分利用计算机这种快速、精确、规模化的能力,把这种能力用算法表示出来,让计算机来完成。
目前业界公认,计算思维包含4个方面:分解问题、抽象、算法、模式识别。其中,算法是直接用来解决问题的方法,而其他几个概念能帮助人们用算法来表示生活中的问题,从而让计算机来解决这些问题。下面我们再具体地解释一下上面提到的4个核心方面。
第一,拆解复杂问题,直到复杂问题成为可重复的简单问题(分解问题)
不同学科、不同时间段、不同的人都有不同的思维方式和认知世界的方式。做同一件事,比如说盖一栋房子,建筑师想到的是设计风格,材料工程师想到钢筋水泥,文学家想到写个故事,而计算机看到的是:窗户、门、墙、地板,一起有结构地搭成一栋完整的房子。在计算机看来,窗户尽管大小形状不一,但都是窗户,门可以有不同的材质,但都是门。对计算机来说,盖一栋房子,是用多少个组件和如何搭建起来的问题。
用计算思维解决问题,首先就要拆解。分解问题是把原问题分解成子问题,解子问题,再把子问题的解合成原问题的解。无论多么强大的计算机应用,背后都是把原问题分解成可以解的子问题,只是规模不同。
你可能会用抖音刷短视频看,那抖音的个性化推荐算法是怎么回事呢?它怎么知道你喜欢什么视频呢?在计算机看来,这个问题可以拆解成:(1)把所有的视频按内容分类和排序;(2)根据所有用户(包括你)以前各自的观看习惯,推导出喜好;(3)把视频内容和用户喜好进行匹配,按匹配程度排序,这个排序可以用排序算法来做。也就是说,你用抖音刷视频对计算机来说分三大步,每一步都可以继续拆解,直到每一步都可以用算法来完成。
淘宝看上去是做完全不同的事,但是你能想到吗,它最终也是个排序的问题。淘宝是把你要找的商品做个排序,按照你的需求来排。这两个强有力的应用,最终解决的都是排序算法的问题。但是它们排的东西不一样,一个是视频,一个是商品。排的方法也不一样,一个要学习你的喜好,让你喜欢看,看的时间长;另一个要尽快有效地促成交易。
第二,把生活中的问题抽象化,用约定俗成的算法来解
我们生活在一个物理世界里,计算机生活在一个数字世界里。计算机并不像人一样理解真实的事物,我们需要把真实的世界表达成它能理解的语言。然后在计算或操作后,它才能在真实世界中把结果展示出来。
比如,抖音需要用ID(身份标识号)或者名字把视频表示成计算机可以理解的形式,也要把视频内容表示成计算机可以理解的形式。同样,淘宝需要把商品的名字、内容、价格等表示成计算机可以理解的形式。被计算机排序后,这些物品需要转换回人能够看见的视频或者商品。这个把真实物理世界和计算机数字世界对应的过程就是抽象。
在进行抽象的时候,我们要忽略不必要的空间或时间细节,以集中解决关键的问题。比如,要计算机调度公交车,只需要对它表示车站和地理位置,而不需要表示路旁的商店和花草。再比如,在APP里面找一首歌,只需要对它表示这首歌的名字和歌手,播放的时候,才需要音频文件。
一旦问题被抽象成计算机可以理解的形式,比如转化为上面提到的排序问题,那么,这个问题就有约定俗成的解法了。我会向大家介绍一些常用的排序算法,比如冒泡排序、插入排序等。这些算法是计算机科学家研究出来的正确而高效的算法,是放之四海而皆准的算法。我们不需要重新去发明它们,就好比造房子的时候有其他公司已经能做出世界一流的窗户,那我们只需要知道是哪家公司有这个能力,把尺寸要求给它,让它造窗户就行了。
第三,算法是流程化的、可调用的、逻辑清晰的(算法)
计算机的算法就是一系列的指令,而指令是计算机能理解的语言。
人类的语言本身是复杂的、模糊的、会意的,比如“空山鸟飞绝”这句诗,看到的人会“脑补”这个画面。而计算机语言像小孩的语言,你必须给它所有精确的信息,它才能懂。计算机需要数过每一棵树,不多也不少,才知道这是一片有几棵树的森林。计算机的指令需要清晰、流程化,就像做一杯咖啡的指令,不管谁拿到这个指令,都可以做出同样的咖啡。
清晰的语言表达是计算思维的要点。拆解使语言变得清晰。比如,计算机把物体从小到大做一个排序队列,它的办法是:(1)拿一个新的物体;(2)从队列第一个开始比较,直到找到这个物体合适的位置;(3)把这个物体插入这个位置。这3个步骤非常清晰,没有歧义,对任何数目的物体都会奏效。这个算法叫插入排序算法。抖音排视频可以用这个算法,淘宝排商品也可以用这个算法。
无论是抖音需要每天推荐1亿个短视频,还是淘宝同时服务1000万名用户,当它们做到最后一步,需要向用户展示一个排好序的清单的时候,它们用的都是我们会排序算法。
在本书中,我会介绍各种基本的算法,可以说,现代和未来的数字世界就搭建在这些算法之上。算法是约定俗成的好方法,一个算法可以解不同的问题,一个问题可以由不同的算法来解。我们需要知道各种算法的存在,懂得它们的原理,学会调用它们,让算法为我们服务。
第四,可重复性带来规模效应(模式识别)
计算机的算法不是用来解一个问题的,而是用来解一类问题的。这个解是可以重复的。比如,抖音不是给一个人推荐视频,它的算法可以给一亿人推荐视频,每个人看到的内容是不一样的,形式和方法却是一样的。再比如,一个人脸识别算法不是只能识别某个人,而是可以把每个人的身份证照片和实际的影像进行匹配。
可重复性带来规模效应,这是计算机强大的根本原因。所谓模式识别,就是识别出哪些问题有共性,可以用同一个方法(比如排序)来解,这样我们就可以把这些问题交给计算机算法,让它重复做,做成千上万遍。
说到计算思维,人们通常会提出两个最常见的问题。
第一个问题:计算思维和数学思维是一回事吗?
答案:不是。简单地说,数学寻求的是真理,数学问题会有一个答案或者一个证明,数学关心的是正确性。比如7+3=10。计算思维更关心怎样有效地把一件事做出来。对计算机来说,一个问题有解还是不够的,关键是怎么解,是否能在合适的时间内找到令人满意的答案。比如说,能否在1秒钟内给我推荐合适的视频,在10秒钟内找到去公司的最短路径,或者要在50亿个网页中找到和“火箭”相关的网页?怎么才能在合理的时间内把一件事做出来,是计算思维关心的问题。
103是不是个素数?这是个数学问题。写一个算法来判断任意数字是不是一个素数,这是个计算机的问题,计算机能解决所有判断素数的问题。再比如,300万和200万哪个大,是个数学问题。如何让300万人同时在线看球赛,是个计算机的问题。
第二个问题:计算思维和编程是一回事吗?
答案:不是一回事,但是有一定关系。计算思维可以说是学编程之前的基础技能,也可以说是贯穿编程过程的底层思维。没有计算思维就学不好编程,但是计算思维不受限于编程语言,比编程囊括得更广。用一种编程语言写出算法,交给计算机去运行,不论是用C语言、Python、Java,还是其他编程语言,这个过程都是编程。从计算机编程诞生以来,人们设计出的编程语言有100多种,而算法是不需要懂得任何编程语言就可以学会的。
用写文章做比喻,编程好比写汉字、写英语或者写日文,计算思维则类似于文章的构思、组织和内容。会编程只是掌握了和计算机直接交流的语言,而拥有计算思维才能写出正确的程序。我们都知道,人与人之间的交流可以通过非文字的方式,比如画画。和计算机交流也可以通过使用现成的APP、图形化编辑软件等,不一定要通过编程。
注:欢迎大家在评论区踊跃留言,我们将从中精选出3位有独到见解的用户,分别赠送《未来算法》新书1本。感谢大家一直以来对德外5号的支持。

有收获就同步给同行或同事,点个“在看”呗!
?
抱团交流
一个集大神卖家与逗趣同行于一体的交流群,扫码添加客服微信(备注“进群”哦)。

目前100000+人已关注加入我们












上一篇:深夜重磅!拜登出手打击“天价铁路、海运运费”!盐田中断影响或持续数月!圣诞节出货恐受限制→
文章为作者独立观点,不代表AMZ520立场。如有侵权,请联系我们。