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)...

Console-based or GUI-based game programming

先講題外話

敝人在初學程式設計時,電腦上已經是Windows 95系統了,也不懂什麼是作業系統(OS)。當時的敝人只是電腦的初學者,只會用電腦打打報告,上網聊天等。所幸找到The Java™ Tutorials,從Lesson: The "Hello World!" Application執行了自己的第一支程式,不過我花了快兩天的時間才執行成功。當下就分析自己為什麼會花這麼多時間:

1. 英文很爛。
2. 對電腦沒概念。
3. 打字慢。
4. 閱讀文章時,不會看重點。
5. 不知道如何找答案。

當時還有一個想法:既然網路上有英文的免費學習資源,何不加強自己的英文能力呢?
於是花了約一年時間加強自己英文的閱讀能力,後來的成果就不多說了。

進入主題
敝人相信從DOS就接觸電腦的人一定很了解且習慣Console-based的程式,因為DOS就是一個典型的Console-based OS,現今還是可以在少數地方看到DOS的足跡。簡單來說,Console-based application就是以文字介面為主的程式,但若加上觸碰螢幕與高階顯卡的話,可能就不是這樣定義了。

GUI-based Application又是怎麼回事?嗯,從程式的使用者來說好了,只要程式好用,才不管程式是Console-based還是GUI-based

但,開發程式的人就不一定會這麼想了,因為
Console-based的程式介面通常要花比較多的時間開發,GUI通常有library可以用。

問題:Console-based與GUI-based的程式哪個效能比較好?
(敝人可以忽略此問題嗎?)通常Console-based的程式校能比較好。

那此Blog的文章會以哪種為主呢?

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

留言

這個網誌中的熱門文章