TopK 求陣列中N個資料中最大的K個元素

2021-09-19 10:31:27 字數 455 閱讀 9207

topk問題求解的最佳方式就是使用堆。

要求最大的k個元素,所以我們建乙個有k個元素的堆(為了方便,直接將前k個值放到堆中),調整堆的形態為小堆,堆頂的元素是最小值,將陣列中的每個數字和堆頂比較,如果該數大於堆頂,就把堆頂換成該數,同時使用堆的向下調整操作,將堆調整成排好序的堆,這樣依次迴圈,最後得到的就是最大的k個值

void adjustdown(int array,int size,int root)

//找到左右孩子中最小的乙個

//這裡一定有左孩子,判斷是否有右孩子

int right = 2*root+2;

int min;

if(right=0;i--)

}void topk(int array,int size,int k)

}}

求陣列中最大的K個數

最容易想到的就是迴圈遍歷陣列k次求出最大的k個數。這個演算法有許多的缺點 第一點就是速度不夠,它的時間複雜度中o k n 當陣列很大時,不能全部載入到記憶體中,這個演算法就不可行了。這道題目還有兩種比較優的解法 1.我們可以利用快速排序中的思想,快速排序每次都把資料分為兩個部分,第一部分大於某個數,...

列印N個陣列整體最大的Top K

問題描述 n個陣列用二維陣列表示 vector data 將所有數按照從大到小的順序進行排序,輸出前k個數,但這樣在面對海量資料時時間複雜度較高,利用堆的思想進行求解,步驟 1 建堆,將每個陣列的最後乙個數加入堆中,建立乙個大小為n的大堆 2 此時堆頂元素為所有資料中的最大的資料,輸出 3 假設堆頂...

列印N個陣列整體最大的TopK

題目 有n個長度不一的陣列,所有的陣列都是有序的,請從大到小列印這個n個陣列整體最大的前k個數。例如,輸入含有n行元素的二維陣列可以代表n個一維陣列。219,405,538,845,971 148,558 52,99,348,691 再輸入整數k 5,則列印 971,845,691,558,538 ...