• 沒有找到結果。

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

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

• 不是競賽導向的題目

• Brainstorming

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

(3)

Heap

(4)

課程影片

• 看了嗎?

• Q&A

(5)

Heap 小知識

世界上的Heap有很多種

• 影片中介紹的Binary heap

• Binomial heap

• Pairing heap

• Thin heap

• Fibonacci heap

• ……

(6)

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

(9)

模擬情況

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

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

• 從一個Heap中Pop元素

• 合併兩個Heap

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

(10)

Heap 合併

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

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

• 合併呢?

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

• 複雜度O(Q*NlogN)

(11)

Heap 合併

• 那我們換一種方式

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

• 複雜度?

• O(Q*NlogN)

• QQ

(12)

Heap 合併

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

• 複雜度?

• O(Q*NlogN)…?

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

• 啟發式合併!

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

(13)

魔法

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

• 白魔法

• std::priority_queue

• 黑魔法

• __gnu_pbds::priority_queue

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

(14)

std::priority_queue

• #include <queue>

• std::priority_queue<int> pque;

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

(15)

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

(25)

A*

(26)

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?

• 歐幾里德距離?

• 曼哈頓距離?

• 當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

• 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: 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

• Consider Sokoban Game 倉庫番

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

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

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

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

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

(31)

Discussion

• Consider Sokoban Game 倉庫番

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

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

(32)

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

• 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跟Bob要有限度的心電感應。

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

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

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

(42)

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跟Bob要有限度的心電感應。

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

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

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

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

(44)

Alice and Bob

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

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

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

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

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

參考文獻

相關文件

Researches of game algorithms from earlier two-player games and perfect information games extend to multi-player games and imperfect information games3. There are many kinds of

Shih, “On Demand QoS Multicast Routing Protocol for Mobile Ad Hoc Networks”, Special Session on Graph Theory and Applications, The 9th International Conference on Computer Science

• 如果把 queue 換成

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

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

紅色 : 當今在的 Heap 被使用為合併後的 Heap...

– A finance charge will be levied if you fail to repay the outstanding balance of retail purchase or cash advances on the payment due date.. 

Heap/BFS/Basic