算法大地
完全命中
@piepie01 @Arvin127
Outline
- Introduction
- Dynamic Programming
- Max flow
- 2-SAT
- Topological Sort
- Tree
- Greedy
做學問的人
做學問的人
Introduction
: There exist positive constants
such that
for all
and
Introduction
: There exist positive constants
such that
for all
and
- Most matter : time
- Times counting
Time -- selection sort
- Pick the largest one.
- Put it to the end of the list.
5 | 7 | 3 | ... | ... | ... | ... | 2 | 1 | 6 |
---|
n items
Time -- selection sort
- Pick the largest one.
- Put it to the end of the list.
5 | 7 | 3 | ... | ... | ... | ... | 2 | 1 | 6 |
---|
n items
Time -- selection sort
- Pick the largest one.
- Put it to the end of the list.
5 | 7 | 3 | ... | ... | ... | ... | 2 | 1 | 6 |
---|
n items
Time -- selection sort
- Pick the largest one.
- Put it to the end of the list.
5 | 7 | 3 | ... | ... | ... | ... | 2 | 1 | 6 |
---|
n items
Dynamic Programming
橘子的近親 -- 柳丁(暫定)
DP -- what really matter
- 將問題切成很多小問題
- 每個小問題會用到以前解過的小問題
DP -- Orange
- Weights : 1, 3, 5
- 什麼橘子都沒有,我們能擺出甚麼組合
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
weight
能擺成
DP -- Orange
- Weights : 1, 3, 5
- 什麼橘子都沒有,我們能擺出甚麼組合
- 1進來了
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
weight
能擺成
DP -- Orange
- Weights : 1, 3, 5
- 什麼橘子都沒有,我們能擺出甚麼組合
- 1進來了
- 3進來了
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
weight
能擺成
等等,什麼意思
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
weight
能擺成
第一堆 | 第二堆 | |
---|---|---|
第一種組合 | 0 | 1+3 = 4 |
第二種組合 | 1 | 3 |
- 我現在有1和3
- 表上的訊息代表什麼?
DP -- Orange
- Weights : 1, 3, 5
- 什麼橘子都沒有,我們能擺出甚麼組合
- 1進來了
- 3進來了
- 5進來了
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
weight
能擺成
DP -- Orange
- 有表了,然後呢?
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
weight
能擺成
- Sum = 1 + 3 + 5 = 9
- Mean = 9 / 2 = 4.5
- Answer = ?
Time -- Orange
- 來談談時間吧
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
weight
能擺成
- n = Sum
- 一個數字進來,更新表格:n
- 最多會有幾個數字:n
- 從平均尋找答案的最多次數:n / 2
Time -- Orange
- n = Sum
- 一個數字進來,更新表格:n
- 最多會有幾個數字:n
- 從平均尋找答案的最多次數:n / 2
- Time :
Greedy
橘子的近親 -- 柳丁(暫定)
Trivial Solution
- 讓兩兩和最大的值最小
- 先排序~
- 第一個配最後一個、第二個配倒數第二個......
- 最佳解?
Proof
- 定義:假設隨意一種配對中,兩兩和最大值為m
- 目標:任意的配對方式,都可以透過某種轉換變成我想的解答,而不增加m的值
- 符合這個目標,我們的證明就完成啦~
Proof
- 假設我們有六個數字,排序為a1, a2, a3, b3, b2, b1
- 我們的配對為(a1, b1), (a2, b2), (a3, b3)
a1 | a2 | a3 | b3 | b2 | b1 |
---|---|---|---|---|---|
1 | 3 | 4 | 6 | 8 | 10 |
Proof
- 現在將六個數字重新隨機配對,假如我發現某一個配對為(ai, aj)
- 一定有另一個配對為(bx, by) -- (想一下~~~
a1 | a2 | a3 | b3 | b2 | b1 |
---|---|---|---|---|---|
1 | 3 | 4 | 6 | 8 | 10 |
Proof
- 現在將六個數字重新隨機配對,假如我發現某一個配對為(ai, aj)
- 一定有另一個配對為(bx, by) -- (想一下~~~
a1 | a2 | a3 | b3 | b2 | b1 |
---|---|---|---|---|---|
1 | 3 | 4 | 6 | 8 | 10 |
- 但是,與其擺成(ai, aj), (bx, by),擺成(ai, bx), (aj, by), m值可能比較小
- 從表上想個例子
Proof
- 剩下的配對有可能是甚麼
- (a1, b3), (a3, b1) VS (a1, b1), (a3, b3)
a1 | a2 | a3 | b3 | b2 | b1 |
---|---|---|---|---|---|
1 | 3 | 4 | 6 | 8 | 10 |
2-SAT
貫徹愛與真實的正義
Intro to 2-SAT
- 小團體?
- 生活化
- 愛恨情仇
Intro to 2-SAT
- 現在你想辦一個班遊,但是你喜歡班上的某些人,也不喜歡班上的某些人
(小明or小美) and (不要小王or要小惠) and (...or...)......
This is 2-SAT
(x or y) and (not z or b) and (...or...)......
都市更新
(x or y) and (not z or b) and (...or...)......
- 起點 -> 終點
- 第一條路 : r1, r2
- 第二條路 : r3, r4
- 我們的式子 : (r1 and r2) or (r3 and r4)
- 我們不一樣
都市更新 之 直接解答
(x or y) and (not z or b) and (...or...)......
- (r1 and r2) or (r3 and r4)
- (r1 or r3) and (r1 or r4) and (r2 or r3) and (r2 or r4)
Tree
庭院深深深幾點
英文教室
- 根:root
- 葉子:leaf
- 深度:depth
- 子樹:subtree
- 節點:node
英文教室
- 根:root
- 葉子:leaf
- 深度:depth
- 子樹:subtree
- 節點:node
英文教室
- 根:root
- 葉子:leaf
- 深度:depth
- 子樹:subtree
- 節點:node
英文教室
- 根:root
- 葉子:leaf
- 深度:depth
- 子樹:subtree
- 節點:node
0
1
1
2
2
3
3
英文教室
- 根:root
- 葉子:leaf
- 深度:depth
- 子樹:subtree
- 節點:node
英文教室
- 根:root
- 葉子:leaf
- 深度:depth
- 子樹:subtree
- 節點:node
必勝法
猜拳贏就贏啦(?
Why?
不負責任證明:
因為每個人在每個節點會有最佳解,
所以一開始就可以知道誰會贏啦~~~
Why?
負責任證明:
現在有黃隊VS綠隊,假設黃隊先走
Why?
負責任證明:
現在有黃隊VS綠隊,假設黃隊先走
Tip:
從葉子們往上看
走任一條路徑的時候,誰會贏
In this case:
深度是偶數的黃色贏;反之綠色贏
搞定葉子了,接下來呢?
Why?
負責任證明:
現在有黃隊VS綠隊,假設黃隊先走
Tip:
從葉子們往上看
走任一條路徑的時候,誰會贏
In this case:
深度是偶數的黃色贏;反之綠色贏
節點上重要的是:
誰在選擇?
誰來選擇?(黃隊先走)
- 黃隊選擇
- 選哪都輸
- 這個節點贏的是綠色
誰來選擇?(黃隊先走)
- 綠隊選擇
- 選右邊會贏
- 這個節點贏的是綠色
誰來選擇?(黃隊先走)
- 黃隊選擇
- 選哪都輸
- 這個節點贏的是綠色
Why?
負責任證明:
現在有黃隊VS綠隊,假設黃隊先走
Tip:
從葉子們往上看
走任一條路徑的時候,誰會贏
In this case:
深度是偶數的黃色贏;反之綠色贏
節點上重要的是:
誰在選擇?
結論:
綠隊是後手,在這棵樹上,後手贏
Topological Sort
派派的派 > 派 > 派派
英文教室
- 相鄰: adjacent
- 環:cycle
- 分支度:degree
- 有向無環圖:DAG
(Directed Acyclic Graph)
英文教室
- 相鄰: adjacent
- 環:cycle
- 分支度:degree
- 有向無環圖:DAG
(Directed Acyclic Graph)
is adjacent to
英文教室
- 相鄰: adjacent
- 環:cycle
- 分支度:degree
- 有向無環圖:DAG
(Directed Acyclic Graph)
cycle: 可以跟著箭頭走到自己。
英文教室
- 相鄰: adjacent
- 環:cycle
- 分支度:degree
- 有向無環圖:DAG
(Directed Acyclic Graph)
in-degree: 有幾個進來的。
out-degree: 有幾個出去的。
degree = in-degree + out-degree
英文教室
- 相鄰: adjacent
- 環:cycle
- 分支度:degree
- 有向無環圖:DAG
(Directed Acyclic Graph)
DAG:
1. 圖的邊有箭頭 (directed graph)
2. 沒有環 (Acyclic)
拓樸排序
找出一個合理的大小關係
假設...
如果 A 比 B 還要大是
A
B
所以...
- A > C
- B > C
- A > D
- A > E
- C > E
- B > A
A
B
E
D
C
Step 1 : 找出所有 in-degree
A
B
E
D
C
0
1
2
2
1
Step 2 : 把in-deg=0的拔出來放到隊伍。
A
B
E
D
C
1
2
2
1
B
0
1
Step 3
重複 Step 2
A
E
D
C
2
1
B
1
1
0
A
Step 2-2 ...
0
E
D
C
1
0
B
0
A
What about multiple in-deg=0?
因為CD還沒有分出高下!
那接下來呢?
-
等到剩下一個in-deg=0的點
-
隨便選一個in-deg=0
那接下來呢?
-
等到剩下一個in-deg=0的點
-
隨便選一個in-deg=0
E
D
C
1
1
B
A
Step 2-3 ...(如果多加一個E > D
0
C
E
D
1
B
A
Step 2-4 ...
0
C
E
D
B
A
Step 2-5 - 終於排完了!
C
E
D
那接下來呢?
-
等到剩下一個in-deg=0的點
-
隨便選一個in-deg=0
隨便選一個in-deg=0
如果接下來都沒有提示,
其實就是先假裝它們已經有順序了!
Excercise
派派說要先找in-deg=0的點,
會不會本來就沒有這個東西呢?
不會!
拓樸排序不能有環(Acyclic)!
那麼沒有環代表什麼呢 :) ?
Flow
讓小河流一會
假設現在有一張圖...
s
t
S: 水源
T: 目標地點
邊:水管
邊上面的數字: 水管的容量
7
7
10
Maximum Flow Problem
要如何控制水流,
才能讓到T的水最大呢?
How 2 Solve ?
自己去讀演算法啦!
Any question?(頒獎~~~
投影片連結
第三名 -- 六小
分數:44.2
第二名 -- 一小
分數:45.3
第一名 -- 八小
分數:46
deck
By piepie01
deck
- 462