七君
大家有沒有想過,平時路上的灑水車、鏟雪車是怎么規(guī)劃行車路線的呢?
有人會說,這還不簡單,哪兒沒有跑過就去跑一遍不就行了。這種方法的確能保證所有的道路都被打掃了,但是車子可能會在某幾段馬路上重復(fù)開,損失燃油和時間。
掃馬路車、灑水車、鏟雪車這類問題在數(shù)學(xué)上屬于“中國郵差問題”,早在20世紀(jì)70年代就有了靠譜的解法。
這還要從1962年說起。當(dāng)時,毛主席鼓勵科學(xué)家們用科學(xué)解決日常生活中遇到的問題。我國數(shù)學(xué)家管梅谷就想到了這樣一個問題:一個郵差走遍每條街道去送信,最短路徑應(yīng)該是什么樣的?后來,美國數(shù)學(xué)家AlanJ. Go l dman把這個問題命名為“中國郵差問題”。
到了1973年,加拿大滑鐵盧大學(xué)的數(shù)學(xué)家Jack Edmonds和IBM研究院的計(jì)算機(jī)科學(xué)家Ellis L. Johnson提出了一個至今無人超越的有效算法。他們的算法要涉及300年前的一個人,那就是歐拉。
其實(shí),歐拉在1735年就研究過一個和管梅谷類似的問題——七橋問題,并得到了一些重要的結(jié)論。
七橋問題和我們小時候玩的一筆畫的益智問題類似:在普魯士的柯尼斯堡有兩個小島,兩個小島和附近一共有7座橋連通?,F(xiàn)在問題來了,怎樣規(guī)劃路線才能恰好經(jīng)過每一座橋一次?
第二年,歐拉發(fā)表了一篇論文,證明七橋問題不可解,原因是他給出了能解的一般條件,那就是每塊地都必須有偶數(shù)座橋,而七橋問題不符合這種情況。這類問題在數(shù)學(xué)上發(fā)展成了圖論和拓?fù)鋵W(xué)。而因?yàn)闅W拉的開創(chuàng)性貢獻(xiàn),能夠一筆畫的圖被叫作歐拉圖,能一筆畫的路徑被叫作歐拉路徑。
七橋問題等價于下面這個圖形。歐拉證明,只有當(dāng)奇頂點(diǎn)的數(shù)量等于0或2時,才存在一筆畫。七橋問題的奇頂點(diǎn)(藍(lán)點(diǎn))的數(shù)量等于4,因此無法一筆畫。
歐拉還證明了一張圖能一筆畫的一般情況:奇頂點(diǎn)(也就是邊的數(shù)量是奇數(shù)的頂點(diǎn))的數(shù)量等于0或2。所以按照歐拉證明的定理,中文的“串”就可以一筆寫成,因?yàn)樗钠骓旤c(diǎn)只有最上面和最下面兩個。
把歐拉證明的結(jié)論推廣到中國郵差問題的情況,最難搞定的是奇數(shù)分叉的道路,遇到三岔路口、五岔路口,走回頭路幾乎是必然的。
所以Edmo n ds他們的算法是,把奇數(shù)路口拎出來單獨(dú)算,找到這些路口間的最短路徑;而偶數(shù)岔路之間必然存在只走一次的方法,最后把兩部分拼起來就可以了。但是呢,實(shí)際生活中掃馬路、灑水和鏟雪要比這復(fù)雜得多。比如,高速公路的整潔對司機(jī)的生命財(cái)產(chǎn)安全更重要,所以要早點(diǎn)清掃完畢;一些路段是單行線,或者對大型車輛限行。此外,“郵差”也不止一個人,清潔車之間的交接班也要考慮在內(nèi)。因此在現(xiàn)實(shí)生活中,“中國郵差問題”很難找到最優(yōu)策略,這也是為什么一開始Edmonds的算法沒有得到廣泛應(yīng)用。
隨著計(jì)算機(jī)技術(shù)的進(jìn)步,一些數(shù)學(xué)家開始嘗試把中國郵差問題應(yīng)用到日常生活中。比如,明尼蘇達(dá)大學(xué)的數(shù)學(xué)教授Peh Ng就曾用圖論的思想幫明州莫里斯市政府規(guī)劃冬季的鏟雪線路。
而從2001年開始,北美的一些大城市就開始用比較成熟的軟件,如ArcGIS來規(guī)劃鏟雪車的行車路徑。這些軟件一般會把一大塊城市交通網(wǎng)分割成一小塊一小塊的,然后分別再進(jìn)行計(jì)算。比如,多倫多在用圖論原理對鏟雪線路進(jìn)行規(guī)劃后,鏟雪費(fèi)用比之前減少了三分之一,每年節(jié)省了大約300萬美元(約合人民幣2000萬元)。
除了道路養(yǎng)護(hù),中國郵差問題的算法在很多領(lǐng)域還有應(yīng)用。比如,在交互設(shè)計(jì)時,中國郵差問題就被用于終端產(chǎn)品的可用性檢測。舉個例子,一個手機(jī)被制造出來以后,手機(jī)制造商想要看看每個功能是不是和名稱相符。比如,按下主鍵,點(diǎn)開“設(shè)置”,再點(diǎn)開“網(wǎng)絡(luò)”,是不是真的會出現(xiàn)網(wǎng)絡(luò)設(shè)定功能。
因?yàn)槭謾C(jī)的功能很復(fù)雜,不同功能之間形成的網(wǎng)絡(luò)要怎樣才能有效地走個遍,這個問題有時連制造商也搞不太明白。1996年諾基亞出的2110的菜單有88個項(xiàng)目,一共有273種操作。如果隨便按,可能一些菜單永遠(yuǎn)也不會得到檢測。但是利用中國郵差問題的算法就能規(guī)劃測試路徑和計(jì)算步驟數(shù)量了:最少只需要按594次鍵盤按鈕,就可以把所有的菜單和功能都過一遍。
//摘自把科學(xué)帶回家微信公眾號,本刊有刪節(jié)/