簡體   English   中英

給定一組頂點,如何生成具有接近最小邊數的強連通有向圖?

[英]Given a set of vertices, how do you generate a strongly-connected directed graph with a near-minimal amount of edges?

我正在嘗試對我的圖類的dijkstras算法進行測試。 為此,我生成一個包含幾千個頂點的圖形,然后通過隨機添加數千條邊來連接圖形,直到連接圖形為止。 然后,我可以反復在任意兩個隨機頂點之間進行搜索,並確保它們之間存在路徑。 問題是,我經常最終得到一個幾乎密集的圖形,因為我使用鄰接列表表示,導致我的搜索算法非常慢。

問題 :給定一組頂點V,如何生成一個強連通的有向圖,其邊緣明顯少於相同頂點上的密集圖?

我在考慮簡單地做以下事情:

vertex 1 <--> vertex 2, vertex 2 <--> vertex 3, ..., vertex n-1 <--> vertex n

然后在整個圖形中隨機添加類似n / 10的邊緣,但這似乎不是提出隨機圖形結構來測試我的搜索算法的最佳方式。

一種方法是維護一組強連接組件(從|V|單頂點組件開始),並在每次迭代中,通過將每個組件的隨機頂點連接到一個連接組件,將它們的一些隨機子集合並為一個連接組件下一個隨機頂點,形成一個循環。

這將產生非常稀疏的圖形,因此根據您的使用情況,您可能還想要拋出一些額外的隨機邊緣。

編輯:直覺我認為你在決定在一次迭代中合並多少組件時,你想要使用指數分布。 不過,我對此沒有任何真正的支持。

我不知道是否有更好的方法,但至少這似乎有效:

  • 我會在隨機頂點之間添加E(有向)邊。 這將生成幾個頂點簇。
  • 然后,我需要連接這些集群以形成一個集群鏈,從而確保從集群中我可以到達任何其他集群。 為此,我可以將每個簇的隨機頂點標記為“主”頂點,並連接主頂點形成一個循環。 因此,您有一個由群集組成的強連通有向圖(不是頂點)。 最后一個主設備應該連接回第一個主設備,從而創建一個循環。
  • 現在,為了將它變成由頂點組成的強連通有向圖,我需要使每個簇本身成為一個強連接的有向圖。 但是,如果我從群集的主節點開始運行DFS並且每次找到葉子時,我都很容易從該葉子添加邊緣到其主頂點。 請注意,DFS不得遍歷群集。

我認為這可能有用,雖然拓撲結構不是真正隨機的,但它會像一個由連接在一起的較小圖形組成的大循環一樣循環。 但根據您需要測試的算法,這可能會派上用場。

編輯:

  • 如果之后您想要更隨機的拓撲,則可以在不同簇的頂點之間添加隨機邊。 這不會使規則無效並為您的算法創建更復雜的路徑。

暫無
暫無

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

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