计算思维三大关:递归、分治、平衡
递归
递推思维方式:
针对小量级数字,从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--云计算