• 沒有找到結果。

堆積結構Heap

N/A
N/A
Protected

Academic year: 2023

Share "堆積結構Heap"

Copied!
4
0
0

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

全文

(1)

CK6125 姜俊宇

MIN-HEAPIFY (x) 1 lx × 2 2 rx × 2 + 1

3 if l n and Heap[l].key < Heap[x].key 4 then min l

5 else min x

6 if r n and Heap[r].key < Heap[min].key 7 then min ← r

8 if minx

9 then exchange Heap[x] ↔ Heap[min]

10 MIN-HEAPIFY(min)

HEAP-UP (x)

1 while x > 1 and Heap[x]<Heap[PARENT(x)]

2 do exchange Heap[x] ↔ Heap[PARENT(x)]) 3 x ← Parent(x)

INSERT (v) 1 nn + 1 2 Heap[n] ← v 3 HEAP-UP (n) DELETE (x)

1 exchange Heap[x] ↔ Heap[n]

2 nn – 1

3 if x > 1 and Heap[x] < PARENT(x) 4 then HEAP-UP (x)

5 else MIN-HEAPIFY (x) FIND-MIN ()

1 return Heap[1]

堆積結構 Heap

Heap是一種頗常見且好用的資料結構之一,可以迅速插入刪除元素,並在O(1)的時間內找到極值。

Heap的性質

1. Heap是一棵完全二元樹(Complete Binary Tree)或是空樹

2. 每個節點必定小(大)於其子節點每個節點必定是以其為根的子樹中最小(大)的一個點。

Heap的實現

由於Heap是一棵完全二元樹,所以可以用一般的陣列(Array)實現。

令整棵Heap的root為heap[1],則節點heap[x]的左子節點為 heap[2x],右子節點為heap[2x+1]

Heap的操作(以下皆以Min-Heap為例) 最小堆化Min-Heapify(x) – O(lgn)

當heap[x]的兩個子樹heap特性時,將以heap[x]為根的整個子樹heap化。

上移元素Heap-Up(x) – O(lgn)

當heap[x]可能小於父節點時,將heap[x]作更動以保持heap特性。

插入元素Insert(x) – O(lgn)

將一個元素v插入heap中並保持heap特性。

刪除元素Delete(x) – O(lgn)

將位於heap[x]的元素從heap中刪除,並保持heap特性。

想一想

ACM 10954 Add All

給定一堆數字,取出兩個數字加起來之後丟回去,重複動作直到只剩一個數字,問該數字最小多少。

ACM 978 Lemming Battle!!

給定戰場數、兩軍的兵數以各自的戰鬥力,每一輪各推派戰鬥力最強幾位的去各個戰場戰鬥,若一 方人數不足則戰場留空。若雙方戰鬥力相同則同歸於盡,否則戰鬥力強者存活且戰鬥力會變弱,變弱的 程度相當於對方之戰鬥力,存活者回到陣營中,再選人進行下一輪,戰到至少有一方全滅為止,問是雙 方皆全滅或是藍、綠哪一方獲勝及獲勝方剩餘的戰鬥力,以非遞增方式輸出。

挑戰題 TIOJ 1402 淹水問題

在M*N的土地上,降下了相當多的雨水。水會往低處流,也會在低處積水。 一旦水越過了邊界,就會 流到外面去。請問這樣的地形最多能夠累積多少單位的水量呢?

類題

ACM 501,757,10787…. TIOJ 1128,1155,1161,1202,1221,1223,1304,1397-1403….

(2)

動態規劃法 Dynamic Programming(DP)

如同Divide & Conquer,DP將問題分割成數個子問題分別 的過程中會記錄子問題的答案,並不

DP的性質

(1) 子問題重疊性:當問題被分割時

(2) 最優子結構性:問題的最佳解包含了子問題的最佳解

DP問題限制

(1) 最優化限制:暫不管先前的策略與解答 (2) 無後顧限制:目前的最佳狀態決定後 DP 方法的步驟

(1) 分析問題,找出問題與子問題的關連性

