目前,我正在開發一個程序,可以解決(如果可能)任何給定的從3X4到26x30的尺寸迷宮。我使用adj matrix(稀疏)和adj列表來表示圖形。我想知道如何輸出DFS花費的總時間,然後使用另一種方法查找解決方案。在編程上,我怎麼能產生這樣的基準?圖形表示基準測試
圖形表示基準測試
回答
一種有用表與各種圖形實現,以計算出:
OPERATION EDGE LIST ADJ LIST ADJ MATRIX
degree(v) O(m) O(d(v)) O(n)
incidentEdges(v) O(m) O(d(v)) O(n)
areAdjacent(v1,v2) O(m) O(min(d(v1),d(v2)) O(1)
addVertex(v) O(1) O(1) O(n²)
addEdge(v) O(1) O(1) O(1)
removeVertex(v) O(m) O(m) O(n²)
removeEdge(e) O(m) O(d(v1)+d(v2)) O(1)
memory O(m+n) O(m+n) O(n²)
其中m
是邊緣的數量,n
是頂點的數目和d(vertex)
是在頂點鄰接元件的數量列表..形成矩陣實施有一個O(n²)
添加和刪除頂點,因爲你必須重新分配矩陣..
剛剛準備這篇文章,爲什麼我有它準備好:)
這與基準測試沒有直接關係,因爲通常您會研究您最需要的操作,並根據您的需求選擇正確的實施,所以這是一種「理論」基準測試,您可以通過研究將要實施。否則,你可以測量你的代碼需要在兩個實現中完成整個工作的時間並進行比較。
編輯:由於您使用稀疏矩陣實現操作的複雜性可能會稍微改變(通常會變得更糟,因爲您正在交易內存的速度)。
EDIT2:好了,現在我知道,這是Java的將是公平簡單:
long before = System.nanoTime();
/* execution of your algorithm */
long elapsed = System.nanoTime() - before;
答案是納秒和準確性不能保證,因此請謹慎使用這個東西。平均進行多次運行(並檢查差異是否較低,丟棄距離平均值較遠的結果)會使結果保持一致。
假設你有一個合適的方法,這應該相當簡單。只需將這兩種方法都包含在定時器中,並重復多次以獲得統計顯着性。
--test method with adjacency matrix
start = TimeNow()
repeat 1000 times
DepthFirstSearchWithAdjMatrix()
timePerSearch = (TimeNow() - start)/1000.0
--test method with adjacency list
start = TimeNow()
repeat 1000 times
DepthFirsySearchWithAdjList()
timePerOtherSearch = (TimeNow() - start)/1000.0
if timePerSearch < timePerOtherSearch
print "Adj Matrix is better than adj list"
else
print "Adj Matrix is worse than adj list"
@Martin:謝謝你的回答,我完全理解。請忍受我,因爲我從來沒有用過這樣的東西。你碰巧知道如何在java中調用TimeNow()? – Carlos 2010-04-17 00:02:02
找到了! import java.util.Date; - DateFormat dateFormat = new SimpleDateFormat(「yyyy/MM/dd HH:mm:ss」).... – Carlos 2010-04-17 00:06:10
在java中使用的更好的方法是系統時間http://java.sun.com/j2se/1.5 .0/docs/api/java/lang/System.html#currentTimeMillis%28 – Martin 2010-04-17 00:15:17
- 1. Netlogo基準測試
- 2. 基準測試NetBeans
- 3. 正則表達式庫基準測試
- 4. 是否有任何標準圖形數據結構可用於基準測試?
- 5. 基準測試AWS Cloudfront
- 6. Google基準測試主要
- 7. 基準測試:BSON vs JSON
- 8. 高速Javascript基準測試
- 9. 基準測試工具
- 10. Visual Studio PC基準測試
- 11. Hadoop基準測試:TestDFSIO
- 12. Windows下的基準測試
- 13. 基準測試fortran循環
- 14. Oracle 11g基準測試
- 15. 基準測試/分析JavaScript
- 16. Vogar簡單基準測試
- 17. Apache基準測試:總平均毫秒數表示什麼?
- 18. gpu的非圖形基準
- 19. Java中的多線程基準測試
- 20. 使用Python進行基準測試
- 21. Android和windows的基準測試(32位)
- 22. 服務器基準測試php性能
- 23. 編寫小型基準測試
- 24. 針對Express的Nginx基準測試
- 25. Java基準測試磁盤速度
- 26. 基準測試express.js登錄會話
- 27. 基準HTTP服務器,參考測試
- 28. Neo4j的性能基準測試
- 29. 速度基準測試tensorflow安裝
- 30. jmh:同時運行基準測試
非常漂亮的插孔,非常感謝。祝你好運與你的文章 – Carlos 2010-04-16 23:59:32
再次感謝夥計 – Carlos 2010-04-17 00:14:32
我從來沒有想過消除基準的差異,這可能是一個不錯的主意...... – Martin 2010-04-17 00:16:51