---
# System prepended metadata

title: DS 讀書會 - 第 14 週
tags: [' tossug', hackpad-import]

---

---
hackpadID: Ban0ccXFt8y
hackpadWorkspace: tossug
tags: hackpad-import, tossug
---
# DS 讀書會 - 第 14 週

03/03/2015

[« 回首頁](/JwdmDZwMwE3BacBGApgDngFkwYx/NAVjQxlgCZgkdo0AjNIA)

## 討論範圍

*   Graphs and Graph Algorithms (1/3)
    *   Objectives - Breadth First Search Analysis

## 預定進度

*   Graphs and Graph Algorithms (2/3)
    *   The Knight’s Tour Problem - Depth First Search Analysis

## 認領狀態

*   Building the Knight’s Tour Graph
    *   [Bruce Tsai](/ep/profile/oLLqeaQgDjg)
*   General Depth First Search
    *   [Bruce Tsai](/ep/profile/oLLqeaQgDjg)

## 心得筆記

*

[](http://www.slideshare.net/YiLungTsai/problem-solving-with-algorithms-and-data-structure-graphs)http://www.slideshare.net/YiLungTsai/problem-solving-with-algorithms-and-data-structure-graphs

**Graph**

Trees 就是 Graphs 的一種特例。

Vertex (node) 是節點

Edge (arc) 是連線，可能有或沒有方向性

vertex 都是平等的，所以沒有深度 (Tree 有 root node、leaf node，有深度)

vertex 和 edge 可以有一些屬性，例如顏色、權重...

**Undirected Graph**

G = (V, E)

V = {v1, v2, ...}

E = {(v1, v2), (v1, v5), (v2, v3), …}

(v1, v2) == (v2, v1)

**Directed Graph**

D = (V, A)

V = {v1, v2, ...}

E = {(v1, v2), (v1, v5), (v2, v3), …}

(v1, v2) != (v2, v1)

**Path**

Path 是一個起始 vertex 經過哪些 edge、vertex 到目的地 vertex 的路徑。

例如：v1 -> v3 -> v4

**Cycle**

Cycle 是起始 vertex 和目的地 vertex 是同一個點，所走過的 path 形成一個 cycle。

例如：v1 -> v5 -> v2 -> v1

**Adjacent**

某 vertex 和鄰近 vertex 透過 edge 相連。

**Adjacency Matrix**

可用來表示 graph，但佔用 n**2 空間，多數空間都沒用到。

**Adjacency List**

較 Adjacency Matrix 節省更多空間，透過一個 list 儲存所有 vertex，每筆 vertex 對應到一筆資訊。

**The Word Ladder Problem**

FOOL -> POOL -> POLL -> POLE -> PALE -> SALE -> SAGE

一次取代一個字母，最終換成想要的單字。這是一個 graph 問題。

每個字母都建 index，對應到符合的單字集合，接著透過 BFS 尋找解答。

**BFS (Breadth First Search)**

graph → tree → 從找到的leaf node往root node找，所得到的路徑即為graph中的path  

時間複雜度：O(V*L + 2*E) = O(V + E)

**補充資料**

平方根有個 magic number: 0x5f3759df。

平方根計算可用牛頓法，詳細證明請參閱第 2 週筆記。

Skip Lists 是一種隨機資料結構，實作簡單又快速，空間用很少，適合平行運算，可做為 BST 的另一個選擇。

隨機演算法有一些重要的應用，通常都是去證明它誤差範圍或出錯機率有多低，可以用低成本換取更高效益。

Trees 在現實生活中跟 file systems 密切相關，很多內建的演算法也都會用到。

四元想到 [](https://demo.sandstorm.io/)https://demo.sandstorm.io/ 也可以無痛快速建構 IPython Notebook。

au 翻譯的簡報 [](https://docs.google.com/presentation/d/1-ZVGV6qlQ2cug7Rl_qkSduiFkNLdCbSCuqIcLhd3sA4/edit)https://docs.google.com/presentation/d/1-ZVGV6qlQ2cug7Rl_qkSduiFkNLdCbSCuqIcLhd3sA4/edit

## 活動簽到

[Bruce Tsai](/ep/profile/oLLqeaQgDjg)

[Carl Su](/ep/profile/n5euV0AaWLn) 

[F](/ep/profile/tgNQRpN8EgG)[ourDollars](/ep/profile/tgNQRpN8EgG)

Freeman

[Manuel Stallman](https://tossug.hackpad.com/ep/profile/GgkcGJEol5r)

[RJ Hsiao](https://tossug.hackpad.com/ep/profile/BzrOLagTOUQ)

StarNight

[violetson](/ep/profile/oJusv72f72w)

[Yuan CHAO](/ep/profile/tWFK4EfMvdy)
