吴军老师的《计算之魂》部分重点摘要

Posted 数据人阿多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了吴军老师的《计算之魂》部分重点摘要相关的知识,希望对你有一定的参考价值。

递推 vs 递归

递推

我们都熟知的正向思维,从前往后、从小到大、由易到难、由局部到整体
比如5的阶乘,要从小到大一个个乘起来,即 5!= 1 × 2 × 3 × 4 × 5

这种计算思维是我们从小学到初中,到高中一直培养的习惯,甚至到现在的编程算法,我们大部分人也是运用这种思维来解决问题,比如大家面试经常遇到的问题,要求编写一个斐波那契函数f(n),计算给定 n 的函数值


递归

递归属于逆向思维,需要倒过来思考问题,从大到小、由整体到局部的思维,例如上面求 5 的阶乘,先假定4!是已知的,然后再乘以 5 即可。当然,大家会问,那 4! 怎么计算呢? 很简单,采用同样的方法,3!× 4,只要计算出 3!乘以 4 即可。同样的方法,来计算 3!,直到最后的 1!,我们知道它就等于 1 。接下来,就是倒推回所有的结果,从 1!、2!一直倒推回 5!

递归的思想有两个明显的妙处:
1、只要解决当前一步的问题,就能解决全部的问题
2、复制同一个过程,就能得到结果

要把问题通过递归的细想来解决,必须满足两个前提条件:
1、每一个问题在形式上都是相同的,否则无法通过同一个过程完成不同阶段的计算(也就是必须要满足过程可复制)
2、必须确定好结束条件,否则就像 “从前有座山” 那个故事里的情节,永远无法结束

吴军老师的原话:很多人在学计算课程时非常不喜欢递归这种不直观的逆向思维,觉得像阶乘运算这种从小到大一个个相乘就可以了,何必那么复杂地倒着计算呢?原因很简单,很多问题只有倒着才能想清楚。这一关如果过不了,在计算机领域做一辈子技术也出不了师

小编见解:递归的思维,用到的地方其实很多,比如,数据分析里面,我们正着去分析可能就不通,但我们反向去思考可能就解决了


信息编码的重要性

计算机中的所有内容都是以二进制进行编码的,比如看到的文字,在硬盘、内存、网络传输时中都是以编码形式存储的,如我们熟悉的UTF-8编码,还有最开始学计算机编程时了解的ASCII (American Standard Code for Information Interchange) 等,都是编码在计算机中的应用。信息的编码和有效表示是计算机科学和工程的基础,所以我们要理解这些基础的原理,这样有助于我们深入了解计算机。

当然,二进制编码对于人类来讲很不直观,便产生了很多便于人类辨识的等价代码,比如在MIPS处理器中,用 001000 代表加法运算,如果这样写程序几乎没有人能记住,出错也很难以检查,于是人们就将 ADD 这三个字母和 001000 这条代码对应起来。

下面以书中的案例,来更深入的向大家介绍编码的重要性,这道题 吴军老师说也是面试题,大家不妨把自己当作面试者,也一起思考下怎么来解答

案例—分割黄金问题:
泰勒是一位雇主,雇用鲍尼为自己新建的房子铺设院子里的地砖,这是一个七天工作量的活。泰勒答应一共支付一根金条作为报酬,但是鲍尼每天支付他 1/7 的工资,泰勒答应了。现在,请问你如何在金条上切两刀,保证每天正好能支付鲍尼 1/7 的工资?

(思考2分钟,再往下看)

小编看了这道题也没有想出来怎么切分,但看了答案感觉确实妙不可言,里面巧妙的运用了编码的思想,下面就给出答案

在金条的 1/7 的地方切一刀,在 3/7 的地方再切一刀,这样金条就变成了三个小金块,质量分别是 1/7、2/7、4/7 的金条质量。接下来,我们就要用1、2、4 这三个数字表示出 1 ~ 7 这七个数字,具体的表示方法如下:
1 = 1
2 = 2
3 = 2 + 1
4 = 4
5 = 4 + 1
6 = 4 + 2
7 = 4 + 2 + 1

利用上面的公式,在发工资时,泰勒第一天给鲍尼 1/7 金条质量的那一块黄金;第二天给鲍尼 2/7 的那一块,并要求对方交回先前 1/7 的那一块;第三天,再给鲍尼 1/7 的那一块,这样鲍尼就得到了 3/7 金条质量的黄金;第四天,给鲍尼 4/7 的那一块,但是要求他将之前给的那两小块金条交回;…到了第七天,把所有的黄金都给鲍尼即可。

这道题解法的关键是 1、2、4 这三个数字能够表达 1 ~ 7 的所有数字。那为什么 1、2、4可以呢?因为它们分别是二进制的 “个位数”、“十位数”、“百位数”。因为二进制只有 0、1 两个数字,所以每一个进位是 0 或者是 1 的组合,就能表示各种数字。我们不妨再用二进制把前面七个等式重写一遍就一清二楚了(二进制以 0b 开头)
1 = 0b001
2 = 0b010
3 = 0b011 = 0b010 + 0b001
4 = 0b100
5 = 0b101 = 0b100 + 0b001
6 = 0b110 = 0b100 + 0b010
7 = 0b111 = 0b100 + 0b010 + 0b001

