本章開始討論具體的演算法啦。首先要了解演算法複雜度是如何計算的。可以理解為實現目標需要計算的次數。比如遍歷n次加法,則複雜度為o(n)。
乙個問題可以拆分為5個組成:初始狀態、行動、轉換模型、目標測試、路徑代價。評估演算法效能:完備性、最優性、時間複雜度、空間複雜度。
搜尋方法來啦
搜尋方法分為uninformed search(blind search)和informed search (heuristic search)
uninformed search
3.4.1 breadth-first search(bfs): 廣度/寬度優先搜尋
這篇博文說的通俗易懂:
寬度搜尋擴充套件一下雙向廣度搜尋演算法,即是從起點跟終點分別做廣度優先搜尋,直到他們的搜尋過程中有乙個節點相同了,於是就找到了起點跟終點的一條路徑。
寬度搜尋的問題是:記憶體容易**式增長。時間也是要考量的因素。
這裡面涉及到數的節點搜尋。基本概念是
樹是資料結構,樹有很多節點(node),樹形結構就是各個元素之間具有分層關係的資料結構,常用一棵倒置的樹來表示邏輯關係。所謂的根節點就是樹的最頂端的節點(root node:沒有父節點)。繼續往下分為子節點(child note),分散出子節點的是(parent node),當不斷細分直到不再有子節點時為葉子節點(leaf node:無子節點)。具有同樣父節點的叫兄弟節點。子節點後的都叫子樹。
二叉樹:二叉樹(binary)是一種特殊的樹,它是每個節點最多有兩個子樹的樹結構,通常子樹被稱作是 "左子樹" 和 "右子樹",二叉樹常用於實現二叉搜尋樹和二叉堆。(這些在後面都會介紹)
完全二叉樹:設二叉樹的深度為
h,除第
h 層外,其它各層(1~
h-1)
的結點數都達到最大個數,第
h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。左邊不連續集中,就是不完全二叉樹。
滿二叉樹:除最後一層無任何子節點外,每一層上的所有結點都有兩個子結點的二叉樹被稱之為滿二叉樹。滿二叉樹一定是完全二叉樹,完全二叉樹不一定滿二叉樹。
3.4.2 uniform-cost search(ucs): 代價一致搜尋
一致代價搜尋是在廣度優先搜尋上進行擴充套件的,也被成為代價一致搜尋,他的基本原理是:一致代價搜尋總是擴充套件路徑消耗最小的節點n。n點的路徑消耗等於前一節點n-1的路徑消耗加上n-1到n節點的路徑消耗。一致性代價搜尋使用了優先順序佇列並在邊緣中的狀態發現更小代價的路徑時引入的額外的檢查。詳細的說明見博文
3.4.3 depth-first search(dfs): 深度優先搜尋
3.4.4 depth-limited search(dls): 深度限制搜尋
在深度優先搜尋中加入最大的深度搜尋數值。
3.4.5 迭代深度搜尋
當搜尋空間大且深度未知時候,在uninformed用迭代搜尋防範會更好。
3.3.6 bidirectional search 雙向搜尋
3.3.7 各種策略比較
3.5 informed/heuristic啟發式搜尋策略
3.5.1 greedy best-first search 貪婪最佳
3.5.2 a* search: minimizing the total estimated solution cost
這篇博文講的通俗易懂。
3.5.3 memory-bounded heuristic search儲存限制的啟發式搜尋
recursive best-first search
simplified memory-bounded a*
3.5.4 learning to search better
3.6 啟發函式
3.7 summary 總結
這一章節介紹了智慧型體在確定、可觀察、靜態和完全已知的可以尋找行為的方法。過程是搜尋。
必要條件:確定的目標、明確定義的困難
困難包含的五部分:初始狀態、一系列的行為、轉換模型、目標測試函式、路徑代價函式。
環境稱為狀態空間,在狀態空間中從初始狀態到目標狀態的路徑成為解決方案。
搜尋演算法認為狀態和行為為原子。
樹搜尋考慮所有的路徑為解決方法。圖搜尋避免多餘的路徑。
uninformed search:
breadth-first search(bfs): 廣度/寬度優先搜尋
uniform-cost search(ucs): 代價一致搜尋
depth-first search(dfs): 深度優先搜尋
iterative deepening search迭代深度搜尋
bidirectional search 雙向搜尋
informed search:
greedy best-first search 貪婪最佳
a* search: minimizing the total estimated solution cost
memory-bounded heuristic search儲存限制的啟發式搜尋
recursive best-first search
simplified memory-bounded a*
軟體測試的藝術第三章閱讀(一)
研讀 也是測試工作的一部分。是兩種主要的人工測試方法。要求組成乙個小組 3 4人,包含一位開發者 來閱讀或直觀檢查特定的程式 會議上所謂的brandstrom 可能這就是 review 只需找出錯誤,不必找出改錯誤的方法。即,是測試,不是除錯。1.檢查以組為單位,是一系列規程和錯誤檢查技術的集合 2...
第三章05 陣列與方法的引用操作
引用傳遞 是將堆記憶體資料交由棧記憶體操作,資料按照函式的操作改變。範例1與範例2中的函式都屬於引用操作。範例1 通過printarray int temp 列印陣列 public class maindemo printarray data public static void printarra...
人工智慧 一種現代方法 第4章 超越經典搜尋
2018.3.23 很多現實生活中的最優化問題目標與路徑是不相關的,諸如布局問題 八皇后問題。區域性搜尋演算法對於解決純粹的最優化問題十分有效,根據目標函式找到全域性最優狀態。即代價的全域性最小值,目標函式的全域性最大值。定義 不斷向值增大的方向移動,直到到達區域性最優 也被稱為貪婪區域性搜尋,貪婪...