• 沒有找到結果。

Lecture By meowmeowRangerCredit by qazwsxedcrfvtg14, boook 貪心 Greedy

N/A
N/A
Protected

Academic year: 2022

Share "Lecture By meowmeowRangerCredit by qazwsxedcrfvtg14, boook 貪心 Greedy"

Copied!
37
0
0

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

全文

(1)

貪心 Greedy

Lecture By meowmeowRanger

Credit by qazwsxedcrfvtg14, boook

(2)

課程影片 課程影片

• 看了嗎?

• Q & A

• 本日大綱

• Greedy 怎麼證明

• Greedy 怎麼想

• Greedy 練習題

(3)

What is Greedy?

What is Greedy?

• 做出對於當前情況下最佳的策略

(並希望他最終能導向最佳解)

(4)

Greedy Greedy

● Greedy-choice property: 全局最佳解包含當前最佳選擇

● Optimal substructure: 全局最佳解包含子問題的最佳解

● 應用 Greedy choice ,將問題劃分成子問題,根據 optimal su bstructure ,可以持續應用 Greedy choice ,以此類推下去,

直到找出全局最佳解。

(5)

Greedy 應該要怎麼想 - 枚舉在幹麼?

Greedy 應該要怎麼想 - 枚舉在幹麼?

• 枚舉事實上就是試圖拜訪整棵決策樹,找出樹裡的解節點

• 剪枝事實上就是根據一些推理排除絕對不可能的分支

• 有時候,我們可以根據一些問題的特性,確定解節點所在的分支!

• 總是選擇當前看起來最有利的分支,然後義無反顧

�1=1  

�1=2  

�1=…  

�1=9  

�2=1  

�2=2  

�2=…  

�2=9   ��=1  

��=…  

��=9  

 

(-1)

 

(-1)

 

(-1)

 

��=…   5 8

2 7

3 1

5 8

2 7

3 1

(6)

CSES - Tasks and Deadlines CSES - Tasks and Deadlines

• 你要執行 n 個任務,每個任務都有需要花費的時間以及死線,

• 你可以任意決定你要執行的順序,執行完一個任務後,你可以獲 得獎勵,獎勵是 f – d , f 是執行完該任務的時間 d 是他的死 線。

• 請最大化獎勵。

(7)

CSES - Tasks and Deadlines CSES - Tasks and Deadlines

● 對於一個任務 di – fi

● di 是固定的所以可以不用考慮他

● 目標 : 找到一個順序使得所有任務的結束時間的總和最小

● Greedy-choice: 選擇花費時間最少的任務先做

(8)

Greedy choice property Greedy choice property

● 反證法

● 考慮有一個最佳解使得花費時間最少的任務不是第一個執行的

● 我們可以將花費時間最少的任務跟第一個執行的任務交換順序

● 那這樣對於所有在原本第一個任務和花費時間最少的任務之間的 所有任務都會有比較小的結束時間,其他任務則不變

● 因此這樣交換會有更好的解

● 與假設矛盾 得證

(9)

Greedy choice property Greedy choice property

● 4 個任務且他們的花費時間是 {3, 4, 5, 6}

● 執行順序: 5 -> 4 -> 3 -> 6 結束時間: 5, 9, 12, 18

● 將 3 和 5 交換: 3 -> 4 -> 5 -> 6 結束時間: 3, 7, 12, 18 (better!)

(10)

Optimal substructure Optimal substructure

● 原問題:計算 n 個任務的結束時間的總和最小是多少

● Greedy choice 一個任務其花費時間是 d

● 原問題變成 d × n + 剩餘 n – 1 個任務的結束時間總和最 小是多少

● 原問題包含子問題的最佳解

(11)

CSES - Towers CSES - Towers

• 你有 n 個方塊,每個方塊都有大小,要把他們疊成塔且每一座 塔的大小由低到高必須是大到小

• 你需要依照給定順序去處理這 n 個方塊

• 對於每個方塊,你可以放到某個方塊的上面,或者是自己另外新 增一座塔

• 請問塔的數量最少是多少

(12)

CSES - Towers CSES - Towers

• 每次將方塊放到所有可放的塔中,最小的上面,如果不存在可以 放的位置就自己另成一座新塔

3

5 4 1

2

2

3

5 4 1

(13)

CSES - Towers CSES - Towers

● 假設存在一組最佳解沒有遵守我們的 Greedy 策略

● y < x1 < x2

