Tree Search(樹狀搜尋)

一、什麼是 Tree Search(樹狀搜尋)? 在人工智慧(AI)與演算法中,許多問題都可以表示成一棵樹(圖一): 起點(A) / | \ B C D /|\ | / \ E F G H I J 每個節點(Node)代表一種狀態(State)。 例如: 迷宮中的位置 棋局的盤面 路徑規劃中的城市 遊戲中的決策 搜尋演算法的目的: 從起點找到目標節點(Goal Node) 二、Breadth First Search (BFS) 核心思想 先搜尋離起點最近的節點。 一層一層往外擴展。 Level 0: A Level 1: B C D Level 2: E F G H I J 搜尋順序: A B C D E F G H I J 圖一結果: A → B → C → D → E → F → G → H → I → J 使用資料結構 Queue(佇列) FIFO: First In First Out 先進先出 例如: Queue: A 取出A 加入B,C,D Queue: B,C,D BFS特性 優點 如果邊權重相同: BFS一定找到最短路徑。 缺點 需要大量記憶體。 假設每個節點有10個子節點: 深度5: 10^5 = 100000 需要保存很多節點。 時間複雜度 O(V + E) V = Vertex(節點數) E = Edge(邊數) 三、Depth First Search (DFS) 核心思想 一路往下走到底。 不能走才回頭。 A | B | E 然後: A | B | F 搜尋順序 圖一結果: A B E F G C H D I J 使用資料結構 Stack(堆疊) LIFO Last In First Out 後進先出 例如: push(B) push(C) push(D) pop() => D DFS特性 優點 記憶體需求小。 只需保存: 目前路徑 即可。 缺點 可能找到很差的解。 例如: A ├── Goal └── 巨大子樹 DFS可能先跑完整個巨大子樹。 時間複雜度 O(V+E)...

Python 程式設計開發環境介紹

Python語言本身是直譯式的,也就是使用直譯器(interpreter)將Python程式碼轉換成機器碼(Machine Code),轉換過程可以參考這篇文章:Python 的底層架構。有了Python Interpreter就可以來寫程式了,而Python Interpreter可從官網下載 https://www.python.org/downloads/。但這樣子的方式不好除錯,所以就有了整合開發工具的出現,例如SpyderPyCharmIDLEJupyterVisual Studio Code等。底下就介紹筆者用過的一些開發環境。

IDLE
這個是從https://www.python.org/downloads/下載後,安裝好就會有的內建軟體。使用方式可參考底下影片。或是這篇教學文章:「利用IDLE簡易開發環境」。



Anaconda
Anaconda是一套Python Data Science的懶人包平台,包含很多的package,例如SpyderJupyterVisual Studio Code都可以從Anaconda安裝並執行。安裝方式可參考「Anaconda介紹與安裝教學」或是「Anaconda安裝

Visual Studio Code
Visual Studio Code是微軟開發的開源(Open Source)專案,本身是個編輯器,採外掛的方式來支援多種程式語言,Python程式語言也是其中之一。安裝部分可參考「Python in Visual Studio Code」或「Python Journey (2) - VS Code 基本使用技巧」。也可參考底下影片


線上Python IDE
若不想安裝一堆軟體在自己的電腦上,可考慮線上版的開發環境,此部分可參考紀老師程式教學網的「建構Python的開發環境」與「repl.it 雲端開發環境影音簡介」、Python 環境 — repl.it寫程式用的雲端 IDE等文章。

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

留言

這個網誌中的熱門文章