簡體   English   中英

Min Fibonacci堆-如何實施增鍵操作?

[英]Min Fibonacci Heap - How to implement increase-key operation?

我一直在嘗試實現堆數據結構以用於我的研究工作。 作為其中的一部分,我正在嘗試為最小堆實現增加鍵操作。 我知道min-heap通常支持reduce-key。 我能夠為二進制最小堆編寫增加密鑰操作,其中,我以遞歸方式與最小的子交換交換增加的密鑰。

對於Fibonacci堆,在參考資料中,他們說Fibonacci堆還支持增加鍵操作。 但是,我無法在有關Fibonacci堆的原始論文中找到任何相關信息,也無法在CLRS(Cormen的算法簡介)中找到任何相關信息。

有人可以告訴我如何有效地執行增加鍵操作,又不打擾所有其他操作的數據結構攤銷范圍嗎?

首先,請注意,如果我們希望insert和find-min像在斐波那契堆中一樣保持𝑂(1),則增量鍵必須為𝑂(log𝑛)。

如果不是這樣,您可以通過執行𝑛次插入來排序𝑂(𝑛)時間,然后重復使用find-min來獲取最小值,然后使用∀𝑥:𝜔>在頭部增加increase鍵。 𝑥將頭推到底。

現在,知道增加鍵必須是𝑂(log𝑛),我們可以為其提供一個簡單的漸近最優實現。 要將節點increase增加到值𝑥,首先您要減小鍵(𝑛,-∞),然后是delete-min(),然后是insert(𝑛,𝑥)。
請參考這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM