2014-02-19 21 views
-1

想象我根據選擇的下一個節點來擴展功能f(n)=cg(n)+(3-c)h(n)執行最優先搜索。如果我使用c=0,我會得到f(n)=3h(n)。我可以這樣說,與c=0搜索算法的行爲完全一樣,最好的第一次搜索或貪婪的最好的第一次搜索?我的回答是肯定的,因爲它只是向前看,不考慮g(n),我的感覺也是最好的第一次搜索,因爲它高估了乘以3,所以它不貪婪但我不確定我是否正確)。如何搜索算法正好與此函數的行爲:F(N)= 3H(N)

回答

2

您指的是像A *這樣的算法,它基於f-成本執行最佳優先搜索,其中f(n) = g(n) + h(n)和節點的g-成本是到達該節點,而h-成本是達到目標的估計成本。

Dijkstra算法使用f(n) = g(n)

純啓發式搜索或貪婪最佳優先搜索使用f(n) = h(n)

你的問題是會發生什麼,如果我有:

f(n) = c*g(n) + (3-c)*h(n)

c = 0這簡化爲:

f(n) = (3)*h(n)

這裏的3恆有搜索順序沒有影響,因爲所有節點的權重相同。所以,這最接近貪婪的最佳搜索。

+0

怎麼樣的情況下,當我們有f(N)= G(N)?我傾向於說統一的成本搜索,但另一方面,如果所有邊都是1,那麼我應該考慮BFS或DFS。你在這種情況下選擇什麼? –

+0

如果所有邊都是1,那麼你有一個BFS或一個統一的費用搜索。請參閱[均勻成本搜索維基百科頁面(http://en.wikipedia.org/wiki/Uniform-cost_search)瞭解更多詳情。 –

+0

是的,我知道。我問這是因爲我被要求爲這個場景選擇最合適的搜索算法,如果不提及所有邊都不是必須的,我認爲兩者適用於f(n)= g(n)1.如果你想回答你認爲兩者都適合嗎? –