我最近實施Dijkstra算法練習的Java。我現在正在考慮如何構建隨機測試圖(具有單向邊緣)。構建Dijkstra算法測試圖的策略?
目前,我使用了一個天真的方法。節點創建在2d空間中的隨機位置(其中x和y是0和某個MAX_SPACE常量之間的無符號整數)。隨機創建邊緣以連接節點,以便每個節點的出度至少爲1(最多MAX_DEGREE)。不履行不執行。然後,我搜索集合中第一個和最後一個節點之間的路徑,它可能連接也可能不連接。
在更實際的情況中,節點將必須被連接正比於它們在二維空間接近度的概率。用該屬性構建隨機測試圖的好策略是什麼?
注意
我將主要用它來建立一個可以得出並用手驗證圖表,但擴展到更大的圖形是一個考慮因素。
的策略應該很容易修改,以支持以下常數(或者其他人 - 讓我知道,如果你認爲任何有趣的的):
- MIN_NODES,MAX_NODES:爲圖的尺寸範圍
- 連通性:平均出度
- PROXIMITY:體重給予寧願連接近端節點
也許[GTgraph(http://www.cse.psu.edu/~madduri/software/GTgraph/index.html)工具可以對你有所幫助。它被用於在最短路徑挑戰下生成圖。另外我發現[this](http://videolectures.net/ecmlpkdd09_akoglu_rtg/)視頻。 – MadChuckle 2012-03-12 21:39:56
@MadChuckle:那兩個看起來都很有前途。謝謝! – theazureshadow 2012-03-12 21:50:53
@amit:是的,因爲羣集是許多真實世界情況的特徵。但我不希望任何答案包含*所有*功能。 – theazureshadow 2012-03-12 21:54:17