算法这个词,是最近这几年越来越热的一个词,尤其是大数据、人工智能这些概念背后,都离不开一个算法。受小学教育的影响,那个时候的数学课又被成为“算数课”,所以我最初看到算法这个词,眼前浮现的就是一堆数学公式,再加上天书一般的计算机代码,感觉很复杂。但是随着在各种场合下学习到这个概念,尤其是在读了《算法之美》这本书之后,我发现,真正好的算法,都是简单而又明了的,正所谓“大道至简”。算法,也不仅仅是计算机领域的专有名词,在我们的生活中,处处都有算法在指导着我们的行为。 算法一:最优停止理论——37%
我记得有一个很流行的故事,说的是某个大哲学家让他的两个弟子去一片玉米地里,分别找一个最好的玉米带回来,条件是只能往前走,不能回头,而且一旦选好就不能再选了。于是有一个弟子很快的选了一个,但是发现其实还有很多更好的玉米;而另外一个弟子因为怕选错,一路纠结,最后走完整个玉米地却空手而回。这个故事反映的问题,在生活中经常会遇到。在做某些选择的时候,你不可能把所有的选项全部考察一遍再做决定。那么,究竟应该在什么时候停止对候选项的考察,而做出选择呢?现在科学家给出了一个准确的答案,那就是37%。这个就是最优停止理论。
比如你准备租一套房子,准备考察最多100套房子。那么最佳的行动方案就是在前37套的时候,只看不租,记下这37套房子中的最优选择。然后从第38套开始,只要看到比前边37套都要好的房子,就立刻下手。同样的方法,也可以用在招聘、停车等生活场景中,甚至是选择终身伴侣。
当然,事情并非这么简单,关于这个最优停止理论,其实还有很多因素会影响37%这个数字。比如37%的前提是你在做出选择的时候,不会被拒绝,但是如果又被拒绝的可能,怎么办?37%还有一个前提是你不能回头选择已经考察并淘汰了的选项,但是如果你可以回头选择之前考察过的选项,那又该怎么办?还有一个最关键的难点在于,
你打算考虑最多多少种可选方案,这个数字将决定37%这个节点的位置。比如在租房案例中,你首先要确定自己最多打算看50套还是100套房;在招聘的案例中,你打算最多考察多少个候选人;如果用在选择终身伴侣的时候,你要确定自己打算最晚什么年龄一定要结婚。这些变化相应采取的策略都有不同,在《算法之美》这本书里都有详细的论述。
需要明白的是,我们不能指望有了这个37%,我们今后再面临类似问题的时候,就一定能得到最优解,因为这里面还是有个概率的问题。算法并不保证你一定能得到最佳结果,它只是告诉你得到最佳结果的最大概率应该怎么做。它的作用是,下次你被人牵到一片玉米地前的时候,不至于茫然无措。 算法二:最好与最新之间,怎么选?
当你饥肠辘辘的时候,你会去熟悉的那家西北菜馆,还是附件新开张的湖南菜?当你闲来无事的时候,你会找几个亲密朋友喝咖啡,还是去参加读书会认识新朋友?每天,我们都要做出各种各样的决定,都要在某个非常具体的方面做出选择:是进行新的尝试,还是继续选择我们喜欢的那个?直觉告诉我们,生活就是在新鲜事物和传统事物之间、在最新的和最棒的之间、在勇于冒险和安于现状之间取得平衡。多年来,计算机科学家一直在寻找这个平衡点,他们还把这个问题专门取了个名字,叫做:探索和利用的取舍。
所谓探索,就是一个收集信息的过程;而利用,则是指利用所拥有的信息,以产生一个好的结果。在所有影响这个问题的因素中,最重要的一个因素就是你剩余的时间。
当我们刚刚来到一个城市定居,我们一定喜欢尝试各个没去过的餐馆,探索没去过的街道。但是假如我们明天就要离开这个城市去另外一个地方生活,理智的选择一定是去自己最喜欢的餐厅享受在这里的最后一顿晚餐。我们通常都知道,年轻人喜欢探索和冒险,而老年人的做事方式往往一成不变。事实上,这两种行为方式都与其各自剩余的时间高度一致。
理解了剩余时间在探索和利用问题上的作用,我们还可以理解很
多有趣的现象。比如在电影业,1981年的时候,好莱坞票房排名前10的电影中,只有2部是续集,到了2011年,这个数字上升为8部。我们看到《速激8》、《复联3》、《钢铁侠3》、《蚁人2》等等等等,这说明电影业已经像一个老年人一样,开始安于现状,享受前期探索带来的成果。这是否是电影业已经日薄西山的一个间接反映呢?再比如现在很多互联网公司都喜欢搞的A/B测试,也就是在其网站或者APP上针对同一种功能呈现几种不同的界面,分别推送给随机分配的用户人群,通过用户对不同界面的反应来确定哪一种界面效果最好。这实际上就是一直探索和利用。在这里,你不再是那个探索的发起者,而是一个被探索的对象。而且,这种探索不会停止,你每一次打开网页或者APP,你眼前的色彩、图片、文本甚至定价,肯定都是探索和利用算法根据你的每一次点击为你量身定制的。 算法三:缓存是个什么东西?
生活中的你每隔一段时间大概都会碰到这样一个问题:衣柜里的衣服又塞满了。你会想:“该整理一下了。”这时,你就会面临两个问题:哪些衣服需要保留,以及如何摆放?其实,类似的问题在计算机领域是一个非常重要的课题。衣柜整理和计算机存储器管理所面临的问题非常相似:空间有限,而目标是节省金钱和时间。那么,计算机科学家们是怎么来解决这个问题的呢?他们利用缓存。
我们知道计算机硬件中,各类存储器的性能各有不同,有的空间大但是速度慢,有的空间小但是速度快。于是科学家们建立了“分级存储体系”来实现在速度和存储空间之间的动态平衡,也就是最接近使用端的存储是速度最快容量小的,然后越往上存储容量越大,但是读取速度也会越慢。实际上在生活中,我们经常在利用这个”分级存储体系“所建立的”缓存“来做事。比如有些人喜欢到图书馆搜集资料,并把其中有用的资料借回家,以便随时查阅。这时,家就成了图书馆的”缓存“。图书馆虽然藏书量大,但是去一趟耗时费力。选择其中一部分书籍放到家里,取阅方便,但是在看完之后,或者在需要新的资料的时候,你需要换一批书来借阅。因此,针对缓存,最重要的问题就是如何对它进行清理或替换。
在计算机领域通常有三种方法:1.随机清理原则,这当然是一种最直接的方法。2.先进先出原则,也就是我们在整理衣柜的时候经常会问的一个问题:“这衣服我已经买了多久了?”3.最近最少使用原则,就是我们问的另外一个问题:“我有多长时间没穿这件衣服了?”大多数人一定猜到了,第三种方法相比之下是最有效的一种方式,这缘于计算机科学家们所谓的“时间局部性”:即如果一个信息最近被调用,那么它很有可能在不久的将来被再次调用。科学家从这个原则基础上,得出了对于文件归档的最佳处理办法,那就是——不必刻意整理。也就是说,你每次用完一个文件,把它随意的放到文件堆的最顶端,这种看似杂论无章的摆放,却是一种最优策略,是你在无法预测未来时可以采取的最有效的做法。我们终于为自己不整理办公桌找到了理论依据。
总结:为什么我们需要“算法”?
在《算法之美》这本书里,还有很多“神奇的”算法,比如说关于排序,关于时间管理,关于网络联系,关于博弈论,等等,都与我们的生活密切相关。通读这本书之后,我对算法的含义有了更深的理解。我觉得所谓“算法”,其实就是一些指导性的原则,但是这些原则不是那些比较宏观的大道理,而是一些具体的,具备可执行性的原则。有些算法,本身就是一个具体的流程,按照这个流程来执行,你就会得到相应的结果。
为什么我们需要算法呢?我觉得算法就像我们学的数学公式一样,把复杂的问题简明化,也相当于建立了一种快捷方式。好的算法,会帮助我们在面对复杂问题的时候,快速形成思路,做出决策,而不再是凭感觉,碰运气。
当然,凡是提炼,必有缺损。算法在提炼解决问题的核心思路的时候,必然会删除掉一些不太重要的因素,但是这些因素在某些情况下或许会转变成重要的因素。因此,当我们在认知中建立算法的同时,还要时刻留意这些快捷方式有可能带给我们的认知偏误或者残化。正
所谓:“算法虽好,亦不可贪杯啊”。
愿你在把强大的算法装进脑子里的同时,也可以不受算法的约束,并始终保持与算法一起迭代的能力。这样你便可以与算法共舞的同时,也可欣赏算法之美。
因篇幅问题不能全部显示,请点此查看更多更全内容