• 沒有找到結果。

貪心

N/A
N/A
Protected

Academic year: 2022

Share "貪心"

Copied!
30
0
0

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

全文

(1)

貪心 Greedy

Lecture By boook

Credit by qazwsxedcrfvtg14

(2)

課程影片

• 看了嗎?

• Q & A

• 本日大綱

• Greedy 怎麼想

• Greedy 練習題

(3)

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

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

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

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

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

𝑎1 = 2 𝑎1 = ⋯ 𝑎1 = 9

𝑎2 = 1 𝑎2 = 2

𝑎2 = ⋯ 𝑎2 = 9

𝑎𝑖 = 1 𝑎𝑖 = ⋯

𝑎𝑖 = 9

𝑎(𝑛-1)= 1 𝑎(𝑛-1)= ⋯ 𝑎(𝑛-1)= 9

𝑎𝑛 = 1 𝑎𝑛 = ⋯

5 8 𝒂

𝟏

2 𝒂

𝟐

7

3 𝒂

𝟑

1

(4)

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

• 三個思考的小方向:

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

• 可能這是最佳的選擇

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

• 檢查:如果答案長這樣,那這個答案會被考慮到

• 想想所有可能的情況,看看答案是不是都會被想到

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

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

(5)

幸運獸的難題

• 幸運獸負責供給食物給公園中的朋友們,但是因為每個朋友 的食量都不一樣,因此如何花最少錢買賈帕里饅頭才能滿足 所有的朋友成了最大的難題。

• 饅頭份量越大,價格越貴。

• 每位朋友一餐都只能吃一個饅頭。

(6)

貪心的天藍怪

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

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

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

• 現在給你一堆天藍怪,問最少需要多少能量才

能把他們變成一隻超大的天藍怪。

(7)

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

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

• 最優編碼樹的一些性質

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

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

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

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

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

(8)

亞可的問題

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

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

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

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

(9)

亞可的問題

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

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

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

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

• 題目可以等價轉換為:

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

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

(10)

線段三部曲V1 -51nod 1091

• 題意:線段的重疊

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

• 線段的重疊計算方式:

• [10, 20] 和 [12, 25] 的重疊部分為 [12, 20]。

• 請從 N 條線段中選出2條線段,並最大化兩條條線段的重疊長度

• 2 <= N <= 50000

(11)

線段三部曲V1 -51nod 1091

• 作法:

• 將線段依照左界來排序,依序「加入」過每一條線段

• 對每一條線段來說,已經在裡面的線段只有「右界」重要

• [當前左界, min(當前右界, max(舊右界))] 就是重疊區間

(12)

線段三部曲V1 -51nod 1091

(13)

線段三部曲V2 -51nod 1091

• 題意:不重疊的線段

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

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

• 線段的重疊計算方式:

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

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

• 2 <= N <= 10000

(14)

選擇最多不重疊的線段

(15)

可能的 Greedy 方法

• 想出一些 Greedy 的方案:

• 優先選擇最短的線段

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

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

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

(16)

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

(17)

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

(18)

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

(19)

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

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

(20)

線段三部曲V3 -51nod 1672

• 題意:區間交

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

• X 軸上每個位置都有各自的權重

• 線段的重疊計算方式:

• [10, 20] 和 [12, 25] 的重疊部分為 [12, 20] 。

• 請選擇其中 K 個線段,使這些線段全部的交集位置所對應的權重的和最 大。

• 2 <= N <= 100000

(21)

線段三部曲V1 -51nod 1091

• 作法:

• 將線段依照左界來排序,依序「加入」過每一條線段

• 對每一條線段來說,已經在裡面的線段只有「右界」重要

• [當前左界, min(當前右界, max(舊右界))] 就是重疊區間

(22)

線段三部曲V3 -51nod 1672

(23)

Jeff and Permutation-CF 351E

• 題意:

• 給一個長度為 N 的序列

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

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

• Subtask: 所有數字的大小都相異

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

(24)

• 假裝所有數字都不一樣

• 考慮絕對值最大的數字

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

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

• 那如果有一樣的數字呢

• 如果對於相同的數字同樣只考慮:

• 左右兩側「絕對值」比自己小的數字

• 那正負號的選擇會自動是: ---++++++

• 因此這樣 Greedy 一樣的數字並不會產生逆序對

Jeff and Permutation-CF 351E

(25)

排隊

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

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

• 山的定義為 A

1

<A

2

<...<A

m

>A

m+1

>...>A

N

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

(26)

排隊

• 與上一題目相同:

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

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

• O(N log N)

(27)

Dispute-CF 242D

• 題意:

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

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

• 這個點的權值會加一

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

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

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

• 使得對所有點 V_i != B_i

• N <= 100000

(28)

• 一句話題解:

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

• Why:

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

• 這個算法一定會停下來

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

Dispute-CF 242D

(29)

Jzzhu and Apples-CF 449C

• 題意:

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

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

• 最大化 pair 數量

• N <= 100000

• Subtask N <= 1000

• Hint: 偶數好多

(30)

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

• 大方向:

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

• 剩下的用偶數來填補

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

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

• 2p 一定還沒被配對,因此可以任意配對

• 如果沒剩下,那很棒 xD

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

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

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

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

Jzzhu and Apples-CF 449C

參考文獻

相關文件

本簡報旨在就常見的貪污風險及防貪措施提供一般介紹,而不會對各種情

現在的宗教,好像多數都介入了貪心、詐欺、迷信,甚至「邪教」橫行。近幾年來發生

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

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

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

貪心 Greedy. Lecture

貪心 Greedy. Lecture

此時,因貪污罪被罷官的歸安知縣吳之榮,發現此書是他再入官場的憑藉,也