• 沒有找到結果。

Heap/Flood Fill/Basic Graph

N/A
N/A
Protected

Academic year: 2022

Share "Heap/Flood Fill/Basic Graph"

Copied!
44
0
0

加載中.... (立即查看全文)

全文

(1)

Heap/Flood Fill/Basic Graph

2019/03/30

Lecture By zolution

Credit by qazwsxedcrfvtg14

(2)

Before We Start Before We Start

• 今天會有大量的討論時間

• 不是競賽導向的題目

• Brainstorming

• 找好你的 partner , 2-3 人一組

(3)

Heap

(4)

課程影片課程影片

• 看了嗎 ?

• Q&A

(5)

Heap 小知識 Heap 小知識

世界上的 Heap 有很多種

• 影片中介紹的 Binary heap

• Binomial heap

• Pairing heap

• Thin heap

• Fibonacci heap

• ……

(6)

Heap 小知識 Heap 小知識

• 為什麼會有這麼多種 Heap?

• 有的常數比較小

• 有的可以 O(1) 插入

• 有的可以 O(1) 刪除

• 有的可以 O(logN) 合併 ??

• 有的可以 O(1) 合併 ??!!

• 因為礙於篇幅,有興趣請自行上網查詢資料 :P

(7)

Heap 合併

I have a heap.

I have another heap.

Uhh!

A bigger heap!

(8)

Heap 合併 Heap 合併

• Heap 合併是什麼 ?

• 簡單來說就是把兩個 Heap 變成一個 Heap

(9)

模擬情況模擬情況

• 現在有 N 個 Heap ,有三種操作

• 把一個元素 Push 進其中一個 Heap

• 從一個 Heap 中 Pop 元素

• 合併兩個 Heap

• 假設總操作數最多 Q 次,總元素數最多為 N

(10)

Heap 合併 Heap 合併

• 先不管複雜度,來想個最天真的作法吧 ~

• Push 和 Pop 就照一般的做法做

• 合併呢 ?

• 開一個新的 Heap ,把原先兩個 Heap 的元素一個一個的 push 進 去

• 複雜度 O(Q*NlogN)

(11)

Heap 合併 Heap 合併

• 那我們換一種方式

• 把其中一個 Heap 的元素一個一個的 push 進另外一個 Heap

• 複雜度 ?

• O(Q*NlogN)

• QQ

(12)

Heap 合併 Heap 合併

• 那…如果我們把比較小的 Heap 慢慢加到另外一個 Heap 中呢 ?

• 複雜度 ?

• O(Q*NlogN)…?

• O(Nlog^2(N)+QlogN) ??!!

• 啟發式合併 !

• 考慮對於每一個元素,它每次被併入一個新的集合,它所處集合的大小至少 是原來的兩倍。所以對每個元素至多進行 logN 次合併操作,總複雜度 N*log N*logN

(13)

魔法魔法

• 幾個在 C++ 中關於 Heap 的魔法

• 白魔法

• std::priority_queue

• 黑魔法

• __gnu_pbds::priority_queue

• 能善用魔法是好事,但是要注意別走火入魔了 !

(14)

std::priority_queue std::priority_queue

• #include <queue>

• std::priority_queue<int> pque;

• priority_queue<int, vector<int>, greater<int> > lque

(15)

Discussion Discussion

• Insertion of Heap: O(logN)

• 所以 Build a heap of N element: O(NlogN)

• 很合理啊?!!!

• 其實這個 bound 不夠緊,可以壓到 O(N)

• HOW?

(16)

Flood fill

(17)

課程影片課程影片

• Q&A

(18)

淹水淹水

• 模擬「淹水」的過程很麻煩,幾個方向就要寫幾個很大串的 if

,怎麼辦?

• 提示:有沒有發現所有的 if 其實都長得很像?

(19)

淹水淹水

int dx[4]=[-1,0,0,1];

int dy[4]=[0,-1,1,0];

for(int i=0;i<4;i++)

if(check(x+dx[i],y+dy[i]))

queue.push(x+dx[i],y+dy[i]);

