我被分支和綁定的方法混淆最近。有分支定界方法三種搜索策略:走向深沉優先搜索,廣度優先搜索和最佳優先搜索。所有的書籍和文獻指出廣度優先和最佳優先將使用的計算機的內存越多。如何理解這一點?採取二叉樹爲例,從現場節點列表來處理採取的節點(父節點)時,兩個子節點(或子節點)生成並插入到活節點列表,但父親節點應刪除,因此,只有一個節點的內存增加。從這個角度來看,所有三個搜索策略以計算機相同的回憶。 我對不對?它讓我困惑了很久。任何人都可以給我一些建議嗎?如何理解廣度優先搜索的內存問題分支和約束
1
A
回答
0
好,
你能想到的數據結構:
廣度優先搜索: It's實現爲隊列。當你展開一個節點(父節點)時,你在隊列中包含子節點。父節點被刪除。 Let's做出了榜樣:
展開:我們包括在隊列中20和70,並刪除45這樣:
20 | 70
展開:我們擴大從隊列中第一個節點,包括他的兒子:
70 | 10 | 28
展開:我們擴大從隊列中第一個節點,包括他的兒子:
10 | 28 | 60 | 85
等等...
正如你可以看到的空間複雜度是指數:O()(B =支化因子; d =深度,初始爲0)
走向深沉優先搜索:它真實實現爲堆棧:
展開:我們包括在堆棧20和70,並刪除45這樣:
20 | 70
展開:我們擴大從堆棧頂部的第一個節點,包括他的兒子:
10 | 28 | 70
展開:我們擴大從堆棧頂部的第一個節點,包括他的兒子:
1 | 18 | 28 | 70
等等......
現在空間複雜度爲線性:O(d)。兩種算法的時間複雜度都是O()。
最佳優先搜索:排序根據啓發式評價函數F(N)的隊列和膨脹具有最佳F(N)的 succesor。空間複雜度是線性的:O(d)。
希望這會有所幫助。
相關問題
- 1. 深度優先搜索和廣度優先搜索瞭解
- 2. 廣度優先搜索解決難題
- 3. 廣度優先搜索問題C++
- 4. 爲什麼內存是使用廣度優先搜索時的主要約束
- 5. 廣度優先搜索分支因子和深度
- 6. 廣度優先搜索和深度優先搜索
- 7. 廣度優先搜索 - Java
- 8. 廣度優先搜索
- 9. 廣度優先搜索java.lang.NullPointerException
- 10. Java廣度優先搜索?
- 11. 如何使用廣度優先搜索解決難題?
- 12. 用廣度優先搜索解決迷宮問題
- 13. 如何實現廣度優先搜索?
- 14. 優先深度優先搜索廣度優先搜索或反之亦然
- 15. 實現A * - 搜索作爲廣度優先搜索/深度優先搜索
- 16. 深度或廣度優先搜索?
- 17. 廣度優先搜索僞代碼理解
- 18. 廣度優先與深度優先搜索的輸入/輸出
- 19. F#中的廣度優先搜索(BFS)
- 20. 廣度優先或深度優先搜索
- 21. 拓撲搜索和廣度優先搜索
- 22. 將廣度優先搜索轉換爲深度優先使用Java搜索
- 23. 廣度優先搜索/深度優先搜索還是定向圖?
- 24. 功能廣度優先搜索
- 25. BFS代碼(廣度優先搜索)
- 26. 並行廣度優先搜索
- 27. 廣度優先搜索 - 標準Python庫
- 28. 最短路徑 - 廣度優先搜索
- 29. 廣度優先搜索使用陣列
- 30. 廣度優先搜索練習 - AI
那真是太棒了!thx! – user3034556