日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法基础:图的相关算法知识笔记

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法基础:图的相关算法知识笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、圖的相關算法

1、圖的分類知識

如下圖:

? ? ? ? ? ? ?

2、生成樹概念

對連通圖進行遍歷,過程中所經過的邊和頂點的組合可看做是一棵普通樹,通常稱為生成樹。

連通圖的生成樹具有這樣的特征:邊的數量 = 頂點數 - 1

3、最小生成樹

在連通網的所有生成樹中,所有邊的代價和權值最小的生成樹,稱為最小生成樹。

? ? ? ? ? ? ?

4、 最小生成樹的算法

4.1普里姆算法(Prim算法)

它是圖論中的一種算法,可在加權連通圖里搜索最小生成樹。即由此算法搜索到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點,且其所有邊的權值之和亦為最小。該算法于1930年由捷克數學家沃伊捷赫·亞爾尼克(英語:Vojtěch Jarník)發現;并在1957年由美國計算機科學家羅伯特·普里姆(Robert C. Prim)獨立發現;1959年,艾茲格·迪科斯徹再次發現了該算法。因此,在某些場合,普里姆算法又被稱為DJP算法、亞爾尼克算法或普里姆-亞爾尼克算法。

算法如下:

void prim(MGraph g,int v)

{

? ? int lowcost[MAXV],min,n=g.vexnum;

? ? int closest[MAXV],i,j,k;

? ? for (i=0;i<n;i++)? ? ? ? ? ?//給lowcost[]和closest[]置初始值

? ? {? ?

? ? ? ? lowcost[i]=g.edges[v][i];

? ? ? ? closest[i]=v;

? ? }

? ? for (i=1;i<n;i++)? ? ? ? ? ?//找出n-1個頂點

? ? {? ?

? ? ? ? min=INF;

? ? ? ? for (j=0;j<n;j++)? ? ? ?//在(V-U)中找出離U最近的頂點k

? ? ? ? ? ? if (lowcost[j]!=0 && lowcost[j]<min)?

? ? ? ? ? ? {? ?

? ? ? ? ? ? ? ? min=lowcost[j];k=j;??

? ? ? ? ? ? }

? ? ? ? printf("? 邊(%d,%d)權為:%d\n",closest[k],k,min);

? ? ? ? lowcost[k]=0;? ? ? ? ? ?//標記k已經加入U

? ? ? ? for (j=0;j<n;j++)? ? ? ?//修改數組lowcost和closest

? ? ? ? ? ? if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j])?

? ? ? ? ? ? {? ?

? ? ? ? ? ? ? ? lowcost[j]=g.edges[k][j];closest[j]=k;?

? ? ? ? ? ? }

? ? }

}

算法過程

?

? ? ? ? ? ? ?

?

4.2 克魯斯卡爾(Kruskal)算法

1、概念

該算法可以稱為“加邊法”,初始最小生成樹邊數為0,每迭代一次就選擇一條滿足條件的最小代價邊,加入到最小生成樹的邊集合里。

2、算法步驟

1. 把圖中的所有邊按代價從小到大進行排序;

2. 把圖中的n個頂點看成獨立的n棵樹組成的森林;

3. 按權值從小到大選擇邊,所選的邊連接的兩個頂點,應屬于兩顆不同的樹,則成為最小生成樹的一條邊,并將這兩顆樹合并作為一顆樹。

4. 重復(3),直到所有頂點都在一顆樹內或者有n-1條邊為止。

3、算法過程

? ? ? ? ? ? ? ? ? ? ? ? ? ?

5、最小生成樹算法的應用

比如要在n個城市之間鋪設光纜,主要目標是要使這 n 個城市的任意兩個之間都可以通信,因為鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不同,因此另一個目標是要使鋪設光纜的總費用最低。這個時候需要找到帶權的最小生成樹,來解決這個問題。

?

二、拓撲排序

1、定義

由某個集合上的一個偏序得到該集合上的一個全序,這個操作稱之為拓撲排序。

2、AOV網

在工程領域,一個大的工程通常會被劃分為許多較少的子工程,當子工程都完成了,那么整個大工程也就完成了。若以頂點表示活動,用有向邊表示子工程之間的優先關系。這樣的有向圖以頂點表示活動的網就是AOV網。AOV網表示了子工程之間的優先關系,也是活動進行時的制約關系。

3、拓撲排序

拓撲排序是將AOV網中所有的頂點排成一個線性序列的過程。并且滿足:若在AOV網中從頂點A到B有一條路徑,那么A比然在B之前。

4、執行步驟

(1) 選擇一個入度為0的頂點并輸出之;

(2) 從網中刪除此頂點及所有出邊。

循環結束后,若輸出的頂點數小于網中的頂點數,則輸出“有回路”信息,否則輸出的頂點序列就是一種拓撲序列。?

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

總結

以上是生活随笔為你收集整理的算法基础:图的相关算法知识笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。