堆积,动态规划-建中首页.PDF

堆积,动态规划-建中首页

CK6125 姜俊宇 堆積結構 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 特性 。 MIN-HEAPIFY (x) HEAP-UP (x) 1 l ← x × 2 1 while x 1 and Heap [x]Heap [PARENT(x)] 2 r ← x × 2 + 1 2 do exchange Heap [x] ↔Heap [PARENT(x)]) 3 if l ≤ n and Heap [l].key Heap [x].key 3 x ← Parent(x) 4 then min ← l 5 else min ← x INSERT (v) 6 if r ≤ n and Heap [r].key Heap [min].key 1 n ← n + 1 7 then min ← r 2 Heap [n] ← v 8 if min ≠x 3 HEAP-UP (n) 9 then exchange Heap [x] ↔Heap [min] 10 MIN-HEAPIFY(min) DELETE (x) 1 exchange Heap [x] ↔Heap [n] FIND-MIN () 2 n ← n – 1 1 return Heap [1] 3 if x 1 and Heap [x] PARENT(x) 4 then HEAP-UP (x) 想一想 5 else MIN-HEAPIFY (x) ACM 10954 Add All 給定一堆數 ,取出兩個數加起來之後丟回去,重複動作直到只剩一個數,問該數最小多少。 ACM 978 Lemming Battle!! 給定戰場數 、兩軍的兵數以各自的戰鬥力,每一輪各推派戰鬥力最強幾位的去各個戰場戰鬥,若一 方人數不足則戰場留空 。若雙方戰鬥力相同則同歸於盡,否則戰鬥力強者活且戰鬥力會變弱,變弱的 程度相當於對方

文档评论(0)

1亿VIP精品文档

相关文档