(2) 找出DP的關係式(遞迴式、

(3) 利用Bottom-Up或Top-Down

(4) 根據上步驟所得到的答案找出最佳解

DP 的缺點 若相同子問題出現頻率過低時相當不適用

DP 的題型

『題1』費氏數列

F(n)=F(n-1)+F(n-2),F(1)=1,F(2)=1

『題2』生產線

現在有兩條生產線,每條線有n 要依序經過n個工作站(無論在哪條線上 從W1,x到W2,x+1需要T1,x的時間 生產線送出分別需要E1、E2、X1、

給定這些時間,若想以最快的方式生產一件產品

『題3』最大連續元素和

給定一個序列,問連續元素的和最大可為多少

『題4』Tri Tilling(Uva 10918)

問有多少方法可以用1x2的積木填滿

『題5』零錢問題(Uva 674)

某城市使用n種貨幣,面額分別是

『題6』零錢問題II(Uva357)

某城市使用n種貨幣,面額分別是

『題7』最大正方形(TIOJ1097 營地

有一塊m×n大小的土地,每一格標示

現在要蓋正方形房子,試問房子的邊長最大值為何

Dynamic Programming(DP)

將問題分割成數個子問題分別解決,但與D&C 並不重複計算相同的子問題。

當問題被分割時,分割後的子問題常常是『老問題』

問題的最佳解包含了子問題的最佳解

暫不管先前的策略與解答,目前所知所有的子問題解答可以構成問題的最佳解 目前的最佳狀態決定後,不會影響到之前所決定的最佳性

找出問題與子問題的關連性

、狀態轉移方程)

Down的方式計算最佳值(若題目要求最佳過程 根據上步驟所得到的答案找出最佳解。

若相同子問題出現頻率過低時相當不適用。

2),F(1)=1,F(2)=1,求F(n)?

n個工作站,第a條線上的第b個站需要Aa,b 無論在哪條線上),才能出廠。從工作站W1,x到W1,x+1

的時間;同樣的,從W2,x到W1,x+1需要T2,x

、X2的時間。

若想以最快的方式生產一件產品,要經過哪些工作站?

問連續元素的和最大可為多少?

的積木填滿3xn的格子?

面額分別是d1,d2,...,dn。請問湊出k元所需的最小貨幣數量為何

面額分別是d1,d2,...,dn。請問湊出k元的方法數有多少

營地)

每一格標示0的位置代表不能蓋房子,標示1的位置代表可以蓋房子 試問房子的邊長最大值為何。

CK6125 姜俊宇

D&C不同的是,DP在計算

目前所知所有的子問題解答可以構成問題的最佳解。

不會影響到之前所決定的最佳性

若題目要求最佳過程,則需一邊記錄)

Aa,b的時間。每一個貨物都

W1,x+1不需要花時間,但是

T2,x的時間。進入生產線和從

元所需的最小貨幣數量為何?

元的方法數有多少?

的位置代表可以蓋房子,

(3)

CK6125 姜俊宇

『題8』Little Red Riding Hood(Uva 11067)

給定一地圖的起點終點,只能往上跟往右走,路上有許多障礙物,問有幾種走法。

『題9』最長遞增子序列(LIS,Longest Increasing Subsequence)(Uva 481)

給定一個數列,請刪掉最少量的數字使得剩下的序列是嚴格遞增的(稱為LIS)。

『題10』最長共同子序列(LCS,Longest Common Subsequence)(Uva 10405)

給定兩個字串,請在分別刪除兩個字串中的某些字母,使得剩下的子字串完全相同,且子字串長度 最長。例如algorithm和alcoholism的LCS是aloim。

『題11』0-1背包問題(Knapsack Problem)

一個負重量為K的背包,以及N件物品,其重量及價值分別為Wi以及Ci。現在請你挑一些物品放進背 包(每件物品皆不可分割),但是這些東西的總重量不能超過K。試求放進背包物品總價值的最大值Cma

小問題:如果每件物品可以放無限個呢?_____________________________________________________

如果物品經過分組,每組最多選一件呢?_____________________________________________________

『題12』燈泡問題(95年建中校內賽考題)(TIOJ1007)

我們有一些不同的燈泡,裡面都有一條燈絲,但品質都不是很好,如果持續地讓燈泡亮著的話,燈 絲過一會兒就燒斷了,因此必須有時將電源切斷,讓燈絲降溫。

假設一個燈泡最多可以持續點亮 n單位的時間而不燒斷,而總時間是 m單位時間。請寫一個程式,

給定n和m的值,算出有幾種不同的明暗排列方式,每一種排列方式之中都不會出現亮超過連續 n單 位時間的區段。