(20)

想一想想一想

• 可不可以用 DFS 來做例題一 ( 染色問題 ) ?

• 可不可以用 DFS 來做例題二 ( 喵喵抓老鼠 ) ?

• 有沒有什麼壞處?

• 複雜度是多少呢?

• 如果題目是,每個格子都有一個高度值,高度值低於一定程度就 會淹水,請問到最後會有幾塊水窪 ?

• 用 BFS 可以做嗎 ?

• 用 DFS 可以做嗎 ?

(21)

A* Search

Credit to Theory of Computer Games, 2018 Fall

(22)

A*A*

• A-star Algorithm

• 估算最好的選擇會是哪一個 state ,就先搜他

• BFS with Heap!

• f(x) = g(x) + h(x)

• f(x): Evaluation Function( 評價 )

• g(x): Cost Function( 實際已花費 )

• h(x): Heuristic Function( 估算未來需要多少 Cost)

(23)
(24)

Normal BFS Normal BFS

(25)

A*A*

(26)

A*A*

• 常在爆搜的情境下用到

• 節省不必要,偏差的 State ,先搜最有可能的 State

• 走迷宮:會 Prefer 往終點方向的 State

• 下棋:會 Prefer 己方子力大的 State

• 解 Puzzle : Prefer 靠近解答的 Move

• f(x) = g(x) + h(x)

• f(x): Evaluation Function( 評價 )

• g(x): Cost Function( 實際已花費 )

• h(x): Heuristic Function( 估算未來需要多少 Cost)

(27)

Heuristic Function Heuristic Function

• 想一想,走迷宮的時候你會怎麼設計 Heuristic Function?

• 歐幾里德距離?

• 曼哈頓距離?

• 當 h(x) 等於 0 時,等同 BFS

• 那 DFS 呢?

• f(x) = g(x) + h(x)

• f(x): Evaluation Function( 評價 )

• g(x): Cost Function( 實際已花費 )

• h(x): Heuristic Function( 估算未來需要多少 Cost)

(28)

Discussion Discussion

• A* 一定會找到最佳解嗎?有條件限制嗎?

• f(x) = g(x) + h(x)

• f(x): Evaluation Function( 評價 )

• g(x): Cost Function( 實際已花費 )

• h(x): Heuristic Function( 估算未來需要多少 Cost)

(29)

Admissible Heuristic Admissible Heuristic

• Admissible Heuristic: Never “Overestimate”

• 不高估的狀況下, f(x) 永遠不會比真實需要的最小值還大

• 根據 Min-Heap ,這個點一定會被搜到,且是最佳解

• We need a lower bound estimation that is as large as possible (T.S. Hsu, 2018)

• f(x) = g(x) + h(x)

(30)

Discussion Discussion

• Consider Sokoban Game 倉庫番

• 請與你的組員設計一個 Heuristic Function ,估算還需要多少 C ost 才能將箱子推到終點

• f(x) = g(x) + h(x)

• f(x): Evaluation Function( 評價 )

• g(x): Cost Function( 實際已花費 )

• h(x): Heuristic Function( 估算未來需要多少 Cost)

(31)

Discussion Discussion

• Consider Sokoban Game 倉庫番

• 請與你的組員設計一個 Heuristic Function ,估算還需要多少 C ost 才能將箱子推到終點

• 有沒有一些狀態可以事先剪枝的?

(32)

A*A*

• 優缺點節省不必要,偏差的 State ,先搜最有可能的 State

• 走迷宮:會 Prefer 往終點方向的 State

• 下棋:會 Prefer 己方子力大的 State

• f(x) = g(x) + h(x)

• f(x): Evaluation Function( 評價 )

• g(x): Cost Function( 實際已花費 )

• h(x): Heuristic Function( 估算未來需要多少 Cost)

(33)

Discussion Discussion

• A* 一定會找到最佳解嗎?有條件限制嗎?

• f(x) = g(x) + h(x)

• f(x): Evaluation Function( 評價 )

• g(x): Cost Function( 實際已花費 )

