《算法之美》读后感
无意间看到这本书,就被这本书的名字所吸引。之前读过《数学之美》,领略了数学的魅力,趣味性,以及在自然界中和数学规律相对应的现象等。之后的工作中,认识到了算法的重要性。任何在计算机上逐步完成的工作,只要可以清晰的定义步骤和顺序,那么就能把这个过程翻译成计算机可以懂的语言,让计算机自行完成这个过程,也就是算法。这可以在很大程度上提高效率。
带着以上印象,打开了这本书。这本书试图阐述计算机哲学对现实生活的指导意义。乍一听,有些意外,刻板的,人造的计算机都有哲学了,还能对现实生活,复杂的现实生活有什么指导意义?是有的。计算机技术发展到今天,计算机在很多事情的处理上对现实生活有借鉴意义,比如中央处理器对于资源,时间,任务优先级的分配,比如缓存的设置,比如模糊信息下的决策等。
数学家和物理学家的理想世界是把整个世界规划成整齐统一的线条,精确的描述周围的世界,用一个方程式表达世间万物所有的变化和未来趋势。然而现实情况足够复杂,数学家和物理学家的设想注定要在现实生活中行不通。这一段论述读来很有感触。我持有上述数学家和物理学家的理想很长时间,我擅长,习惯接触确定的,精确的事情。逻辑和道理是统一的,几乎没有特例。这也是为什么在化学的学习中充满了挫败感,化学是一门实验学科,尤其是有机化学,是完全建立在实验实践的基础上的。处处充满了特例,到处都是人名反应。工作之后,尤其是来到当前供应链的岗位上之后,这个感受还是很深刻的。那就是现实的生活,工作足够复杂,没有一成不变的准则。客户,产品,产地各有各的特点和特殊情况。没有一个方程式来表达供需关系。
37%最优停止理论,适用于租房,找停车位,股票脱手时机等场景。在这些场景中,存在一个平衡,在继续花费时间,精力来寻找,还是选择当前手上的机会,冒着错过最好的选择的风险。
探索和利用的平衡。在选择餐馆时,是选择已知的好吃的餐厅还是探索新的餐厅,如何掌握探索和利用的平衡,达到最优效果。这和剩余利用时间密切相关。在剩余利用时间比较多的时候,多花时间探索;而当剩余利用时间不多的时候,则应该多花时间来利用已经探索好的东西。老年人和年轻人的行为模式同样遵循着这样的规律。年轻人热衷于尝试新的事物。比如儿童对周围的世界充满了好奇,甚至把什么东西都愿意放到嘴巴里品尝味道。而老年人普遍守旧,只选择固定几样他们已经探索好的东西,在剩下不多的利用时间中,好好利用。年轻人的职业生涯发展也应该遵循这个规律。在刚开始工作的时候多尝试,发现比较适合或最适合的岗位,然后在这个岗位上发展下去。而不是刚开始工作,没有探索,就抱定了一条路走到底。
排序和搜索。如何花费最少的时间和精力获得搜索结果。预先排序是个选择方案,可以快速得到搜索结果,不过需要额外花费预先排序的世界,同时并不一定会用到这个预先排序的结果;另一个选择方案是不预先排序,搜索过程会慢一些,直到搜索时才临时排序。在群体中的排序中,量化衡量指标的建立,有助于减少内部冲突。群体稳定的状态建立在明确的次序的基础上,每个个体都清楚的了解哪些个体更强,哪些个体较弱。比如国际秩序的建立,GDP是个很好的指标,让每个国家都清楚自己的定位。如果没有这样的指标,就可能会有国家会发动战争来建立新的秩序。
缓存。计算机会通过缓存数据来提高运行效率。电商在终端仓库的缓存策略可以在很大程度上缩短送货周期。比如,京东在邢台市旁边建有仓库,当我在上海下单,给家里买东西时,就能从邢台仓库发货,实现第二天送达,这几乎和上海一样快。另外一方面,对于计算机缓存来说,缓存的内存是有限的。那么在内存接近容量上限时,就需要作出决定,舍弃哪些信息。舍弃哪些最近最少使用的信息是个有效的策略。哪些刚刚使用过的信息,很可能很快会再次使用。这对现实生活中物品,信息的整理同样有指导意义。
时间调度理论。时间调度中有几个策略适用于不同的场景。在处理平等的任务时,可以使用减少总的延迟时间的策略。另外一个策略是优先处理耗时较少的任务,来快速的降低未处理任务的数量。当任务有不同的权值时,优先处理权值密度高的任务。比如动物觅食的时候,会优先食用能量密度高的食物,这样能最快的获得所需能量,提高时间的使用效率。时间调度本身是个复杂的问题,目前还没有统一的完美解决方案。给特定的案例制定完美的调度方案也许会花费很多时间,这时不如利用减少总的延误时间或优先处理耗时较少的任务来开始处理任务。为了更有效的利用时间,提高效率,不应该在任务之间频繁的切换,这会带来额外的负担。尤其处理复杂的事情时,当思路中断后,需要花费额外的时间来找回思路。如果给计算机无数琐碎的事情做,那么那些重要的任务就会迷乱在混乱的系统中。番茄时间工作法是个很好的解决方案,固定一段时间来做单一的任务,排除其他干扰。
贝叶斯法则,预测未来。做预测时,首先需要判断预测食物的类别。是完全的无经验预测,还是对已知分布类型的食物做预测,会有不同的适用方法。正态分布,幂律分布,厄兰分布。幂律分布用于描述曲线快速下降,并带有长尾的分布,比如当给所有的财富排名,以财富数量为纵轴,名次为横轴时,曲线在开始阶段下降非常快,后续会变得平缓。厄兰分布用于描述类似于通话时长,在某一家公司的任职年限等。曲线在开始部分快速上升,达到峰值后,缓慢的下降,并带有一个长尾。当对厄兰分布进行预测时,往往在当前基础上加上一个常量。比如小张在公司里已经工作了4四年,当预测他什么时候会离开公司时,会给出一个常量,也许是三年。如果小李已经在这个公司10年了,当给出预测时,同样是3年后会离开公司。常量具体是多少要取决于具体的分布曲线。
过度拟合。应该避免过度拟合。当使用数据模型进行趋势预测时,模型本身对原始数据越敏感,那么模型的稳定性也就越差。现实中有很多过度拟合,片面追求KPI而偏离真实目的案例。比如三聚氰胺事件,奶粉含氮量是蛋白质含量的表征指标,而企业为了片面追求这个指标,在含氮量上投机取巧,在奶粉中加入三聚氰胺。王言如丝,其出如纶,是下属对领导的观点过度拟合的案例。预防过度拟合的方法也很简单,那就是交叉验证,使用不同的方法对同一个指标进行验证。在头脑风暴的时候,使用粗线条的记号笔来描绘想法,不拘束于细节,而灵活自由的表达发散的思维;而不是用细线条的圆珠笔,那样的话,注意力会集中在线条体现的细节上,会在一定程度上影响思维的发散。
松弛,顺其自然。在解决复杂的问题时,为了降低难度,可以先拿掉几个约束条件,先得到近似解,一个接近完美答案的解,也是一种解决方案。类似的情况包括婚礼上宾客座位的安排,邮递员的最优路线,体育赛事的赛程安排等。在化学计算中也有类似的情况。简化条件后,得到近似结果,这好过于没有结果。
随机性。对于某些复杂的问题,随机性能提供一些解决方案,不过可能需要在准确度上做出一些妥协。什么更能反映真实的情况呢。在脱贫的案例中,是官方公布的统计学数字,还是政府单方面精心挑选的案例,都不是。相比之下,在所有贫困户中随机挑选一家,采访真实情况,更能反映整体情况。接受随机性的信息推荐,有助于打破固有的知识框架,增加选择的多样性。接受这些随机性的建议,会尝试到一些原来不会主动选择的选项。比如书籍,酒,蔬菜的选择等。
指数退让算法。职场中的彼得原理。在一个稳定的组织架构内,经过足够长的时间,所有在中高层的员工都是不能胜任这个岗位的。这适用于描述所有具有等级结构的组织架构,包括政府,军队和商业领域。一个员工从底层开始工作,当表现优异时就会得到提拔,如果在新的岗位上依然优异,会再次得到提拔,一直提拔到一个他完全不能胜任的岗位上,并固定下来。细心观察公司里的组织架构,就会发现哪些人处于这个阶段,哪些人处于上升期。我们目前所认为的互联网实际上是很多协议的集合,主要内容是传输控制协议和数据包交换技术。在数据包交换过程中,和式增加,积式减少算法有助于快速将传输速度提升到宽带限制的水平并稳定下来。这个道理可以简单的描述为,计算机会先尝试传递一个数据包,当传递成功会就会增加一个,一直增加到不能成功传递,那就将传输速度将为之前的一半,并循环这个过程。
博弈论。公地悲剧。就像当前的中国教育,当所有孩子都是150%努力时,名次没有变化,没有改变结果,而每个孩子都损失了50%的时间用于玩耍。避免泡沫信息瀑布的方法是要有自己的判断,相信自己手上的信息,还不是猜测别人手上的信息。
读这本书的时候,很感兴趣我的手机号是不是质数。经过一番略显笨拙的探索,遗憾的发现并不是。手机号可以分解成三个质数的乘积,其中两个是211和1481
说明 · · · · · ·
表示其中内容是对原文的摘抄