數(shù)據(jù)結(jié)構(gòu)與算法圖_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)與算法圖_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)與算法圖_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)與算法圖_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)與算法圖_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)結(jié)構(gòu)與算法圖2024-01-25CATALOGUE目錄圖的基本概念與性質(zhì)圖的存儲(chǔ)結(jié)構(gòu)圖的遍歷算法最小生成樹算法最短路徑算法拓?fù)渑判蚺c關(guān)鍵路徑圖的基本概念與性質(zhì)01圖是由頂點(diǎn)集和邊集組成的數(shù)據(jù)結(jié)構(gòu),表示為G=(V,E),其中V是頂點(diǎn)的集合,E是邊的集合。圖的定義圖可以用鄰接矩陣、鄰接表、邊集數(shù)組等多種方式表示。其中鄰接矩陣適用于稠密圖,鄰接表適用于稀疏圖。圖的表示方法圖的定義與表示方法連通性如果圖中任意兩個(gè)頂點(diǎn)之間都存在路徑,則稱該圖是連通的。路徑從一個(gè)頂點(diǎn)到另一個(gè)頂點(diǎn)所經(jīng)過的邊的序列。度與頂點(diǎn)相關(guān)聯(lián)的邊的數(shù)量。對(duì)于有向圖,度分為入度和出度。頂點(diǎn)圖中的數(shù)據(jù)點(diǎn),通常用小寫字母表示。邊連接兩個(gè)頂點(diǎn)的線段,表示頂點(diǎn)之間的關(guān)系。邊可以是有向的或無向的。圖的基本術(shù)語歐拉回路與歐拉圖歐拉回路是指通過圖中的每一條邊恰好一次并回到起點(diǎn)的路徑。存在歐拉回路的圖稱為歐拉圖。平面圖與對(duì)偶圖可以畫在平面上且任意兩條邊只在端點(diǎn)相交的圖稱為平面圖。平面圖的對(duì)偶圖是由平面圖的面構(gòu)成的圖,其中兩個(gè)面相鄰當(dāng)且僅當(dāng)它們共享一條邊。最小生成樹與最短路徑對(duì)于連通的無向圖,其所有邊的權(quán)值之和最小的生成樹稱為最小生成樹。對(duì)于有向圖,從起點(diǎn)到終點(diǎn)的所有路徑中權(quán)值之和最小的路徑稱為最短路徑。哈密爾頓回路與哈密爾頓圖哈密爾頓回路是指通過圖中的每一個(gè)頂點(diǎn)恰好一次并回到起點(diǎn)的路徑。存在哈密爾頓回路的圖稱為哈密爾頓圖。圖的性質(zhì)與定理圖的存儲(chǔ)結(jié)構(gòu)02定義01鄰接矩陣是表示圖的一種簡(jiǎn)單方式,對(duì)于n個(gè)頂點(diǎn)的圖,鄰接矩陣是一個(gè)n×n的矩陣,其中矩陣元素A[i][j]表示頂點(diǎn)i與頂點(diǎn)j之間的邊的信息。優(yōu)點(diǎn)02直觀、簡(jiǎn)單、好理解方面,對(duì)于稠密圖而言,鄰接矩陣是一種非常不錯(cuò)的存儲(chǔ)方式,并且使用鄰接矩陣來表示圖的話,很容易看出圖中任意兩個(gè)頂點(diǎn)之間是否有邊相連。缺點(diǎn)03對(duì)于稀疏圖而言,鄰接矩陣是不適用的,因?yàn)樗鼘⒗速M(fèi)大量的存儲(chǔ)空間。鄰接矩陣表示法鄰接表是圖的一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),對(duì)于n個(gè)頂點(diǎn)的圖,鄰接表包含n個(gè)頂點(diǎn)表和若干個(gè)邊表。定義對(duì)于稀疏圖而言,鄰接表是一種非常不錯(cuò)的存儲(chǔ)方式,因?yàn)樗梢怨?jié)省大量的存儲(chǔ)空間。優(yōu)點(diǎn)對(duì)于稠密圖而言,鄰接表可能不是最優(yōu)的選擇,因?yàn)樵L問某個(gè)頂點(diǎn)的所有鄰居可能需要遍歷整個(gè)邊表。缺點(diǎn)鄰接表表示法定義十字鏈表是圖的另一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),可以看作是將鄰接表和逆鄰接表結(jié)合起來得到的一種鏈表。優(yōu)點(diǎn)容易找到以某個(gè)頂點(diǎn)為起點(diǎn)或終點(diǎn)的所有邊,也容易找到與某個(gè)頂點(diǎn)相鄰的所有頂點(diǎn)。缺點(diǎn)結(jié)構(gòu)比較復(fù)雜,需要為每個(gè)頂點(diǎn)分配兩個(gè)鏈表(一個(gè)正向鏈表和一個(gè)反向鏈表),并且需要為每個(gè)邊分配兩個(gè)結(jié)點(diǎn)(一個(gè)正向結(jié)點(diǎn)和一個(gè)反向結(jié)點(diǎn))。因此,十字鏈表的存儲(chǔ)密度較低。十字鏈表表示法圖的遍歷算法03深度優(yōu)先遍歷(Depth-FirstSearch,DFS)是一種用于遍歷或搜索樹或圖的算法。這個(gè)算法會(huì)盡可能深地搜索樹的分支。在圖中,這個(gè)算法是用來標(biāo)記已經(jīng)訪問和未被訪問過的頂點(diǎn),并保留標(biāo)記的頂點(diǎn)信息,以防止重復(fù)訪問。DFS使用棧來保存需要后續(xù)處理的頂點(diǎn)。當(dāng)訪問到某個(gè)頂點(diǎn)時(shí),將其標(biāo)記為已訪問,并將其相鄰的未訪問頂點(diǎn)加入棧中。然后重復(fù)此過程,直到棧為空。深度優(yōu)先遍歷BFS使用隊(duì)列來保存需要后續(xù)處理的頂點(diǎn)。當(dāng)訪問到某個(gè)頂點(diǎn)時(shí),將其標(biāo)記為已訪問,并將其相鄰的未訪問頂點(diǎn)加入隊(duì)列中。然后重復(fù)此過程,直到隊(duì)列為空。廣度優(yōu)先遍歷(Breadth-FirstSearch,BFS)是另一種圖遍歷算法,它是按照層次進(jìn)行遍歷的。BFS從圖的某一頂點(diǎn)出發(fā),首先訪問它的所有相鄰頂點(diǎn),然后再對(duì)這些相鄰頂點(diǎn)進(jìn)行同樣的操作,直到所有的頂點(diǎn)都被訪問過。廣度優(yōu)先遍歷除了遞歸方式實(shí)現(xiàn)圖的遍歷外,還可以使用非遞歸方式實(shí)現(xiàn)。非遞歸方式通常使用?;蜿?duì)列來輔助實(shí)現(xiàn)遍歷過程。在非遞歸的深度優(yōu)先遍歷中,可以使用一個(gè)棧來保存需要后續(xù)處理的頂點(diǎn)。首先將起始頂點(diǎn)入棧,然后進(jìn)入一個(gè)循環(huán),每次從棧頂取出一個(gè)頂點(diǎn)進(jìn)行訪問,并將其相鄰的未訪問頂點(diǎn)入棧。重復(fù)此過程直到棧為空。在非遞歸的廣度優(yōu)先遍歷中,可以使用一個(gè)隊(duì)列來保存需要后續(xù)處理的頂點(diǎn)。首先將起始頂點(diǎn)入隊(duì),然后進(jìn)入一個(gè)循環(huán),每次從隊(duì)首取出一個(gè)頂點(diǎn)進(jìn)行訪問,并將其相鄰的未訪問頂點(diǎn)入隊(duì)。重復(fù)此過程直到隊(duì)列為空。非遞歸遍歷算法最小生成樹算法04

