簡體   English   中英

找到連接圖的最低成本的替代方法

[英]Alternate way to find minimum cost of connecting a graph

我遇到了一個經典的 Kruskals 問題,給定一個無向圖和邊之間的權重集,我被要求找到連接邊所需的最小成本。 我對 Kruskals 算法不太熟悉,所以我想出了自己的解決方案。 但是,它在一些測試用例上出現了不足。 這是算法: 1- 根據權重對邊緣進行排序。 使用了 Node.Node 類型的優先級隊列,由 src、dest 和 weight 組成。

2- 使用大小為 N 的 boolean 數組跟蹤訪問的節點,其中 N 是節點數。

2-輪詢優先隊列(移除頭部)。 如果 src 或 dest 沒有被訪問,則將權重添加到解決方案中,並將它們都標記為已訪問。

有人可以幫我解釋一下為什么這個算法不夠用嗎? 從邏輯上講,在我看來,訪問過的數組應該跟蹤確保沒有循環,因為如果 src 或 dest 未被訪問,我只會將其添加到解決方案中。

在某些時候,您通常需要在解決方案中添加一條邊,同時訪問兩個端點。 例如,考慮下圖:

A --1-- B
|
|
3
|
|
C --2-- D

在解決方案中添加邊 AB 和 CD 后,您的算法將拒絕添加 AC,因為 A 和 C 都已訪問。

如果端點已經在同一棵樹中,Kruskal 的算法拒絕向解決方案添加邊,這與您的情況非常不同。

您可以使用 prims 算法來查找 MST。 這比克魯斯卡爾容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM