關於最小生成樹的實例詳解
最小生成樹-Prim演算法和Kruskal演算法
圖的生成樹是它的一棵含有所有頂點的無環連通子圖,一棵加權圖的最小生成樹是它的一棵權值最小的生成樹。
Prim演算法
#演算法簡單描述
1).輸入:一個加權連通圖,其中頂點集合為V,邊集合為E;
2).初始化:Vnew = {x},其中x為集合V中的任一節點(起始點),Enew = {},為空;
3).重複下列操作,直到Vnew = V:
a.在集合E中選取權值最小的邊,其中u為集合V new中的元素,而v不在Vnew集合當中,且v∈V(如果存在有多個滿足前述條件即具有相同權值的邊,則可任意選取其中之一);
b.將v加入集合Vnew中,將邊加入集合Enew中;
4).輸出:使用集合Vnew和Enew來描述所得到的最小生成樹。
下面對演算法的圖例描述
圖例 | 說明 | 不可選 | ##可選 | #已選(Vnew) |
---|---|---|---|---|
# |
此為原始的加權連通圖。每條邊一側的數字代表其權值。 | - | - | - |
頂點D任意選為起始點。頂點A、B、E和F透過單一邊與D連結。 A是距離D最近的頂點,因此將A及對應邊AD以高亮表示。 | C, G | A, B, E, F | D | |
|
#下一個頂點為距離D或A最近的頂點。 B距D為9,距A為7,E為15,F為6。因此,F距D或A最近,因此將頂點F與對應邊DF以高亮表示。 | C, G | B, E, F | ##A, D|
![]() | 演算法繼續重複上面的步驟。距離A為7的頂點B以高亮表示。 | CB, E, G | A, D, F | |
|
在目前情況下,可以在C、E與G間進行選擇。 C距B為8,E距B為7,G距F為11。 E最近,因此將頂點E與對應邊BE高亮表示。 | 無 | C, E, G | A, D, F, B |
|
#這裡,可選取的頂點只有C和G。 C距E為5,G距E為9,故選取C,並與邊EC一同高亮表示。 | 無 | C, G | A, D, F, B, E |
#頂點G是唯一剩下的頂點,它距F為11,距E為9,E最近,故高亮表示G及對應邊EG。 | 無 | G | #A, D, F, B, E, C | |
#現在,所有頂點都已被選取,圖中綠色部分即為連通圖的最小生成樹。在此例中,最小生成樹的權值總和為39。 | 無 | #無 | #A, D, F, B, E, C, G |
演算法實作可參考《演算法》第四版,或清華出版社《資料結構—java語言實作》(實作方法更清晰簡單)
Kruskal演算法
1.概覽
Kruskal演算法是一種用來尋找最小生成樹的演算法,由Joseph Kruskal在1956年發表。用來解決同樣問題的還有Prim演算法和Boruvka演算法等。三種演算法都是貪婪演算法的應用。和Boruvka演算法不同的地方是,Kruskal演算法在圖中存在相同權值的邊時也有效。
2.演算法簡單描述
1).記Graph中有v個頂點,e個邊
2)。新建圖Graphnew,Graphnew
中擁有原圖中相同的e個頂點,但沒有邊#3).將原圖Graph中所有e個邊按權值從小到大排序
4).循環:從權值最小的邊開始遍歷每條邊直至圖Graph中所有的節點都在同一個連通分量中
if 這邊連接的兩個節點在圖Graphnew
中不在同一個連通分量中##中
圖例說明:
首先第一步,我們有一張圖Graph,有若干點和邊
將所有的邊的長度排序,並用排序的結果作為我們選擇邊的依據。這裡再次體現了貪心演算法的思想。
資源排序,對局部最優的資源進行選擇,排序完成後,我們率先選擇了邊AD。這樣我們的圖就變成了右圖
#在剩下的變中尋找。我們找到了CE。這裡邊的權重也是5
###依次類別推我們找到了6,7,7,即DF,AB,BE。 #########################下面繼續選擇, BC或EF儘管現在長度為8的邊是最小的未選擇的邊。但現在他們已經連通了(對於BC可以透過CE,EB來連接,######類似的EF可以透過EB,BA,AD,DF來接連)。所以不需要選擇他們。類似的BD也已經連通了(這裡上圖的連通線用紅色表示了)。 ######最後就剩下EG和FG了。當然我們選擇了EG。 ######### ###############演算法實作可參考《演算法》第四版程式碼。 ##########以上是關於最小生成樹的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何使用PHP產生可刷新的圖片驗證碼隨著網路的發展,為了防止惡意攻擊和機器自動操作現象,許多網站都使用了驗證碼來進行使用者驗證。其中一個常見的驗證碼類型就是圖片驗證碼,透過產生一張包含隨機字元的圖片,要求使用者輸入正確的字元才能進行後續操作。本文將介紹如何使用PHP產生可刷新的圖片驗證碼,並提供具體的程式碼範例。步驟一:建立驗證碼圖片首先,我們需要建立一個用於生