• h(x): Heuristic Function( 估算未來需要多少 Cost)

(34)

Graph

(35)

課程影片課程影片

• Q&A

(36)

存圖存圖

• 當我們需要動態加邊的時候,該怎麼做 ?

• 當我們需要刪邊的時候,該怎麼做 ?

• 還有很多有趣的存圖方式 !

• 其實應該算是原本那兩種的變種

(37)

存圖存圖

• 相鄰串列

• 相鄰矩陣

(38)

比較比較

• 相鄰矩陣

• 空間複雜度: O(V2)

• 查詢兩個點之間是否有邊: O(1)

• 遍歷一個點 v 周圍的邊: O(V)

• 增加一條邊: O(1)

• 刪除一條邊: O(1)

• 相鄰串列

• 空間複雜度: O(V+E)

• 查詢兩個點之間是否有邊: O(degree(V))

• 遍歷一個點 v 周圍的邊: O(degree(V))

• 增加一條邊: O(1)

• 刪除一條邊: O(degree(V))

(39)

想想看想想看

• 給你一張有向圖,要怎麼知道這張圖上面有沒有環 ?

• DFS?

• BFS?

(40)

想想看想想看

• 現在有一個工廠,裡面有很多台機器,有些機器所生產 的東西可能會依賴於其他機器,但是保證不會循環。

• 問 : 找出一個機器的執行順序使得過程中不會有機器依 賴於還沒執行過的機器。

• 拓樸排序 !

• 有向無環圖 (DAG)

(41)

Alice and Bob Alice and Bob

• 有一個遊戲, Alice 跟 Bob 要有限度的心電感應。

• Alice 跟 Bob 可以事前溝通,他們也知道每一回合的形式。

• 主持人會公開 N ,代表圖中有 N 個點。

• Alice 會看到主持人的圖, Bob 則看不到

(42)

Alice and Bob Alice and Bob

• 有一個遊戲, Alice 跟 Bob 要有限度的心電感應。

• Alice 跟 Bob 可以事前溝通,他們也知道每一回合的形式。

• 主持人會公開 N ,代表圖中有 N 個點。

• Alice 會看到主持人的圖, Bob 則看不到

• ROUND 1: 主持人給定一張圖, Alice 可以傳一個 N^2 個字元 的 0/1 字串給 Bob ,而 Bob 必須要還原出主持人的圖

(43)

Alice and Bob Alice and Bob

• 有一個遊戲, Alice 跟 Bob 要有限度的心電感應。

• Alice 跟 Bob 可以事前溝通,他們也知道每一回合的形式。

• 主持人會公開 N ,代表圖中有 N 個點。

• Alice 會看到主持人的圖, Bob 則看不到

• ROUND 2: 主持人給定一棵樹, Alice 可以傳一個 NlgN 個字元 的 0/1 字串給 Bob ,而 Bob 必須要還原出主持人的樹

(44)

Alice and Bob Alice and Bob

• 有一個遊戲, Alice 跟 Bob 要有限度的心電感應。

• Alice 跟 Bob 可以事前溝通,他們也知道每一回合的形式。

• 主持人會公開 N ,代表圖中有 N 個點。

• Alice 會看到主持人的圖, Bob 則看不到

• ROUND 3: 主持人給定一棵樹, Alice 可以傳一個 2N 個字元的 0/1 字串給 Bob ,而 Bob 必須要還原出主持人的樹的長相

參考文獻

相關文件

3.2 Rolle’s Theorem and the Mean Value Theorem 3.3 Increasing and Decreasing Functions and the First Derivative Test.. 3.4 Concavity and the Second Derivative Test 3.5 Limits

Young people like to play computer

Department of Mathematics, National Taiwan Normal University,

Playing computer games is interesting for my brother.(To play computer games is interesting for my brother.)(It is interesting for my brother to play computer

Department of Mathematics, National Taiwan Normal University, Taiwan..

• 如果把 queue 換成

Credit to Theory of Computer Games,

Credit to Theory of Computer Games, 2018 Fall.. Normal BFS