與或樹的盲目搜尋
與或樹的一般搜尋過程如下
(1)把原始問題作為初始節點s0,並把它作為當前節點
(2)應用分解或等價變換操作對當前節點進行擴充套件
(3)為每個子節點設定指向父節點的指標
(4)選擇合適的子節點作為當前節點,反覆執行第(2)步和第(3)步,在此期間需要多次呼叫可解標記過程或不可解標記過程,直到初始節點被標記為可解節點或不可解節點為止
上述搜尋過程將形成一棵與或樹,這種由搜尋過程形成的與或樹稱為搜尋樹。當搜尋成功時,經可解標記過程標識的由初始節點極其下屬的可解節點構成的子樹稱為解樹。
與或樹搜尋過程中的可解標記過程與不可解標記過程都是自下而上進行的,即由子節點的(不)可解性確定父節點、祖父節點的(不)可解性。
在與或樹中,除端節點和終止節點外,乙個節點的可解性完全是由其子節點來決定的。對與節點,只有其所有子節點都為可解時它才可解,只要有乙個子節點不可解它就不可解;對於或節點,只要有乙個子節點可解它就是可解的,僅當所有子節點都是不可解時它才為不可解。
可解標記過程:由可解子節點來確定其父節點、祖父節點為可解節點的過程
不可解標記過程:由不可解子節點來確定其父節點、祖父節點為不可解節點的過程
由於與或樹搜尋的目標是尋找解樹,因此,如果搜尋過程確定某個節點為可解節點,則其不可解的後裔節點就可以從搜尋樹中刪去;同樣,如果搜尋過程能確定某個節點未不可解節點,則其後裔節點也可以從搜尋樹中刪去。
與或樹的廣度優先搜尋
與或樹的廣度優先搜尋與狀態空間的廣度優先搜尋類似,只是在搜尋過程中需要多次呼叫可解標記過程或不可解標記過程,其搜尋演算法如下:
(1)把初始節點s0放入open表中
(2)把open表的第乙個節點取出放入closed表,並記該節點為n
(3)如果節點n可擴充套件,則做下列工作:
(4)如果節點n不可擴充套件,則做下列工作:
與或樹的深度優先搜尋
與或樹的深度優先搜尋和與或樹的寬度優先搜尋過程基本相同,其主要區別在於open表中節點的排列順序不同。在擴充套件節點時,與或樹的深度優先搜尋過程總是把剛生成的節點放在open表的首部
與或樹的有限深度優先演算法:
(1)把初始節點s0放入open表中
(2)把open表的第乙個節點取出放入closed表,並記該節點為n
(3)如果節點n的深度等於dm,則轉第(5)步的第一點
(4)如果節點n可擴充套件,則做下列工作
(5)如果節點n不可擴充套件,則做下列工作
與或樹的啟發式搜尋
與或樹的盲目搜尋時按確定路線進行的,沒有考慮要付出的代價,因而求得的解樹不一定是代價最小的解樹,即不一定是最優解樹。因此,我們需要考慮與或樹的啟發式搜尋。
與或樹的啟發式搜尋過程是一種利用搜素過程所得到的啟發性資訊尋找最優解的過程
對搜尋的每一步,演算法都試圖找到乙個最有希望成為最優解的子樹
最優解樹是指代價最小的那棵解樹
要尋找最優解樹,首先需要計算解樹的代價。在與或樹的啟發式搜尋過程中,解樹的代價可按如下規則計算:
(1)若n為終止節點,則其代價h(n)=0
(2)若n為或節點,且子節點為n1,n2,...,nk,則n的代價為h(n)=min(1<=i<=k)其中,c(n,ni)是節點n到其子節點ni的邊代價
(3)若n為與節點,且子節點為n1,n2,...nk,則n的代價可用和代價法或最大代價法
若用和代價法,則其計算公式為
h(n)=求和((c(n,ni)+h(ni)) i=1,2,......k
若用最大代價法,則其計算公式為 h(n)=max (1<=i<=k)
(4)若n是端節點,但又不是終止節點,則n不可擴充套件,其代價定義為h(n)=無窮大
(5)根節點的代價即為解樹的代價
為了找到最優解樹,搜尋過程的任何時刻都應該選擇那些最有希望成為最優解樹一部分的節點進行擴充套件。由於這些節點及其父節點所構成的與或樹最有可能成為最優解樹的一部分,因此稱它為希望解樹,也簡稱為希望樹。
搜尋過程:
(1)把初始節點s0放入到open表中,計算h(s0)
(2)計算希望樹t
(3)依次在open表中取出t的端點放入closed表,並記該節點為n
(4)如果節點n為終止節點,則做下列工作
(5)如果節點n不是終止節點,但可擴充套件,則做下列工作
(6)如果節點n不是終止節點,且不可擴充套件,則做下列工作
演算法 搜尋演算法 盲目搜尋和啟發式搜尋
對乙個圖進行搜尋意味著按照某種特定的順序依次訪問其頂點。在所有搜尋方式中,廣度優先演算法和深度優先搜尋演算法都十分重要,因為它們提供了一套系統地訪問圖資料結構的方法。我們著重講解廣度優先搜尋演算法。具體例子可看以下文章 廣度和深度解析 深度優先搜尋演算法 簡稱dfs 是一種用於遍歷或搜尋樹或圖的演算...
啟發式搜尋
啟發式搜尋 heuristically search 又稱為有資訊搜尋 informed search 它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍 降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。例題 八數碼問題 運用優先佇列,根據目前已經確定的位置算出目前的價值,並匯入...
啟發式搜尋
啟發式搜尋 啟發式搜尋就是在狀態空間中的搜尋對每乙個搜尋的位置進行評估,得到最好的位置,再從這個位置進行搜尋直到目標。這樣可以省略大量無謂的搜尋路徑,提高了效率。在啟發式搜尋中,對位置的估價是十分重要的。採用了不同的估價可以有不同的效果。在啟發式搜尋中,我們每次找到當前 最有希望是最短路徑 的狀態進...