吴军老师在谷歌方法论中谈到“少做事”的原则和好处。
总结了三点经验:
1. 少做事是提高效率的关键
2. 同样是做事,一流人才能找到更好、最好的方法,效率提升达到几十、几百倍,非常可观
3. 考察所学,看会不会应用,会用才是真正学到了
吴军老师为了说明“少做事好”,举了一个解数学题的例子。
题目:如何最有效地(指时间上的有效,即最短时间)在一个巨大的数字排列组合中找到中位数。
什么是中位数:在一组按顺序排列的数据中居于中间位置的那个数,即在这一组数列中,一半的数据比它大,另一半数据比它小。
因为中位数是“按顺序排列的一组数据中位于中间的那个数”,所以通常要找到中位数就要对数据先进行排序,然后就能找到中位数了。但是,题目的要求是“最有效、最快”,同时,是在一组“巨大的数字排列组合”(比如几亿个数字)中,对几亿个数据进行排序所消耗的计算资源是巨大的。
那么该怎么做到呢?
更加高效的方法是:划分法。即抽取数组中任意一个数,对数组进行划分,小的排左边,大的排右边,此时,通常左侧和右侧的数字个数不等,因为随机抽取的这个数不是中位数,接下来,对数字个数多的一侧的数字再进行划分,以此类推,就能找到中位数。这样的方法比起传统排序法,计算效率会提升几百倍。
传统排序法干了两件事
1. 给所有数据排序
2. 找出中位数
但是这里的目标仅仅是找到中位数,至于位于中位数两侧的数字之间的大小关系并不关心。
而划分法就只干了一件事:找到中位数
划分法示意:找到这组数字的中位数:1,-5,3,7,1000,2,-10
传统排序法:
1、先排序:-10,-5,1,2,3,7,1000
2、找到中位数:2
高效划分法:
A. 随机抽取一个数字,比如7,所有数据跟7对比,小的排左边,大的排右边,得到这样的数组:
1,-5,3,2,-10,7,1000
B. 然后对左侧继续划分,抽取数字3,得到数组:1,-5,2,-10,3,7,1000
C. 然后以1继续划分,得到数组:-5,-10,1,2,3,7,1000
D. 得到中位数2.
注意:此时,左侧数组中并不是按大小排列的,但不影响找到中位数2.
采用划分法,目标更加明确,且所有资源只用于解决那个最关键的问题,而不去理会其它次要问题。
少干一件事,把最重要的那件事做到最好,这是提高效率的关键。
从这个数学题所演示的“少做事的好处”,对你有没有启发呢?