算法隨想
摘抄于《算法之道》省略若干字。
事實上,算法如人生,人生也如算法。它由許多過程所構成,又因這些過程而改變。雖然不能肯定結果正確,但求解過程卻可以合理。透過算法的本質,我們可以看到蕓蕓眾生,各色人相,多彩的生活。只要愿意,每個人都能尋找一個屬于自己一生的獨特“算法”,為自己的將來繪出一張或簡單或復雜、或單調或反復、或直接或遞歸、或串行或并行、或隨機或確定、或成功或失敗(假如世界上存在所謂的成功和失敗)的藍圖。
如果生活是一個難解的數學問題,那么,每個人都在尋找一個適合自己的算法。有人天生喜歡“遍歷”,踏遍千山萬水,遍享萬種風情。扮演各種角色,希望人生豐富多彩;有人一生“貪婪”,眼界不寬,及時行樂;有人注定適用“窮搜”,辛辛苦苦勤勤懇懇一輩子,付出很多,收獲有限;有人善用“時空權衡”,用最少的時間辦最多的事情,的確精明;有人會“分治”,再多的難題也能迎刃而解;有人常“回溯”,錯的太多,后悔太多;有的人壓根沒有算法,于是盲目生活,盲目做事,最后所獲無幾;有人“動態規劃”,從而積小成多。
智者希望統籌兼顧,努力設計一個最優的人生。遇到一個大的工程,他們分而治之,治而合之。今天做一部分,明天做一部分,終究會做完。盡管有時效率不高,但總比一直放在那里,嘆息發愁有意義。當一個問題的最優解,包含了子問題的最優解的時候,他們就選擇動態規劃,通過選擇子問題的最優解,來構造源問題的最優解。
貪婪者希望運氣長在,他們將每一次的選擇縮小到一種貪心的選擇。如果運氣好,也許會成功;而在多數時候,卻只會讓人誤入歧途。
智者千慮,必有一失。如果猛然發現自己做錯了選擇,不必恐慌,試試回溯吧,退回去,重新來過。在下一次的選擇時,記得使用分支估界,從某些途徑得到一些經驗,來判斷哪些路徑不好。當然,我們也可以隨機選擇一些路徑來實施,說不定能立竿見影。但總的來說,回溯不是萬能的,人生的路,有時一旦走過,便無法返回。畢竟人生有限,頻繁回溯,重做選擇,就只有原地踏步的份了。分叉路口,做一個恰當的選擇的確是困難的,在對與錯、是與否、靈與肉、堅持與背叛、努力與放棄之間,我們需要細心。但一定要踏出下一步。至少,我們就可以知道它并不在這里。
有時候,生活中總會有那么一點無奈,無論你花多少力氣,用多大的毅力,也不能產生效果。那是因為很多事情即使是可行的,也不一定是有意義的。所以聰明的人懂得用意念改變現實,用智慧區分可行和不可行,用信念辨別有意義和無意義。如果覺得生活太累,環節太多,試試跳轉表吧,也許有些環節并不必須。如果覺得生活中某個步驟成本太高,試試平攤分析吧,也許我們別的步驟走得太過容易。如果時間珍貴,就試試完美哈希,直接將自己定位到目標上。不過記住,完美哈希并不完美,它的高昂代價也許你的靈魂承受不起。
智者用漸近分析獲得問題的內在復雜性。當明了一個問題的計算時間下界,就可以評價解決該問題的各種算法的效率,進而確定對已有算法還有多少改進的余地。如果是P類問題,就奮力繼續;如果遇到的是NPC,就找一個近似的最優解。就像大多數人都無法(不能或不愿)回避的找對象問題:每人的心中都有一個標桿(白馬王子或白雪公主),想找到完全符合的并不容易,但也不能證明這個人不存在,這不就是NPC么?怎么解決?求近似解吧,在每一次的戀愛中逐步靠近那個標桿。
算法要求于至簡。漫漫人生,相信每個人心中都有一個與生俱來的夢想,這是算法的靈魂——循環不變式。它或許會隨著經歷的不同而發生變化,但它在你心中的位置是不會變的。位置有遠有近,到達的路途有平坦有崎嶇,那又有什么關系?當你實現了最初的夢想,所有的循環終將定位在最美的一霎——那便是永恒不變的信念。
在人生的成長過程中,糊里糊涂的人過著糊里糊涂的生活,不知道自己離心中的那個位置是越來越近,還是漸行漸遠。而聰明人算法龐大卻精妙,因為他們常常反省自己,檢查這個不變式,不斷簡化,每一步都堅定邁向至簡,即便是 “勸君更盡一杯酒,西出陽關無故人” 的獨自前行。
算法終將歸于永恒。人生的算法林林總總。有人天生智慧、美麗,有人生來愚笨、丑陋。你并不需要為此慶幸、驕傲,或者傷心、氣餒,甚至抱怨上帝的不公。這些是無用,也是不必要的。因為如果一個算法足夠健壯,初始條件帶來的影響幾乎是微不足道的。我們感到疲憊不堪,精疲力竭和毫無樂趣的,通常并非繁重的人生,而是沒有意義和希望的人生。因為“沒有目標的算法無法向正確推進。”
不同的算法演繹不同的人生。它的影響不限于今世,而是達于另一個維度。世俗精彩過眼消散,萬種風情終將逝去。意識到這點,我們突然發現,過去看重的很多活動,目標,追求,甚或其他問題,都突然顯得微不足道和不值一提。我們會重新訂立優先次序,將算法的目標鎖定為永恒做準備,升華我們的靈魂。因為這個算法將是我們面對造物主的終極答卷。
一花一世界,一葉一菩提。算法,一段神奇的代碼,演繹一段傳奇的人生,鎖住一段永恒的痕跡。理解算法、把握人生,讓我們用算法的一生,刻印下我們一生的算法,在沒有時間的星空循環往復,留下我們那 “莫愁前路無知己,天下誰人不識君!”的不滅印記。這就是求于至簡,歸于永恒的境界……