簡體   English   中英

使用Kruskal算法創建更壞的情況

[英]Creating worse case scenarios with kruskal's algorithm

我有C ++中的Kruskal算法的實現(使用不相交的數據集結構)。 我正在嘗試尋找在算法的總運行時間上創建更糟的案例測試用例的可能方法。 但是,在嘗試創建測試用例時,我對導致最壞情況的算法產生什么感到困惑,並且想知道這里是否有人知道可能會使Kruskal算法陷入困境的可能情況。

到目前為止,我已經考慮過可以在理論上測試Kruskal算法范圍的主要測試是所有權重都相同的測試用例。 一個示例如下所示:

4 4 
(4, 4) 4 //(4,4) vertex and weight = 4
(4, 4) 4 
(4, 4) 4 
(4, 4) 4 

我最終遇到的問題是,無論我做什么,如果嘗試減慢算法速度,我最終都將沒有最小的生成樹,最終將無法實際測試算法的界限。

為了強調Kruskal算法,您需要一個圖,該圖具有盡可能多的冗余邊,並且至少要考慮一個必要的邊(因為Kruskal算法按權重對邊進行排序)。 這是一個例子。

在此處輸入圖片說明

權重為1的邊是必需的,並且將被優先采用。 權重為2的邊緣是多余的,這將導致Kruskal算法在到達權重為3的邊緣之前浪費時間。

注意,Kruskal算法的運行時間主要取決於按權重對邊緣進行排序的時間。 添加其他中等重量的冗余邊緣將增加排序時間以及搜索時間。

Kruskal的算法包括兩個階段-對邊緣進行排序,然后執行聯合查找。 如果使用不相交集林並通過等級啟發法應用路徑壓縮和並集來實現第二階段,則排序將比第二階段慢得多。 因此,要為Kruskal創建最壞情況,您只需為正在使用的排序算法生成最壞情況。 如果您使用內置排序,則它會進行優化,從而使已排序數組的工作速度更快。

暫無
暫無

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

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