標題中的random walk,中文通常翻譯成「隨機漫步」。既然有random這個字,可想而知,就會牽涉到亂數,而一看到亂數這兩個字,就知道免不了要拿個銅板丟一丟。不過,丟銅板跟走路要怎麼結合成「隨機漫步」呢?方法其實挺簡單的,先從最簡單的一維空間做起,再推展到二維空間。
一維空間指的是單一的直線,所以就只能向前走或向後走。銅板有正反兩面,那就規定正面代表向前走一步,反面代表向後走一步。既然每次丟銅板得到的正、反面結果是隨機的,根據這隨機的結果來向前走或向後走,當然就是隨機漫步了。
挺簡單的,不是嗎?一維隨機漫步的演算法就是這麼簡單。不過我們應該自問一下,有沒有什麼地方考慮得不完整的?我們規定正面向前走,反面向後走,那如果倒過來,規定正面向後走,反面向前走,這樣還是隨機漫步嗎?
很顯然的,既然丟銅板的結果是隨機的,那不管正、反面的走法怎麼規定,只要自始至終從一而終的按照規定走,最後就會是隨機漫步。這個結論在接下來的二維隨機漫步中,一樣會成立。
現在就來看看二維的隨機漫步要怎麼做。
二維空間是個平面,除了向前、向後走之外,還可以向左、向右走,所以總共會有四個方向可以走。丟銅板時,如果每丟兩次一組,那剛好會有正正、正反、反正、反反這四種排列組合。所以,如果規定一種組合對應一個方向,就可以隨機漫步了。
當然啦,就如同在一維隨機漫步中得到的結論一樣,正、反組合和行走方向間的對應關係,並不會影響最後的結果,只要從一而終,最後就是會隨機漫步。
除了一個銅板每丟兩次一組的做法外,也可以一次丟兩個銅板,結果同樣會有四種排列組合。至於要用一個或兩個銅板來做,就青菜蘿蔔各有所好,但憑個人喜好!
隨機漫步看似簡單,但卻是模擬許多自然界現象的基礎,相關的觀念及程式實作方式,對於瞭解這本書中會一再用到的亂數、機率、Perlin noise等工具,會有相當大的幫助。