算法基礎:圖的相關算法知識筆記

一、圖的相關算法

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及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271641.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271641.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

下午回來才后知百密于一疏忽

交了1700定金后就去了中介公司看了一下&#xff0c;比較偏僻窄小&#xff0c;然后里面有一些人和辦公桌比較擠&#xff0c;中介“董楠楠”介紹了一下女經理&#xff0c;然后就做地鐵回了&#xff0c;中途記憶&#xff0c;沒有冰箱然后統一口徑&#xff0c;對于只有一個電磁爐的…

java中break和continue的用法例子

break用于switch語句 1. break用于switch語句中&#xff0c;終止switch語句 下面先看 加上break,效果如下 我們可以看到&#xff0c;沒有用過break關鍵字時&#xff0c;不會在判斷下一個case的值&#xff0c;直接向后運行&#xff0c;直到遇到break&#xff0c;或者整體swit…

ftp 工具_ftp工具,ftp工具有哪些

對于ftp工具&#xff0c;你了解多少&#xff1f;其實一般人也接觸不到這種軟件。ftp工具主要是針對從事網站管理的工作人員比較有利的一款工具。可以幫助他們快速的解決工作中的問題。方便、簡單、快捷又明了的解決問題。那ftp工具有哪些呢&#xff1f;接下來給大家推薦四款好用…

盤點世界十大軟件外包公司排名是哪些公司

排名第一:IBMIBM,總部在紐約的阿蒙克。托馬斯沃森19世紀80年代在美國成立,是全球最大的信息技術和商業解決方案公司,在全球擁有超過30萬名員工,業務遍及160多個國家和地區。電腦上的制作非常出名,事實上,IBM在軟件方面取得了巨大的成就,特別是在一些IBM服務器上使用的軟件平臺上…

判斷不為空和不為空串的方法java