通过这道案例题,大家是不是对编码有了更进一步的了解,原来编码这么重要,其实大家在编程时可能已经运用过,只是没有深入思考而已,以下摘自微软开发者文档,文件的操作:



以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号:DataShare ,不定期分享干货

《浪潮之巅》读后感

《浪潮之巅》这本书之前我从未接触过,甚至听都没听过,毕竟我的专业与计算机类无关,也没有把太多精力放在计算机软件上。何况恐怕即使看了也会有好多的专业名词不懂,那就很无奈了,所以更加不敢碰它。

直到老师的讲解和推荐,我才敢去尝试一下和计算机类的图书接触。《浪潮之巅》?!应该有点意思吧。

《浪潮之巅》这本书是吴军博士撰写的,吴军博士在计算机界应该算是很厉害的存在了,毕业于清华大学计算机系(本科)、电子工程系(硕士)和美国约翰·霍普金斯大学计算机科学系(博士)。他在谷歌任职多年,中途转战腾讯,而后又回到了谷歌他在“搜索引擎”方面有杰出的贡献。吴军不但是一个科学家,对商业领域也有自己独特的观察。

吴军博士撰写《浪潮之巅》梳理了IT产业发展的历史脉络,叙述了美国硅谷明星公司的兴衰沉浮。通过对各大公司从技术轨迹到经营理念的剖析,向读者展现的并不只是一幅有关科技产业更迭和大公司成长规律的历史景观,而是为了让中国的读者能更真实地了解美国、了解科技产业。从而以此理解科技创新和商业公平在美国文化生活中的深刻意义。

吴军博士在《浪潮之巅》的前言中说道:“近一百多年来,总有一些公司很幸运地、有意识或者无意识地站在技术革命的浪尖之上。一旦处在了那个位置,即使不做任何事,也可以随着波浪顺顺当当地向前漂个十年甚至更长的时间。在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。”

“从一百年前算起,AT&T公司、IBM公司、苹果(Apple)公司 、英特尔(Intel) 公司、微软(Microsoft) 公司、思科(Cisco)公司、雅虎(Yahoo)公司、惠普(HP)、摩托罗拉(Motorola)公司和谷歌(Google)公司都先后被幸运地推到了浪尖。虽然,它们来自不同的领域,中间有些已经衰落或者正在衰落,但是它们都极度辉煌过。它们都曾经是全球性的帝国,统治着自己所在的产业。”同样吴军博士也在《浪潮之巅》这本书中一一地介绍了这些公司成功的本质原因以及科技工业一百多年的发展。

在极度商业化的今天,科技的进步和商机与大学教育是分不开的。吴军博士也在书中介绍了风险投资公司、百年来为科技捧场的投资银行以及开创硅谷产业集群的大学——斯坦福大学,详细地介绍了它的历史和教育理念。

这本书的确很“厚重”,一共有23个章节,但每一章节下分的条目也很详细,不会显得杂乱无章,几十页纸就把一个公司的兴衰成败呈现了出来。书中依次介绍了AT&T公司、IBM公司、苹果公司 、英特尔公司、微软公司、思科公司、雅虎公司、惠普公司、摩托罗拉公司和谷歌公司,这些大牌公司的诞生与衰败。吴军博士剖析的很彻底,分析的也很到位,不得不赞叹吴军博士对科技以及商业的高深的理解。

而书中出现的很多定律,包括摩尔定律、反摩尔定律以及安迪-比尔定律,听起来似乎是很高大上的东西,可是吴军博士解释的很详细,也并不像数学定理那般生涩难懂,虽然我并不了解计算机的很多东西,但我也能明白这些定律的意思甚至它所代表的意义,以及现实生活中的应用。

除此之外,我也渐渐明白了:在这些公司兴衰的背后,有着它必然的规律。和世界上所有事物的规律一样,科技行业的规律性也是可以认识的。《浪潮之巅》不仅仅是在讲述科技工业的历史,更是在揭示它的规律性。而对于我们每一个人来讲,最幸运的莫过于在自己年轻力壮的时候,能认识到万物以及历史发展的规律性,认识到自己的使命。

这不仅仅是一本关于互联网发展的读物,更能当做一系列当代企业管理的案例分析,其中的任何故事事例,都能够作为那些在商业中拼搏的人们学习的案例,商场也是战场,胜者为王败者寇,胜利固然可喜,但我更加欣赏那些在这场长久战争中激烈搏杀,最终倒下的企业,因为他们奠定了现在优秀企业,为人类的发展铺平了道路。虽然没有能够存活至今,但后来者踩着他们的肩膀,看的比原来更远,走的更长。没有他们的付出,那些胜者也就没有今日的辉煌。

我只能说,《浪潮之巅》这本书真的没有白读。

以上是关于吴军老师的《计算之魂》部分重点摘要的主要内容,如果未能解决你的问题,请参考以下文章

本周上榜的这9本原创技术书很赞,《数学之美》作者吴军博士新书霸榜

编程书籍:豆瓣评分8.0以上,2021年程序员新书大盘点

写给吴军老师的信

两件小事,感受到了和大神的差距

吴军亲述编程生涯:不用低效率的算法做事情

2022年程序员开工第一周,应该收藏这样一份书单