Prim算法算法思想Prim算法從一個(gè)頂點(diǎn)開始,每次選擇與當(dāng)前生成樹中頂點(diǎn)距離最短的頂點(diǎn)加入生成樹,直到所有頂點(diǎn)都加入生成樹為止。時(shí)間復(fù)雜度Prim算法的時(shí)間復(fù)雜度為O(V^2),其中V為頂點(diǎn)的數(shù)量??臻g復(fù)雜度Prim算法需要維護(hù)一個(gè)距離數(shù)組和一個(gè)標(biāo)記數(shù)組,因此空間復(fù)雜度為O(V)。時(shí)間復(fù)雜度Kruskal算法的時(shí)間復(fù)雜度為O(ElogE),其中E為邊的數(shù)量。算法思想Kruskal算法每次選擇一條連接兩個(gè)未連接頂點(diǎn)的最小邊加入生成樹,直到生成樹中包含所有頂點(diǎn)為止??臻g復(fù)雜度Kruskal算法需要維護(hù)一個(gè)并查集和一個(gè)邊集合,因此空間復(fù)雜度為O(V+E)。Kruskal算法最小生成樹的應(yīng)用在網(wǎng)絡(luò)設(shè)計(jì)中,最小生成樹算法可以用于構(gòu)建最低成本的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。在電路設(shè)計(jì)中,最小生成樹算法可以用于確定連接所有電子元件的最小成本路徑。在交通規(guī)劃中,最小生成樹算法可以用于設(shè)計(jì)連接所有城市的最低成本道路網(wǎng)絡(luò)。在圖像處理中,最小生成樹算法可以用于圖像分割、邊緣檢測(cè)等任務(wù)。網(wǎng)絡(luò)設(shè)計(jì)電路設(shè)計(jì)交通規(guī)劃圖像處理最短路徑算法05基本思想從起點(diǎn)開始,逐步向外擴(kuò)展,每次找到距離起點(diǎn)最近的頂點(diǎn),并更新與其相鄰頂點(diǎn)的距離時(shí)間復(fù)雜度O(n^2),其中n為頂點(diǎn)數(shù)優(yōu)點(diǎn)穩(wěn)定且易于實(shí)現(xiàn)Dijkstra算法通過動(dòng)態(tài)規(guī)劃的思想,逐步計(jì)算任意兩點(diǎn)間的最短路徑基本思想O(n^3),其中n為頂點(diǎn)數(shù)時(shí)間復(fù)雜度可以處理存在負(fù)權(quán)邊的情況優(yōu)點(diǎn)Floyd算法通過不斷松弛所有邊的過程,逐步逼近最短路徑基本思想O(VE),其中V為頂點(diǎn)數(shù),E為邊數(shù)時(shí)間復(fù)雜度可以處理稀疏圖且存在負(fù)權(quán)邊的情況優(yōu)點(diǎn)Bellman-Ford算法拓?fù)渑判蚺c關(guān)鍵路徑06AOV網(wǎng)(ActivityOnVertexNetwork):用頂點(diǎn)表示活動(dòng),用有向邊表示活動(dòng)間的先后關(guān)系的有向圖。拓?fù)渑判虻膶?shí)現(xiàn):基于深度優(yōu)先搜索(DFS)或廣度優(yōu)先搜索(BFS)實(shí)現(xiàn)。拓?fù)渑判颍簩?duì)AOV網(wǎng)進(jìn)行排序,使得對(duì)每一條有向邊(u,v),均有u(在排序記錄中)比v先出現(xiàn)。拓?fù)渑判虻膽?yīng)用:用于工程或項(xiàng)目的計(jì)劃安排、課程安排、事件調(diào)度等。AOV網(wǎng)與拓?fù)渑判駻OE網(wǎng)與關(guān)鍵路徑AOE網(wǎng)(ActivityOnEdg…在帶權(quán)有向圖中,以頂點(diǎn)表示事件,以有向邊表示活動(dòng),邊上的權(quán)值表示活動(dòng)的持續(xù)時(shí)間。關(guān)鍵路徑從源點(diǎn)到匯點(diǎn)的最長(zhǎng)路徑,它決定了整個(gè)工程的完成時(shí)間。關(guān)鍵活動(dòng)的確定在關(guān)鍵路徑上的活動(dòng)都是關(guān)鍵活動(dòng),它們的延誤將直接影響整個(gè)工程的完成時(shí)間。關(guān)鍵路徑的應(yīng)用用于項(xiàng)目管理中的時(shí)間優(yōu)化和資源分配,以及評(píng)估項(xiàng)目風(fēng)險(xiǎn)和制定應(yīng)對(duì)措施。通過拓?fù)渑判虼_定項(xiàng)目活動(dòng)的先后順序,通過關(guān)鍵路徑分析找出影響項(xiàng)目工期的關(guān)鍵因素,從而優(yōu)化項(xiàng)目進(jìn)度計(jì)劃。項(xiàng)目進(jìn)度管理拓?fù)渑判蚝完P(guān)鍵路徑分析可以為項(xiàng)目管理者提供決策

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論