雙端優先佇列 (DEPQ)


雙端優先佇列 (DEPQ) 或雙端堆被定義為一種類似於資料結構優先佇列,但允許根據儲存在結構中的鍵或專案的某種排序有效地刪除最大值和最小值。DEPQ 中的每個元素都與一個優先順序或值相關聯。在 DEPQ 中,可以按升序和降序消除或刪除元素。

操作

雙端優先佇列包含以下操作

isEmpty()

此函式負責檢查 DEPQ 是否為空,如果為空則返回 true。

size()

此函式負責返回 DEPQ 中存在的元素總數。

getMin(y)

此函式負責返回優先順序最低的元素 y。

getMax(y)

此函式負責返回優先順序最高的元素 y。

put(y)

此函式負責將元素 y 插入 DEPQ 中。

removeMin(y)

此函式負責刪除優先順序最低的元素 y 並返回此元素。

removeMax(y)

此函式負責刪除優先順序最高的元素 y 並返回此元素。

實現

雙端優先佇列可以從平衡二叉搜尋樹(其中最小和最大元素分別被視為最左和最右葉子)構建或形成,或者實現專門的資料結構,如最小-最大堆和配對堆。

從普通優先佇列獲得雙端優先佇列的通用方法是

雙結構方法

根據此方法,設定或維護兩個不同的優先佇列以用於最小值和最大值。兩個優先佇列中的相同元素透過對應指標顯示或展示。

這裡,最小和最大元素分別表示為最小堆和最大堆的根節點中包含的值。

刪除最小元素 - 對最小堆執行 removemin() 操作,並對最大堆執行 remove(節點值) 操作,其中節點值定義為最大堆中對應節點的值。

刪除最大元素 - 對最大堆執行 removemax() 操作,並對最小堆執行 remove(節點值) 操作,其中節點值定義為最小堆中對應節點的值。

總對應

一半的元素在最小優先佇列中,另一半在最大優先佇列中。最小優先佇列中的每個元素與最大優先佇列中的一個元素一一對應。如果 DEPQ 中的元素數量指示奇數值,則其中一個元素保留在緩衝區中,即特定的儲存區域。最小優先佇列中每個元素的優先順序都小於或等於最大優先佇列中對應元素的優先順序。

葉子對應

根據此方法,只有最小和最大優先佇列的葉子元素形成對應的一一配對。非葉子元素不需要形成一一對應配對。

區間堆

除了上述對應方法外,DEPQ 可以透過完美實現區間堆來獲得。區間堆就像一個嵌入的最小-最大堆,其中每個節點包含兩個元素。它被定義為一個完全二叉樹,其中 -

  • 左元素始終小於或等於右元素。
  • 這兩個元素都定義或指定一個閉區間。
  • 除根節點外的任何節點表示的區間表示為父節點的子區間。
  • 左側的元素定義或表示最小堆
  • 右側的元素定義或表示最大堆

更新於: 2020年1月2日

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.