计算之魂(吴军老师)读书笔记(一)

392 阅读2分钟

计算思维三大关:递归、分治、平衡

递归

递推思维方式:

针对小量级数字,从12345推到100。

递归思维方式:

计算机面对的是大量级问题,上百万上亿,很难通过递推解决问题。

计算机实际解决问题的思路是从顶向下,事先解决中间的问题;假设中间问题解决,再通过比较简单的方式解决大问题;而中间的问题由分解的更小的问题去解决。

两个思维比较分析

抢20问题,两个人从0开始累加数字,每个人每次选择+1 or +2,最后得到20,共有多少种获胜的可能?

用递归得思路考虑:起码上千种方式,很复杂。

用递归的思路考虑:如果想要抢到20,需要先抢到17,此时无论对方+1 or +2,都是己方赢;如果要抢到17,需要先抢到14,此时无论对方+1 or +2,都是己方抢到17;....最后发现只要抢到2,就能赢。

吴军老师认为: 一个人能不能在计算机行业发展,首先看有没有递归思维,是第一关。

分治

核心思想:把大的,复杂的问题分解成小的问题。

举例1:归并排序的算法思想

算法思想:一个数组排序,两两比较的时间复杂度是n平方;如何把数组分成两半,每个两两比较排序,复杂程度降低1/4;

举例2: 大矩阵的乘法,百万级别

怎么分解成小的任务去处理

Trade-off

很多算法没有绝对的平衡,需要考虑使用多少资源,需要平衡各个资源的使用情况。

比如存储hierarchy

寄存器--缓存(一级/二级/三级)--内存--磁盘/硬盘/SSD--云计算