歐拉算法 你為什么要學(xué)算法?
你為什么要學(xué)算法?算法,其實(shí)就是解決問題的方法。學(xué)習(xí)算法是學(xué)習(xí)前人解決問題的方法。為什么要學(xué)習(xí)算法?想要在編程道路上走得更遠(yuǎn)的程序員可能需要學(xué)習(xí)算法。我記得在軟件工程中,程序是數(shù)據(jù)結(jié)構(gòu)算法,這說明了算
你為什么要學(xué)算法?
算法,其實(shí)就是解決問題的方法。學(xué)習(xí)算法是學(xué)習(xí)前人解決問題的方法。為什么要學(xué)習(xí)算法?想要在編程道路上走得更遠(yuǎn)的程序員可能需要學(xué)習(xí)算法。我記得在軟件工程中,程序是數(shù)據(jù)結(jié)構(gòu)算法,這說明了算法對程序的重要性。
許多初級業(yè)務(wù)系統(tǒng)程序員可能不會使用很多數(shù)學(xué)公式,但這并不意味著他們不使用算法。算法代表了數(shù)學(xué)對于計(jì)算機(jī)的重要性,對于圖形和圖像、人工智能等方面來說,數(shù)學(xué)基礎(chǔ)不好,不懂的算法可以說是很難的。
即使你不是程序員,你也應(yīng)該學(xué)習(xí)更多關(guān)于算法的知識。一方面有助于思維訓(xùn)練,另一方面也有助于解決生活中的實(shí)際問題。例如:用矩陣解方程。
每個(gè)人學(xué)習(xí)算法的目的可能不同,但算法對學(xué)習(xí)者的實(shí)際好處是相同的。
七橋問題。歐拉說,要一次無重復(fù)走遍這七座橋是不可能!你能說出是歐拉根據(jù)什么道理?
科尼斯堡七橋問題是18世紀(jì)著名的經(jīng)典數(shù)學(xué)問題之一。如果說七橋在今天很流行的話,那么每天步行過橋已經(jīng)成為當(dāng)?shù)厝朔浅A餍泻陀腥さ南卜绞?。但在相?dāng)長的一段時(shí)間里,沒有人能解決這個(gè)問題。
29歲的尤拉發(fā)表了論文《科尼斯伯格的七座橋》,成功地解決了這個(gè)問題,開創(chuàng)了數(shù)學(xué)的一個(gè)新分支——圖論。
Euler巧妙地將過橋問題轉(zhuǎn)化為上圖中的一筆畫問題,很快他判斷不可能一次不重復(fù)地穿過科尼斯堡的七座橋。也就是說,多年來,無數(shù)人試圖發(fā)現(xiàn)的不重復(fù)路線根本不存在。
一個(gè)被稱為最傷腦筋、困擾無數(shù)人的問題,其實(shí)是最簡單的答案。
本文對七橋問題進(jìn)行了歐拉抽象,得到了歐拉循環(huán)關(guān)系:
要使一個(gè)圖成為一個(gè)筆劃,必須滿足以下兩個(gè)條件:1。必須連接圖形。2圖中“奇點(diǎn)”的數(shù)目是0或2。(如果連到一個(gè)點(diǎn)上的數(shù)字是奇數(shù),就叫做奇點(diǎn))
簡單點(diǎn)說,歐拉就是天才,把一道著名的經(jīng)典數(shù)學(xué)題簡化成小學(xué)生的習(xí)題,寫進(jìn)小學(xué)課本,這就叫“七橋題”。
七橋問題是圖論中的第一個(gè)問題,但圖論中最著名、最富有成果的問題是四色問題:“我們能不能只用四種顏色給所有的地圖著色,使任何兩個(gè)相鄰的區(qū)域都有不同的顏色?”四色問題異常困難。到目前為止,100多年過去了,它只能通過計(jì)算機(jī)來驗(yàn)證。
四色定理是第一個(gè)被計(jì)算機(jī)驗(yàn)證的著名數(shù)學(xué)定理。
從小學(xué)生習(xí)題的引入到四色難題的解決,圖論得到了迅速的發(fā)展和廣泛的應(yīng)用,甚至成為計(jì)算機(jī)科學(xué)中最重要、最有趣的領(lǐng)域之一。
歐拉被公認(rèn)為圖論的奠基人。
特別罕見的是,在1735年,即七橋問題解決的前一年,歐拉發(fā)了幾乎致命的高燒。在接下來的三年里,他的右眼幾乎失明。弗雷德里克稱他為“獨(dú)眼巨人”。
成為“獨(dú)眼巨人”后,歐拉仍然是最勤奮的天才。
哈密頓回路的算法是怎樣的?
基本圖算法寬度優(yōu)先遍歷深度優(yōu)先遍歷拓?fù)渑判蚋钸吀铧c(diǎn)強(qiáng)連通分量tarjan算法雙連通分量強(qiáng)連通分支及其收縮點(diǎn)圖割邊割點(diǎn)最小割模型,網(wǎng)絡(luò)流協(xié)議2-Sat問題Euler循環(huán)哈密頓循環(huán)最小生成樹prim算法Kruskal算法(稀疏圖)sollin算法次最小生成樹K最小生成樹最優(yōu)比例生成最小樹圖最小度極限生成樹平面點(diǎn)歐氏最小生成樹平面點(diǎn)曼哈頓最小生成樹最小平衡生成樹最短點(diǎn)路徑有向無環(huán)圖最短路徑拓?fù)渑判蚍秦?fù)權(quán)圖最短路徑gtdijkstra算法(可采用二進(jìn)制堆優(yōu)化)與負(fù)權(quán)圖最短路徑gtbellmanford算法與負(fù)權(quán)圖最短路徑gtspfa算法(SPFA在稠密負(fù)權(quán)圖中的效率)圖不如Bellman-Ford)全源最短路徑Freud算法Floyd全源最短路徑Johnson算法次最短路徑K最短路徑微分約束系統(tǒng)平面點(diǎn)對最短路徑(優(yōu)化)雙標(biāo)準(zhǔn)約束最短路徑最大流增廣路徑>ford-Fulkerson算法預(yù)推flow-dinic算法有上下界最小割>stoer-Wagner算法有向圖和無向圖邊不相交路徑Ford-Fulkerson疊加算法最小代價(jià)最大流匹配負(fù)代價(jià)匈牙利算法最小點(diǎn)覆蓋最小路徑覆蓋最大獨(dú)立集問題二部圖的最優(yōu)完全匹配Kuhn-munkras算法非加權(quán)二部匹配匈牙利算法加權(quán)二部匹配km算法最大基數(shù)匹配一般圖的權(quán)匹配一般圖的拓?fù)渑判蜃址畧D的穩(wěn)定聯(lián)姻問題