算法随想
摘抄于《算法之道》省略若干字。
事实上,算法如人生,人生也如算法。它由许多过程所构成,又因这些过程而改变。虽然不能肯定结果正确,但求解过程却可以合理。透过算法的本质,我们可以看到芸芸众生,各色人相,多彩的生活。只要愿意,每个人都能寻找一个属于自己一生的独特“算法”,为自己的将来绘出一张或简单或复杂、或单调或反复、或直接或递归、或串行或并行、或随机或确定、或成功或失败(假如世界上存在所谓的成功和失败)的蓝图。
如果生活是一个难解的数学问题,那么,每个人都在寻找一个适合自己的算法。有人天生喜欢“遍历”,踏遍千山万水,遍享万种风情。扮演各种角色,希望人生丰富多彩;有人一生“贪婪”,眼界不宽,及时行乐;有人注定适用“穷搜”,辛辛苦苦勤勤恳恳一辈子,付出很多,收获有限;有人善用“时空权衡”,用最少的时间办最多的事情,的确精明;有人会“分治”,再多的难题也能迎刃而解;有人常“回溯”,错的太多,后悔太多;有的人压根没有算法,于是盲目生活,盲目做事,最后所获无几;有人“动态规划”,从而积小成多。
智者希望统筹兼顾,努力设计一个最优的人生。遇到一个大的工程,他们分而治之,治而合之。今天做一部分,明天做一部分,终究会做完。尽管有时效率不高,但总比一直放在那里,叹息发愁有意义。当一个问题的最优解,包含了子问题的最优解的时候,他们就选择动态规划,通过选择子问题的最优解,来构造源问题的最优解。
贪婪者希望运气长在,他们将每一次的选择缩小到一种贪心的选择。如果运气好,也许会成功;而在多数时候,却只会让人误入歧途。
智者千虑,必有一失。如果猛然发现自己做错了选择,不必恐慌,试试回溯吧,退回去,重新来过。在下一次的选择时,记得使用分支估界,从某些途径得到一些经验,来判断哪些路径不好。当然,我们也可以随机选择一些路径来实施,说不定能立竿见影。但总的来说,回溯不是万能的,人生的路,有时一旦走过,便无法返回。毕竟人生有限,频繁回溯,重做选择,就只有原地踏步的份了。分叉路口,做一个恰当的选择的确是困难的,在对与错、是与否、灵与肉、坚持与背叛、努力与放弃之间,我们需要细心。但一定要踏出下一步。至少,我们就可以知道它并不在这里。
有时候,生活中总会有那么一点无奈,无论你花多少力气,用多大的毅力,也不能产生效果。那是因为很多事情即使是可行的,也不一定是有意义的。所以聪明的人懂得用意念改变现实,用智慧区分可行和不可行,用信念辨别有意义和无意义。如果觉得生活太累,环节太多,试试跳转表吧,也许有些环节并不必须。如果觉得生活中某个步骤成本太高,试试平摊分析吧,也许我们别的步骤走得太过容易。如果时间珍贵,就试试完美哈希,直接将自己定位到目标上。不过记住,完美哈希并不完美,它的高昂代价也许你的灵魂承受不起。
智者用渐近分析获得问题的内在复杂性。当明了一个问题的计算时间下界,就可以评价解决该问题的各种算法的效率,进而确定对已有算法还有多少改进的余地。如果是P类问题,就奋力继续;如果遇到的是NPC,就找一个近似的最优解。就像大多数人都无法(不能或不愿)回避的找对象问题:每人的心中都有一个标杆(白马王子或白雪公主),想找到完全符合的并不容易,但也不能证明这个人不存在,这不就是NPC么?怎么解决?求近似解吧,在每一次的恋爱中逐步靠近那个标杆。
算法要求于至简。漫漫人生,相信每个人心中都有一个与生俱来的梦想,这是算法的灵魂——循环不变式。它或许会随着经历的不同而发生变化,但它在你心中的位置是不会变的。位置有远有近,到达的路途有平坦有崎岖,那又有什么关系?当你实现了最初的梦想,所有的循环终将定位在最美的一霎——那便是永恒不变的信念。
在人生的成长过程中,糊里糊涂的人过着糊里糊涂的生活,不知道自己离心中的那个位置是越来越近,还是渐行渐远。而聪明人算法庞大却精妙,因为他们常常反省自己,检查这个不变式,不断简化,每一步都坚定迈向至简,即便是 “劝君更尽一杯酒,西出阳关无故人” 的独自前行。
算法终将归于永恒。人生的算法林林总总。有人天生智慧、美丽,有人生来愚笨、丑陋。你并不需要为此庆幸、骄傲,或者伤心、气馁,甚至抱怨上帝的不公。这些是无用,也是不必要的。因为如果一个算法足够健壮,初始条件带来的影响几乎是微不足道的。我们感到疲惫不堪,精疲力竭和毫无乐趣的,通常并非繁重的人生,而是没有意义和希望的人生。因为“没有目标的算法无法向正确推进。”
不同的算法演绎不同的人生。它的影响不限于今世,而是达于另一个维度。世俗精彩过眼消散,万种风情终将逝去。意识到这点,我们突然发现,过去看重的很多活动,目标,追求,甚或其他问题,都突然显得微不足道和不值一提。我们会重新订立优先次序,将算法的目标锁定为永恒做准备,升华我们的灵魂。因为这个算法将是我们面对造物主的终极答卷。
一花一世界,一叶一菩提。算法,一段神奇的代码,演绎一段传奇的人生,锁住一段永恒的痕迹。理解算法、把握人生,让我们用算法的一生,刻印下我们一生的算法,在没有时间的星空循环往复,留下我们那 “莫愁前路无知己,天下谁人不识君!”的不灭印记。这就是求于至简,归于永恒的境界……