判斷不為空和不為空串的方法 方法一:用StringUtils工具類 首先要引入依賴 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId> </dependency> if( StringUtils.isNotBlank(str3) && St…

android xml事件,安卓事件

1、自定義內部類2、匿名內部類3、當前activity去實現事件接口4、在布局文件xml中添加點擊事件屬性(使用頻率非常高)補充&#xff1a;a、Android 在xml文件中 給某個控件聲明 id 是: "/自定義名字" &#xff0c;獲取是&#xff1a; "/自定義的名字" &#x…

Cocos2d-x v3.0物理系統 利用PhysicsEditor創建多邊形

Cocos2d-x 3.0的新物理系統我就不必多說了&#xff0c;接觸一段時間&#xff0c;感覺還是不錯的。對于那些基本概念&#xff0c;網上的教程已經泛濫了&#xff0c;就不多說了&#xff0c;不過對于創建多邊形物體的教程&#xff0c;還真不多&#xff0c;很多都是創建圓形和矩形&…

公眾號開發 單獨 給某個用戶 推送消息_韓國5G用戶6月底已達134萬 較5月底增加近70%...

中關村在線消息&#xff1a;韓國三大運營商SK、KT和LG率先于去年12月開始向企業用戶提供商用5G 服務&#xff0c;今年4月初推出面向個人消費者的5G民用服務。韓國作為全球首個推出5G 服務的國家&#xff0c;他們的5G用戶數量在6月時已經突破100萬大關。日前韓國公布6月底最新的…

程序語言的概念知識筆記

1、低級語言和高級語言 計算機指令程序&#xff1a;0、1 組成的機器指令序列。特點&#xff1a;效率低、可讀性差、難以維護。 匯編指令&#xff1a;用常用的符號代替0、1 序列來 表示機器指令&#xff0c;例如用ADD表示加法。 高級語言&#xff1a;面向對象設計的各類應用的程…

java lambda 表達式中的雙冒號和箭頭的用法 ::

先構造一些數據,創建一個User類 java lambda 表達式中的雙冒號的用法 &#xff1a;&#xff1a; 雙冒號運算就是Java中的[方法引用],[方法引用]的格式是 類名::方法名 如下圖所示 User是一個類, getAge是方法名,注意是方法名呀&#xff0c;后面沒有括號()的。為什么不要括號…

android 麥克風耳機,Android force AudioRecord使用耳機麥克風

我使用AudioRecord來錄制音樂&#xff0c;但是當我錄制它時使用手機麥克風。 我該如何強迫他使用耳機的頻道&#xff1f;Android force AudioRecord使用耳機麥克風我用這個代碼&#xff1a;int minSize AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, Audi…

linux內核設計與實現 中文第三版 pdf_大牛推薦的5本 Linux 經典必讀書

今天給大家推薦5本Linux學習相關的書籍&#xff1b;這些書籍基本都是很多大牛推薦過&#xff0c;并且深受業界好評的書&#xff1b;雖然只有5本&#xff0c;但是相信把5本全都認真看過的同學應該不多吧&#xff1f;希望這些書能夠幫助你進階為大牛&#xff01;5.《鳥哥的 Linux…

號稱最好的國產操作系統在 Windows 10 面前能否一戰?

統信軟件旗下的UOS操作系統正式推出UOS V20個人版&#xff0c;并開啟99元預售活動。統信UOS雖名不見經傳&#xff0c;但身披“國產操作系統”外衣的它卻讓科技圈炸開了鍋。有人說它是“國貨之光”&#xff0c;堪稱最好的國產系統&#xff0c;但也因為“收費”的問題引發一致批評…

js打開android應用程序,瀏覽器通過JS打開Android程序

做項目的時候&#xff0c;項目中有個需求&#xff0c;需要通過網頁打開app&#xff0c;聽到這個功能&#xff0c;我先是蛋疼了一會&#xff0c;但是在網上查了一下資料發現原理其實很簡單&#xff0c;本質就是通過瀏覽器輸入我們本地android程序的路徑&#xff0c;不過這個路徑…

lamba統計最大值,最小值,平均值,總和,個數

代碼如下: List<Integer> ages Arrays.asList(1,3,5,7,8,10,12); IntSummaryStatistics intSummaryStatistics ages.stream().mapToInt(e -> e).summaryStatistics(); System.out.println("最大值: " intSummaryStatistics.getMax()); System.out.print…

簡單的學習心得:網易云課堂Android開發第六章SQLite與ContentProvider

一、SQLite 1、基本操作&#xff1a; &#xff08;1&#xff09;創建數據庫&#xff1a;在SQLiteOpenHelper的子類構造器中創建。 &#xff08;2&#xff09;創建表&#xff1a;在SQLiteOpenHelper的子類onCreate方法中&#xff0c;調用execSQL方法實現。 &#xff08;3&#x…

程序語言的組成知識筆記

程序語言的基本成分包括數據‘運算、控制、傳輸。 1、程序語言的數據成分 數據成分指程序中的數據對象&#xff0c;數據是程序程序操作的對象&#xff0c;具有存儲類型、數據類型、數據名稱、作用域、生存周期等屬性。 1.1 常量和變量 按照程序運行時數據能否改變&#xff0c;將…

python車牌識別逆光怎么辦代碼_這攝像頭除了能逆光識別車牌,還會跟人打招呼?...

前段時間&#xff0c;筆者偶然在某寶上發現了一款變光全彩的智能警戒攝像頭&#xff01;這款攝像頭的型號為JA-F8&#xff0c;是一臺室外防水槍機。說實話&#xff0c;這東西外觀有點奇葩&#xff0c;談不上好看。但正是因為它“骨骼精奇”&#xff0c;我才抱著好奇的心態點了進…

android sqlite alert table,android sqlite數據庫操作

sqlite有一點不同于其他常見數據庫&#xff0c;就是sqlite數據庫是存成文件的&#xff0c;可以直接把該文件從手機里導出來&#xff0c;以文件的形式存在&#xff0c;然后放到電腦上查看。Android操作數據庫有如下步驟&#xff1a;1、繼承SQLiteOpenHelper,實現里面的方法。pub…

Executors創建線程池

java jdk1.5提供線程池 在java.util.concurrent包下提供工廠類Executors用于生產線程池&#xff0c;Executors提供了4種線程池 newFixedThreadPool&#xff1a; 創建一個線程池&#xff0c;該線程池重用固定數量的從共享無界隊列中運行的線程。 newScheduledThreadPool&#x…