A 尋路是一種廣度優先搜尋?

時間 2021-06-05 19:48:25

1樓:寨森Lambda-CDM

假如說待遍歷的圖是一棵二叉樹的話,那麼:

dfs是先序遍歷

bfs是層次遍歷

A*的遍歷有點特別。它是給所有節點賦予權重(就是h(n)=f(n)+g(n))。從根節點開始,擴充套件所有子節點,加入到優先佇列中。

然後把根節點拋掉,在優先佇列中找權重最小(或最大)的節點將其擴充套件,把它所有子節點加入優先佇列中並拋棄該節點。以此類推。

因此A*的遍歷模式跟dfs與bfs都不太一樣。與bfs的相同點在於每次都擴充套件某個節點的所有子節點。不同的地方在於bfs擴充套件順序固定且與權重無關,而A*的擴充套件順序由權重決定。

隨便舉個例子。(下圖是分支限界法解01揹包問題的圖,不是A*,你就把b看作是A*中的代價函式h(n)=f(n)+g(n)好了。這個圖就做個示意。)

每種方法遍歷的次序分別為:

dfs:ABDFGHIECJLNOPQMK

bfs:ABCDEJKFGLMHINOPQ

A*:ABCDEFGHIJKLMNOPQ

所以用到的資料結構也不一樣

dfs->棧

bfs->佇列

A*->優先佇列

此外,題中「A*接近最優解」的說法不太好。A*一定是最優解。不是最優解的叫A。

2樓:若羽

廣度優先搜尋是backward cost,通常用佇列資料結構,這是一種動態規劃的搜尋方式;深度優先搜尋是forward cost,通常用堆疊資料結構,這是一種貪心搜尋方式。

A*啟發式搜尋追求一種區域性最優解法,也就是所謂的啟發式函式選擇方向;同時,又有Depth-First Search死路回退的性質。因此,注釋是對的,「A*演算法是一種啟發式搜尋,可看做廣度優先搜尋和迪傑斯特拉演算法的發展。「。

變種版的廣度優先搜尋+深度優先搜尋。

3樓:趙施施

1. A*演算法我們都知道它是必能結束於最佳路徑上的,所以本質上是一種廣度優先搜尋。只有廣度優先搜尋才有可納性,深度優先可能找不到最優解!

2. 當啟發函式f(n)為0,就是廣度優先搜尋。

3. 從open表的排序中也可以看出,是對所有未拓展節點進行估價函式值的排序,而不是只對剛剛拓展節點進行估價值排序。

4樓:顧宇飛

DFS用遞迴。BFS用佇列。所以BFS相對與DFS的優點在於它記錄了區域性(最優的)結果,並且在接下來的計算中可以使用。A*顯然是要利用區域性最優結果的,所以是BFS。

在千尋位置工作是怎樣一種體驗?

現在已經混亂不堪,從2020年輪崗調整開始亂了,核心主力成員都走了,有的都寧可不要年終獎在年前就離職走了,裡面的情況可想面知。以前喊的是 一群有情有義的人幹一件有意義的事 今非昔比,現在的陣勢是 一群虛情假義塑料哥們姐妹,一起把有意義的事幹砸 見面互相稱大神,轉身互相罵S.B.某馬專案的專案經理被逼...

後廠村路是一種怎樣的存在?

小時候大概西二旗還沒修新地鐵站,軟體園才剛建完的時候,我爸接我回家最愛從那條路走,原因是不堵車。現在家門口通了地鐵,之後補辦身份證才去過幾次,我的天。 一碗紅燒肉 有一天晚上八點下的班然後不到兩公里的路活活堵了乙個小時我才發現 原來平常為了減少擁堵 我們大軟體園裡面按時上下班的人 應該不到一半 雨虛...

開車路怒症是一種怎樣的體驗?

一天世界晴 只要車上沒有乘客,我的路怒症百分百會發作,車上載著人就不會發作。40秒的紅綠燈過十來台車,真的窩火,乙個個右腿都跟殘疾一樣,油門被保險箱鎖住就別上路開車,真的搞心態。前方沒有任何車輛和障礙物,限速80爬50的,還是雙車道併排頂著你,真的該槍斃。紅綠燈不想等的,跑右轉專用道突個車頭想加塞我...