產生隨機數據在數據科學領域非常重要。從建構神經網路預測、股市數據等來看,通常都會將日期當作參數之一。我們可能需要在兩個日期之間產生隨機數以進行統計分析。本文將展示如何產生兩個給定日期之間的k個隨機日期使用隨機和日期時間模組日期時間是Python內建的處理時間的庫。另一方面,隨機模組有助於產生隨機數。因此,我們可以結合隨機和日期時間模組來產生兩個日期之間的隨機日期。語法random.randint(start,end,k)這裡的random指的是Python隨機函式庫。 randint方法採用三個重要的

訊飛聽見升級會議紀要功能,可以將口語表述直接轉換為書面稿,AI能夠根據錄音總結會議紀錄。 AI能夠幫助您完成會議紀要的撰寫工作8月31日,訊飛聽見網頁端進行了版本升級,新增了PC端即時錄音功能,能夠利用人工智慧智慧生成會議紀要。這項功能的推出將大大提高使用者在會議後整理內容、跟進重點工作事項的效率。對於經常參加會議的人來說,這個功能無疑是一個非常實用的工具,能夠節省大量時間和精力該功能的應用場景主要是PC電腦端錄音轉文字自動生成會議紀要,旨在為用戶提供最優質的服務和最先進的技術,快速提升辦公室效率的產

自然語言生成是一種人工智慧技術,它能夠將資料轉換為自然語言文字。在當今的大數據時代,越來越多的業務需要將資料視覺化或呈現給用戶,而自然語言生成正是一種非常有效的方法。 PHP是一種非常受歡迎的伺服器端腳本語言,它可以用來開發網頁應用程式。本文將簡要介紹如何使用PHP進行基本的自然語言生成。引入自然語言生成庫PHP自帶的函數庫並不包括自然語言生成所需的功能,因此

數據視覺化對於高效的資訊理解和展示至關重要。在眾多可用的圖表類型中,華夫餅圖以方形瓦片在網格狀結構中顯示資料的新穎方式。強大的Python模組PyWaffle方便了華夫餅圖的開發,類似於許多計算和數據分析方法。在本文中,我們將看看如何使用複雜的Python模組PyWaffle創建華夫餅圖。讓我們安裝PyWafle並看看如何使用它來視覺化分類資料。在您的cmd中執行以下命令來安裝該庫,然後將其導入到您的程式碼中pipinstallpywaffleExample1的中文翻譯為:範例1在這個例子中,我們

如何使用PHP產生帶有時間限制的二維碼?隨著行動支付和電子門票的普及,二維碼成為了一種常見的技術。在許多場景中,我們可能需要產生一種帶有時間限制的二維碼,即使在一定時間後,該二維碼也會失效。本文將介紹如何使用PHP產生具有時間限制的二維碼,並提供程式碼範例供參考。安裝PHPQRCode函式庫要使用PHP產生二維碼,我們需要先安裝PHPQRCode函式庫。這個庫

word目錄產生錯亂怎麼辦隨著科技的發展,電子文檔已經成為我們日常工作和學習中不可或缺的一部分。而在編輯電子文檔時,尤其是長篇文章或論文中,目錄的產生是一個非常重要的步驟。目錄能夠方便讀者查找到文章的內容和架構,提升閱讀效率。然而,有時候我們在生成目錄的過程中會遇到一些問題,例如目錄生成出錯,順序混亂等。那麼,如果word目錄生成錯亂,我們該如何解決呢?首

如何產生線上答題的錯題本在現今的資訊時代,網路答題已經成為了許多學生和教育工作者的常見任務。而錯題一直是學習過程中的難題之一,許多人都希望能夠方便地產生線上答案的錯題本,以便更好地複習和掌握知識。本文將介紹如何透過程式設計實現線上答題錯題本的生成功能,並提供具體的程式碼範例。第一步:建立網頁介面產生線上答題錯題本需要一個網頁介面來顯示題目和答案。可以使用HTML