● 最佳解把 y 放在 x2

• 我們需要證明把 y 放在 x1 上 也能是一組最佳解

x2

x1

INF INF INF INF

(14)

CSES - Towers CSES - Towers

●我們要證明,將 y 改放在 x1 上仍然存在一種方法可以堆出最佳解

●證明,可以將所有在 x2 以上的元素 跟 x1 以上的元素交換

● 因為 y < x1 且 x1 < x2 這樣交換之後仍然是合法的

● 仍然是一組最佳解

● 對於沒有遵守 Greedy-choice

的最佳解,我們可以把它轉換成有

遵守 Greedy choice 的解且仍然是最佳的

y

x2

x1

INF INF INF INF

(15)

貪心的天藍怪 貪心的天藍怪

• 如果有兩隻天藍怪 ( 大小為 A 和 B ) 靠在一起,

則會變成一隻大小為原本兩隻大小總和的新天藍怪,

並消耗 A + B 單位的能量。

• 現在給你一堆天藍怪,問最少需要多少能量才 能把他們變成一隻超大的天藍怪。

(16)

貪心的天藍怪 - 最優編碼樹 貪心的天藍怪 - 最優編碼樹

• 右邊是一棵當文本是「 THIS IS THE TEST T EXT XDDD 」時的最優編碼樹

• 最優編碼樹的一些性質

1. 一定不會有只有一個兒子的節點

2. 頻率越高的字元對應的葉節點深度越淺

3. 必定存在一棵最優編碼樹,使得頻率最低的兩個字 元對應的葉節點形成兄弟

4. 定義 為節點 形成的子樹中,所有葉節點的頻率 和。則某編碼樹為 ,把 中某節點 形成的子樹整 棵替換為一個頻率為 的字元形成新樹 ,那麼 為 新字元集的最優編碼樹當起僅當 為最優編碼樹。

•  

圖片來源 : http://huffman.ooz.ie/

(17)

亞可的問題 亞可的問題

• 路上總共有 N + M 張卡片,每張卡片可能都有不同的價值

• 現在想要選擇 N 張卡片帶回家

• 因為特殊的因素,你希望在留在地上的卡片的價值平均加上 帶回家的卡片的價值平均最小。

• 請問這個平值最小可以多小?

(18)

亞可的問題 亞可的問題

• 路上總共有 N + M 張卡片,每張卡片可能都有不同的價值

• 現在想要選擇 N 張卡片帶回家

• 因為特殊的因素,你希望在留在地上的卡片的價值平均加上 帶回家的卡片的價值平均最小。

• 請問這個平值最小可以多小?

• 題目可以等價轉換為:

• 選擇 N 張卡片把價值 * (1 / N)

• 選擇 M 張卡片把價值 * (1 / M)

(19)

線段三部曲 V2 -51nod 1091 線段三部曲 V2 -51nod 1091

• 題意:不重疊的線段

• X 軸上有 N 條線段,每條線段包括起點和終點。

• 現在起點或終點重疊,不算重疊

• 線段的重疊計算方式:

• [2, 3] 和 [3, 6] 不算重疊。

• 請從 N 條線段中選出最多條彼此不相交的線段

• 2 <= N <= 10000

(20)

選擇最多不重疊的線段

選擇最多不重疊的線段

(21)

可能的 Greedy 方法 可能的 Greedy 方法

• 想出一些 Greedy 的方案:

• 優先選擇最短的線段

• 優先選擇和線段最少重疊的線段

• 優先選擇比較早開始的線段

• 優先選擇比較早結束的線段

(22)

1. 優先選擇最短的線段 -WA

1. 優先選擇最短的線段 -WA

(23)

2. 優先選擇和線段最少重疊的線段 -WA 2. 優先選擇和線段最少重疊的線段 -WA

(24)

3. 優先選擇比較早開始的線段 -WA 3. 優先選擇比較早開始的線段 -WA

(25)

4. 優先選擇比較早結束的線段 -AC 4. 優先選擇比較早結束的線段 -AC

• 感性的想法:在「最短」的時間內得到一條線段

(26)

Jeff and Permutation-CF 351E Jeff and Permutation-CF 351E

• 題意:

• 給一個長度為 N 的序列

• 序列中的每一個數字你可以選擇要不要加上負號

• 請做出選擇最小化序列的逆序數對數量

• N <= 2000 (or N <= 200000)

(27)

• 每個數字獨立考慮

