我找過方法來計算沒有。的在線連接組件。我注意到在大多數網站中,使用的算法是深度優先搜索。我相信你可以做到同樣的事情廣度優先搜索和聯盟找到。那麼爲什麼人們更喜歡使用DFS來查找連接組件的數量呢?與其他算法相比,深度優先搜索是一個更好的解決方案,用於統計圖中連接組件的數量?
4
A
回答
2
主要是因爲兩個原因:
- 它的簡單和短期。沒有數據結構是必需的(很好,我們需要一個堆棧,但遞歸處理)
- 它是內存友好型,Breath First Search的內存複雜度爲
O(V)
(V
是節點數)。另一方面DFS有O(h)
(h
是遞歸樹的最大深度)。
1
在複雜性方面它不會更好,因爲在所有情況下,您只需訪問一次節點。在內存使用方面,您將始終需要知道訪問了哪些節點以及哪些節點已找到並且尚未訪問。深度優先將在孩子的兄弟姐妹之前接受孩子節點並訪問其後代,而寬度優先將在孩子之前拜訪兄弟姐妹。深度優先是更短,更簡單,可以說是更直觀,這可能是其在教程,書籍和演示中比其他人更頻繁選擇的原因。
在很多情況下,要使用的堆棧是通過遞歸來處理的,但這不一定是個好主意,尤其是在大圖的情況下。
相關問題
- 1. 深度優先搜索算法 - 計數連接組件
- 2. 深度優先搜索(圖形方法)
- 3. 深度優先搜索算法
- 4. 深度優先搜索遞歸算法
- 5. Java算法深度優先搜索
- 6. 深度優先搜索算法實現
- 7. 遞歸深度優先搜索算法
- 8. 深度優先搜索算法序言
- 9. 深度優先搜索算法
- 10. 統一成本搜索與深度優先搜索
- 11. 深度優先搜索和廣度優先搜索瞭解
- 12. 迭代加深深度優先搜索比深度優先搜索更高的時間複雜度?
- 13. 方案深度優先搜索圖形函數
- 14. 深度優先迭代深化搜索與深度優先搜索
- 15. 圖的深度優先搜索
- 16. 在python中編寫更好的遞歸深度優先搜索
- 17. 廣度優先與深度優先搜索的輸入/輸出
- 18. 廣度優先搜索/深度優先搜索還是定向圖?
- 19. 如何跟蹤此對象圖深度優先搜索算法的深度?
- 20. Java - 深度優先搜索
- 21. 深度優先搜索
- 22. java深度優先搜索
- 23. 深度優先搜索(C++)
- 24. OCAML深度優先搜索
- 25. JavaScript深度優先搜索
- 26. 深度優先搜索確定深度
- 27. 如何模擬這個深度第一搜索解決方案
- 28. 深度優先搜索鄰接矩陣
- 29. 這個調度算法的更好的解決方案?
- 30. 廣度優先搜索算法方程
我想你是在研究競爭性的編程資源。在那裏,簡單性贏了,DFS通常需要更少的代碼。在現實世界中,它可能不是最好的解決方案。 –