拓撲排序算法 你為什么要學算法?
你為什么要學算法?算法,其實就是解決問題的方法。學習算法是學習前人解決問題的方法。為什么要學習算法?想要在編程道路上走得更遠的程序員可能需要學習算法。我記得在軟件工程中,程序是數(shù)據(jù)結(jié)構(gòu)算法,這說明了算
你為什么要學算法?
算法,其實就是解決問題的方法。學習算法是學習前人解決問題的方法。為什么要學習算法?想要在編程道路上走得更遠的程序員可能需要學習算法。我記得在軟件工程中,程序是數(shù)據(jù)結(jié)構(gòu)算法,這說明了算法對程序的重要性。
許多初級業(yè)務系統(tǒng)程序員可能不會使用很多數(shù)學公式,但這并不意味著他們不使用算法。算法代表了數(shù)學對于計算機的重要性,對于圖形和圖像、人工智能等方面來說,數(shù)學基礎不好,不懂的算法可以說是很難的。
即使你不是程序員,你也應該學習更多關于算法的知識。一方面有助于思維訓練,另一方面也有助于解決生活中的實際問題。例如:用矩陣解方程。
每個人學習算法的目的可能不同,但算法對學習者的實際好處是相同的。
拓撲排序和關鍵路徑是如何實現(xiàn)的?
拓撲排序的實現(xiàn)步驟:AOV網(wǎng)構(gòu)造拓撲序列的拓撲排序算法主要是循環(huán)執(zhí)行以下三個步驟,直到?jīng)]有度為0的頂點為止;(1)選擇度為0的頂點并輸出;(2)刪除網(wǎng)絡中的頂點和所有外邊緣;(3) 循環(huán)后,如果輸出頂點的個數(shù)小于網(wǎng)絡中的頂點個數(shù),則輸出“循環(huán)”,否則,輸出頂點序列為拓撲序列。尋找關鍵路徑的算法:(1)輸入e弧<J,K>建立AOE網(wǎng)絡的存儲結(jié)構(gòu)。(2) 從震源點V1開始,設ve(1)=0,求ve(J)2<=J<=n。(3)從交匯點VN開始,設VL(n)=ve(n),求VL(I)1<=I<=n-1。(4) 根據(jù)每個頂點的VE和VL值,計算每個弧s(activity)的最早開始時間e(s)和最晚開始時間l(s),其中e(s)=l(s)是關鍵activity。
拓撲排序和關鍵路徑是如何實現(xiàn)的?
拓撲排序的實現(xiàn)步驟如下:
AOV網(wǎng)構(gòu)造拓撲序列的拓撲排序算法主要是循環(huán)執(zhí)行以下三個步驟,直到?jīng)]有度為0的頂點;
(1)選擇度為0的頂點并輸出;
(2)刪除頂點從網(wǎng)絡中選擇度為0的頂點,在循環(huán)的末尾輸出,如果輸出的頂點數(shù)小于網(wǎng)絡中的頂點數(shù),則輸出“循環(huán)”信息,否則輸出的頂點序列是拓撲序列。
尋找關鍵路徑的算法:
(1)輸入e弧
(2)從源點V1開始,設ve(1)=0,求ve(J)2
(3)從匯點VN開始,設VL(n)=ve(n),求VL(I)1
(4)根據(jù)每個頂點的ve和VL值,找出每個弧s(活動)的最早開始時間e(s)和最晚開始時間l(s),其中e(s)=l(s)是關鍵活動。
采用鄰接表存儲,拓撲排序算法的時間復雜度為多少?
要查看要使用哪種拓撲排序,最好的方法是輸出DFS的逆序。該算法的復雜度為O(vl),V為頂點數(shù),L為邊數(shù)。