最小堆JAVA(Top K問題)

2021-08-09 13:57:25 字數 598 閱讀 3066

top k問題很多情況下比較常用的解決方法就是最小堆,最小堆的建立一般基於陣列來模仿樹的結構,左右子樹和父節點都可以根據數學關係式來呈現,**如下:

public

class

minheap

// 將陣列轉換成最小堆

private

void

buildheap()

}private

void

heapify(int i)

// 獲取右結點的陣列下標

private

intright(int i)

// 獲取左結點的陣列下標

private

intleft(int i)

// 交換元素位置

private

void

swap(int i, int j)

// 獲取對中的最小的元素,根元素

public

intgetroot()

// 替換根元素,並重新heapify

public

void

setroot(int root)

}

Java最小堆解決TopK問題

topk問題是指從大量資料 源資料 中獲取最大 或最小 的k個資料。對於這個問題,解決方法有很多 方法一 對源資料中所有資料進行排序,取出前k個資料,就是topk。但是當資料量很大時,只需要k個最大的數,整體排序很耗時,效率不高。方法二 維護乙個k長度的陣列a,先讀取源資料中的前k個放入陣列,對該陣...

最小堆及基於最小堆的最小優先佇列

最小堆具有的性質 最小堆的父親節點比子節點的值小 在最小堆的類中我們定義的函式主要有 維護最小堆 建立最小堆和利用最小堆進行排序 以下是最小堆的定義 ifndef my min heap h define my min heap h include includeusing namespace st...

最小堆建立

題目 實現最小堆兩個功能 1 增加乙個元素 2 輸出並刪除最小堆中的最小的數 輸入 第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。每次操作首先輸入乙個整數type。當type 1,增添操作,接著輸入乙個整數u,代表要插入的元素。當type 2,輸出...