算法大地

完全命中

@piepie01 @Arvin127

Outline

  • Introduction
  • Dynamic Programming
  • Max flow
  • 2-SAT
  • Topological Sort
  • Tree
  • Greedy

做學問的人

做學問的人

Introduction

O(g(n)) = \{f(n)

: There exist positive constants 

c
n_0
0 \leq f(n) \leq cg(n)
n \geq n_0 \}

such that

for all

and

Introduction

O(g(n)) = \{f(n)

: There exist positive constants 

c
n_0
0 \leq f(n) \leq cg(n)
n \geq n_0 \}

such that

for all

and

  • Most matter : time
  • Times counting

Time -- selection sort

  1. Pick the largest one.
  2. Put it to the end of the list.
5 7 3 ... ... ... ... 2 1 6

n items

Optional

Time -- selection sort

  1. Pick the largest one.
  2. Put it to the end of the list.
5 7 3 ... ... ... ... 2 1 6

n items

n + (n-1) + (n-2) + ... + 2 + 1
Optional

Time -- selection sort

  1. Pick the largest one.
  2. Put it to the end of the list.
5 7 3 ... ... ... ... 2 1 6

n items

n + (n-1) + (n-2) + ... + 2 + 1
={{n^2 + n} \over 2}
Optional

Time -- selection sort

  1. Pick the largest one.
  2. Put it to the end of the list.
5 7 3 ... ... ... ... 2 1 6

n items

n + (n-1) + (n-2) + ... + 2 + 1
={{n^2 + n} \over 2}
Optional

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
Optional

Time -- Orange

  • n = Sum
  • 一個數字進來,更新表格:n
  • 最多會有幾個數字:n
  • 從平均尋找答案的最多次數:n / 2
  • Time : 
n^2 + {n \over 2}
Optional

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的點,

會不會本來就沒有這個東西呢?

 

Optional

不會!

拓樸排序不能有環(Acyclic)!

Optional

那麼沒有環代表什麼呢 :) ?

Flow

讓小河流一會

假設現在有一張圖...

s

t

S: 水源

T: 目標地點

邊:水管

邊上面的數字: 水管的容量

7

7

10

Maximum Flow Problem

要如何控制水流,
才能讓到T的水最大呢?

How 2 Solve ?

自己去讀演算法啦!

Any question?(頒獎~~~

投影片連結

第三名 -- 六小

分數:44.2

第二名 -- 一小

分數:45.3

第一名 -- 八小

分數:46

Made with Slides.com