我想增加所有葉子元素的價值。所有索引大於* floor [n/2]。提高所有葉子元素的價值的兩種解決方案
1)呼叫HEAP-INCREASE-KEY(A,I,密鑰)對每個葉元件
2)增加每個葉元件的新的值的鍵,然後調用BUILD-MAX-HEAP(A )
哪種方式更有效率,爲什麼?
有一點額外的信息,每次調用Max-Heapify需要花費O(lgn)時間,而Build-max-heap則會讓O(n)這樣的調用。因此,運行時間是O(nlgn)。 Heap-Increase-Key的運行時間是O(lgn)。
HEAP增-KEY(A,I,鍵)
if key<A[i]
error "new key is smaller than current key.
A[i]
while i>1 and A[Parent(i)]<A[i]
exchange A[i] with A[Parent(i)]
i=Parent()
BUILD-MAX-HEAP(A)
A.heap-size = A.length
for i = *floor[A.length/2] downto 1
MAX-HEAPIFY(A,i)
,如果你需要知道什麼MAX- heapify is
MAX-HEAPIFY(A,i)
l=Left(i)
r=Right(i)
if l<=A.heap-size and A[l] > A[i]
largest = l
else largest = i
if r<=A.heap-size and A[r] > A[largest]
largest = r
if largest not equal i
exchange A[i] with A[largest]
MAX-HEAPIFY (A.largest)
該聲明在書中提供。 –
因此,如果他們都有一個大於* floor [n/2]的指數,那不會影響任何東西嗎? –
@ GiBiT09我認爲這個條件適用於任何葉元素。 –