該號碼。根據我的書: N(BFS) = b + b^2 + .... + b^d + (b^(d+1) - b)
其中b是分支因子,d是深度最淺的節點。但不應該只是b + b^2 + .... + b^d
?因爲那個,據我所知不是。的節點直到目標的深度。那麼爲什麼那裏有+ (b^(d+1) - b)
?廣度優先搜索生成的節點數量是多少?
1
A
回答
0
我認爲你所指的情況是當生成節點時評估測試條件;那麼BFS擴展最小深度處「目標」下的所有節點,除了目標節點本身的子節點。如果目標是在深度d
,最壞的情況是最後一片葉子不擴大(因爲它的目標):
1 + b + b^2 + ... + b*(b^d - 1) = 1 + b + b^2 + ... + b^(d+1) - b = (b^(d+2) - 1)/(b - 1)
2
有通過廣度優先搜索取決於在多個生成的節點的差異您使用的算法的變體。
如果應用目標測試到每個節點時,選擇它用於擴展(彈出開放列表/隊列的),那麼生成的節點的數量將是(在最壞的情況下):
1 + b + b^2 + b^3 + ... + b^d + (b^(d+1) - b)
,
其中d
是解決方案深度,而b
是分支因子(任何節點的後繼最大數目)。
這是因爲在實際選擇目標節點進行擴展之前,您必須生成目標節點的兄弟的子節點。而在最壞的情況下,目標節點將成爲選擇擴展的開放列表中的最後一個。
但是,這種通用的圖形搜索算法有一點小小的調整,就是目標測試在生成時應用於每個節點,而不是在選擇擴展時使用。
因此,假設解決方案再次處於深度d
。再次,在最壞的情況下,它是在該級別生成的最後一個節點。然後生成的節點總數爲:
1 + b + b^2 + b^3 + ... + b^d
。
所以在第一種情況下的空間複雜度爲: O(b^(d+1))
, 而在第二種情況: O(b^d)
。
相關問題
- 1. 廣度優先搜索完整圖的複雜度是多少?
- 2. 廣度優先搜索 - Java
- 3. 廣度優先搜索
- 4. 廣度優先搜索java.lang.NullPointerException
- 5. Java廣度優先搜索?
- 6. 廣度優先搜索和深度優先搜索
- 7. 深度優先搜索和廣度優先搜索瞭解
- 8. 優先深度優先搜索廣度優先搜索或反之亦然
- 9. 廣度優先搜索/深度優先搜索還是定向圖?
- 10. 深度優先搜索和圖中兩個節點之間的廣度優先搜索
- 11. 實現A * - 搜索作爲廣度優先搜索/深度優先搜索
- 12. 深度或廣度優先搜索?
- 13. 廣度優先與深度優先搜索的輸入/輸出
- 14. F#中的廣度優先搜索(BFS)
- 15. 廣度優先或深度優先搜索
- 16. 將廣度優先搜索轉換爲深度優先使用Java搜索
- 17. 功能廣度優先搜索
- 18. BFS代碼(廣度優先搜索)
- 19. 並行廣度優先搜索
- 20. 如何實現廣度優先搜索?
- 21. 廣度優先搜索 - 標準Python庫
- 22. 最短路徑 - 廣度優先搜索
- 23. 廣度優先搜索解決難題
- 24. 廣度優先搜索使用陣列
- 25. 廣度優先搜索練習 - AI
- 26. 廣度優先搜索錯誤輸出
- 27. 廣度優先搜索算法
- 28. 廣度優先搜索不起作用
- 29. 廣度優先搜索使用Javascript
- 30. 廣度優先搜索問題C++
您的書中是否包含定義的例子?我知道這會幫助我解決這個問題。 – 2012-08-16 15:23:09
@ Brian J它說:「在最糟糕的情況下,我們會擴展除_d_級別的最後一個節點以外的所有節點(因爲目標本身沒有擴展),因此在級別_d + 1_」 – Ghost 2012-08-16 15:28:02
處生成_b^d + 1-b_節點。有沒有人知道一個通用的算法。由BFS產生的節點 – Ghost 2012-08-16 15:39:12