『題13』A game(96年建中校內賽考題)(TIOJ1029)

「A遊戲」是個由兩個人玩的遊戲:有一串由N個正整數所組成的數列,兩個玩者輪流拿走一個最 左邊或最右邊的數,直到最後所有的數都取完之後,兩個玩者分別把自己所取到數加總,分數較高的人 獲勝。 今假設兩個玩者都是最佳玩家──也就是說,兩者都不會犯錯,會就目前狀況盡自己的力取得盡 量多的分數──試求兩個玩家所能得到的最高分數各為多少?

『題14』製造回文Palindrome(Uva 10944)

現在給你一個字串,請問最少插入幾個字可以使其變成一個回文

『題15』投擲骰子Dice Throwing(Uva 10759)

投擲 n 個一般的骰子(每個骰子有6面,分別有點數1到6點),點數總和至少 x 的機率是多少?

(1 <= n <= 24)和 x(0 <= x < 150)

『題16』加拿大旅行Canada Tour(USACO Chap5.4)

平面上有若干個城市,由西向東依次為c1, c2,…, cn。但並不是每個城市之間都有航線相通,只有某些城 市有飛機班次,這些相通的城市對是給定的。

現在希望從c1出發,一路經過的城市只能向東,到達某個城市後轉向,再一路向西經過若干個城市回

到c1,且這些城市都不能重複。問最多能經過幾個城市?

(4)

CK6125 姜俊宇

『題17』郵局設置問題EX(TIOJ1449)

在一條線上取n個點,每個點距離不同,問取k個點時,所有點離最近的選取點的距離和為多少?

『題18』矩陣相乘問題

給定一連串可以依序相乘的n個矩陣,請你找出一種相乘方式使得所需的總乘法數最少。

『題19』最佳搜尋二元樹Optimal Binary Search Tree

對於同一組數值資料,所形成的二元搜尋樹可能有很多種。現在給你每個數被查詢的次數,試找出 其中一種二元搜尋樹,使得所有數字被查詢時的總比較次數最少。

『題20』糊塗情報員(95年全國賽)(TIOJ1145)

給定一個算式,要求求出加了若干刮號後的最大值。

『題21』樹根The Tree(Uva10459)

給定一棵樹,問選定哪些節點當根,樹的高度會最高或最低。

『題22』煉金術(Uva10459)

在這個世界的規則是這樣的:

#1有種東西叫做價值,有形也好無形也好,價值就只是個價值,越高越好。

#2任兩物質融合後,一定會有一個物質被取代,而不會產生第三種物質。

在你眼前有著n樣物質,以及兩張紙張,上面各有一個n*n 的表格,分別是:

#1當兩個物質融合後所獲得的價值是多少

#2當兩個物質融合後會是哪個物質留下(另個物質會被取代掉) 身為一個稱職的鍊金術師,你要怎樣融合使獲得的價值會最高呢?!

『題23』松鼠吃松果nuts for nuts….(Uva 10944)

格子上有n個松果,其中n<=15。

試問:從原點出發,最少要走多少距離才能吃到所有松果再走回原點?

『題24』分隊問題Forming Quiz teams(Uva 10911)

你被指派一個任務要組隊參加一個猜謎比賽(MCA CPCI Quiz Championship)。有 2*N 個學生有興 趣參加,而你要把他們組成 N 隊,每隊2個人。由於隊友間需要在一起練習,學生們都希望隊友的家 盡可能離自己的家近一些。令 x1 代表第1隊隊員家之間的距離,x2 代表第2隊隊員家之間的距離,

依此類推。你必須要確保 x1+x2+x3+...+xn 為最小。

類題

ACM 711,10081,10482,10549,10558,10201,10154,10259,10261,10280,10379,10529,10559,10593,10599, 10604,10617,10635,10645,10690,10721,10723,10739,10755,10759,10817,10819,10827,10860,10874,10913 TIOJ 1014,1019,1043,1051,1096,1100,1118,1127,1134,1141,1126,1261,1301,1316,1357,1384-1391,1393-1395, 1410,1411,1432,1444,1447

參考文獻

相關文件

常生活的問 用資源 處理日 題,並蒐集處理 常生活問題的 問題所需的資 經驗。 源。.. 能正確且快速 能正確完成認 能完成認證。 得到認證。