• 對於絕對值最大的數字

• 正負號只會影響左右兩側「絕對值」比自己小的數字

• 因此只需要關注那些「絕對值」比自己小的數字

• 以此類推

Jeff and Permutation-CF 351E

Jeff and Permutation-CF 351E

(28)

排隊 排隊

• 大家決定在校慶時排個整齊的隊形:依照身高排成像山的樣子。

• 因為一直換位置很累,所以大家想要最小化換位置的次數,但是 大家發現這個問題太難了,因此跑來問聰明的你有沒有什麼好方 法可以解決這個問題呢?

• 山的定義為 A1<A2<...<Am>Am+1>...>AN

• 每次只能把相鄰的兩人交換位置。

(29)

排隊 排隊

• 與上一題目相同:

• 由絕對值最小的開始考慮:

• 要移動到最左邊或是移動到最右邊

• O(N log N)

(30)

Dispute-CF 242D Dispute-CF 242D

• 題意:

• 給一個 N 點的無向圖,每一個點都有一個權值 V_i = 0

• 你可以選擇一個圖上的點「按一下」,那麼:

• 這個點的權值會加一

• 這個點的周圍的點的權值會加一

• 可以按很多個點,但每個點只能最多按一下

• 現在給出 B 序列,請選擇一些按鈕「按一下」

• 使得對所有點 V_i != B_i

• N <= 100000

(31)

• 一句話題解:

• 不斷地找到一個點 V_i == B_i ,然後按一下這個點

• Why :

• 每個點最多 V_i == B_i 一次

• 這個算法一定會停下來

• 算法停下來的時候一定滿足條件

Dispute-CF 242D

Dispute-CF 242D

(32)

Jzzhu and Apples-CF 449C Jzzhu and Apples-CF 449C

• 題意:

• 請把 1, 2, 3, …, N 這些數字分成很多 pair

• 滿足每個 pair 的最大公因數 != 1

• 最大化 pair 數量

• N <= 100000

• Hint: 偶數好多

(33)

• 偶數非常多:有一半是偶數

• 大方向:

• 不考慮偶數,盡量把數字 pair 都湊完

• 剩下的用偶數來填補

• 步驟:依序考慮每個 > 3 && <= N 的質數 p

• 把 p, 2p, 3p, …, N – N%p 裡面還沒配對的抓出來配

• 如果沒剩下,那很棒 xD

• 如果會剩一個那挑一個偶數留下

• 把最後剩下的偶數們對湊,最後只會剩下:

• 1 、 2p > N 的質數們 ( 這些數字不可能跟任何數字組成 pair)

• 一個偶數,因此這一定是最佳解

Jzzhu and Apples-CF 449C

Jzzhu and Apples-CF 449C

(34)

Greedy 應該要怎麼想 – 小技巧?

Greedy 應該要怎麼想 – 小技巧?

• 幾個思考的小方向:

• 沒有理由不這樣做:直接選一個選項,並確保不這樣選不會比較好

• 可能這是最佳的選擇

• 可能這個選擇不會影響到選擇最好的答案

• 將問題換個角度去看

• 可能會有一些直估的想法,或是會想到一些以前看過的題目

• 比賽中,乍看不是錯的可能就會是對的

• 想想看有沒有反例

• 容易實作的話也可以直接寫寫看

• 自己在練習時最好要去做正確性證明

參考文獻

相關文件

Greedy-Choice Property : making locally optimal (greedy) choices leads to a globally optimal

 “Greedy”: always makes the choice that looks best at the moment in the hope that this choice will lead to a globally optimal solution.  When to

最佳解裡面如果沒有greedy choice的話, 則想辦法 把最佳解裡面的一些東西和greedy choice互換. 結 果發現這個新解跟greedy choice一樣好

結 果發現這個新解跟greedy choice一樣好(也是一個 最佳解) 或者發現這個新解更好(矛盾, 所以最佳解

結 果發現這個新解跟 greedy choice 一樣好 ( 也是一個 最佳解 ) 或者發現這個新解更好 ( 矛盾 , 所以最佳 解裡面不可能沒有 greedy choice)... 證明

結 果發現這個新解跟greedy choice一樣好 (也是一個 最佳解) 或者發現這個新解更好 (矛盾, 所以最佳解 裡面不可能沒有greedy

● 應用 Greedy choice,將問題劃分成子問題,根據 optimal. substructure,可以持續應用

貪心 Greedy. Lecture