第一百三十四章 歐拉路徑遍歷理論(計(jì)算)
歐拉笑著對拉格朗日說:“你知道學(xué)習(xí)的本質(zhì)是什么嗎?”
拉格朗日不解歐拉的意思。
歐拉說:“就是遍歷?!?p> 拉格朗日在想人的學(xué)習(xí)當(dāng)然是按部就班來的,但歐拉的意思沒那么簡單,也或許是更簡單到一般人不敢如此去想。
拉格朗日說:“就是看書需要一頁一頁來?”
歐拉對拉格朗日說:“你指的是人的看書學(xué)習(xí),而我指的是本質(zhì)?!?p> 拉格朗日不解的說:“你說的意思也有動(dòng)物?或者是嬰兒?還是機(jī)器人?”
歐拉說:“為了讓你理解這個(gè)意思,告訴你這時(shí)一種自動(dòng)化算法,你可以理解城機(jī)器人,當(dāng)然人也好,動(dòng)物也好,嬰兒也好,也是這個(gè)意思?!?p> 拉格朗日明白了歐拉的意思,想了想,先是點(diǎn)點(diǎn)頭,然后再搖搖頭說:“我覺得,人的學(xué)習(xí)還不止于此,你說的遍歷,不就是面面都要俱到,而不加以選擇嗎?”
歐拉說:“對了,我想說的就是這個(gè)意思。”
拉格朗日說:“要是有這樣一種學(xué)習(xí)的運(yùn)算程序,聽起來很笨拙?!?p> 歐拉趕緊搖搖頭說:“不是的,就是要以這種看似本辦法的辦法來學(xué)習(xí)。當(dāng)然了與人的區(qū)別是不要重復(fù),機(jī)器可以準(zhǔn)確記憶一個(gè)東西,而人腦不行,所以遍歷的時(shí)候不要走回頭路就行?!?p> 拉格朗日說:“人的學(xué)習(xí)分對錯(cuò),有用和沒用,不能一概都去學(xué)習(xí)?!?p> 歐拉說:“當(dāng)然了,不管正確與否,起碼是要都看過一邊才行。”
拉格朗日說:“當(dāng)然遍歷的排序也是一個(gè)問題,因?yàn)槟闾岬讲灰呋仡^路的問題了?!?p> 歐拉說:“沒錯(cuò),我們進(jìn)下來需要的,正是如何去遍歷的問題,不同的結(jié)構(gòu),遍歷的方式不同,我們知道遍歷是不可避免的,那就需要認(rèn)真的研究什么樣的情況下怎樣去遍歷,才是一個(gè)真正的問題了?!?p> 歐拉發(fā)現(xiàn),自己在解決很多實(shí)際問題的時(shí)候,都會(huì)需要遍歷的理論。
對歐拉來說,遍歷最麻煩的事情就是走回頭路。
很多問題的解決,只有在少走回頭路的時(shí)候才能順利解決。
解決七橋問題之后,歐拉開始研究把很多遍歷問題,轉(zhuǎn)化成圖論里的最短遍歷路徑問題。
對歐拉來說,最簡單的路徑遍歷,就是二叉樹遍歷。
但不是所有圖都可以轉(zhuǎn)化成二叉樹遍歷問題,容易造成浪費(fèi)。
求歐拉回路的思路:
循環(huán)的找到出發(fā)點(diǎn)。
從某個(gè)節(jié)點(diǎn)開始,然后查出一個(gè)從這個(gè)出發(fā)回到這個(gè)點(diǎn)的環(huán)路徑。
這種方法不保證每個(gè)邊都被遍歷。
如果有某個(gè)點(diǎn)的邊沒有被遍歷就讓這個(gè)點(diǎn)為起點(diǎn),這條邊為起始邊,把它和當(dāng)前的環(huán)銜接上。這樣直至所有的邊都被遍歷。
這樣,整個(gè)圖就被連接到一起了。
具體步驟:
1,如果此時(shí)與該點(diǎn)無相連的點(diǎn),那么就加入路徑中。
2,如果該點(diǎn)有相連的點(diǎn),那么就加入隊(duì)列之中,遍歷這些點(diǎn),直到?jīng)]有相連的點(diǎn)。
3,處理當(dāng)前的點(diǎn),刪除走過的這條邊,并在其相鄰的點(diǎn)上進(jìn)行同樣的操作,并把刪除的點(diǎn)加入到路徑中去。
4,這個(gè)其實(shí)是個(gè)遞歸過程。
這是最短的最合理的方式了。