200行數字每行200個 行內已從大到小排列 行與行之間無聯絡 如何從4W個資料中取出600個最大數?

時間 2021-06-01 02:09:19

1樓:

如果要求取出的600是有序的,用歸併(堆)。

否則可用600除以200等於3,比較200行每行的第三個數,將最大的那個所在行的前三個數取出,他們一定在前600中。

此時變成取597個數,遞迴此過程。

這種方法選取的結果是無序的。

2樓:ixnan

使用lua語言

1,首先取200行首個數字遍歷,取最大值,記 xMax2,將所有資料投入變數table, key = xMax - 每個資料的值 + 1, value = 座標

3,從小到大用for迴圈取出前600個數

空間複雜度為 O(1),前兩部快,第三部看數值分步

3樓:

令N為行數,M為行長度,求前K大

1 大根堆每行第乙個數拿出來建大根堆,堆節點同時儲存其行號和索引。O(n)

每次取堆頂元素,若不是所在行最後乙個,根據索引新增其所在行下乙個。每次操作O(logn)

K logN

2 歸併排序

每次歸併只保留前k大的部分

K logN

4樓:

隨便想了想:拓展到(N,k)的話(這裡的N=4W,每個row的長度就是根號N, k=600)

1)merge到乙個長度為k的array,O(N), 空間常數

2)建乙個大小為k的minimum heap, O(N), 新來的數比棧頂大就pop and push,空間常數

3)由quick select的啟發:

對每一行按中位數排序,中位數最小的一行在上面。任取乙個中位數,就取那個中位數的中位數吧。它所在的行和列把這個類似matrix的東西劃成4個區域,右下的任何乙個數一定比左上和左下的任何乙個數大,與右上任何乙個數的關係都不能確定。

換而言之,

1)右下這N/4的數一定在前N/2

2)左下任何乙個數都不在前N/4

3)左上任何乙個數都不再前3N/4

那左邊都不要了。

突然:T(n) = T(n/2) + (中位數排序) => log(N) < T(N) < N

///我認為中位數排序是o(N)

//因為,

大小為4k的時候,隨便怎麼弄吧。隨便想想的,總覺得不太對,請指正。

5樓:fantiny

你的問題按照我的理解其實是外部排序的後面歸併步驟。

相當於下面的外排序的第四步驟開始:

讀入100 MB的資料至記憶體中,用某種常規方式(如快速排序、堆排序、歸併排序等方法)在記憶體中完成排序。

將排序完成的資料寫入磁碟。

重複步驟1和2直到所有的資料都存入了不同的100 MB的塊(臨時檔案)中。在這個例子中,有900 MB資料,單個臨時檔案大小為100 MB,所以會產生9個臨時檔案。

讀入每個臨時檔案(順串)的前10 MB( = 100 MB / (9塊 + 1))的資料放入記憶體中的輸入緩衝區,最後的10 MB作為輸出緩衝區。(實踐中,將輸入緩衝適當調小,而適當增大輸出緩衝區能獲得更好的效果。)

執行九路歸併演算法,將結果輸出到輸出緩衝區。一旦輸出緩衝區滿,將緩衝區中的資料寫出至目標檔案,清空緩衝區。一旦9個輸入緩衝區中的乙個變空,就從這個緩衝區關聯的檔案,讀入下乙個10M資料,除非這個檔案已讀完。

這是「外歸併排序」能在主存外完成排序的關鍵步驟 -- 因為「歸併演算法」(merge algorithm)對每乙個大塊只是順序地做一輪訪問(進行歸併),每個大塊不用完全載入主存。

你的題目200行取 600個數,根據你自己的需求來設定不大於600的緩衝。

200元左右的數字板哪些比較好用?

無為 200左右就閉眼入高漫吧,他們家本身針對的入門級數字板,最貴的板子都沒wacom家最基礎的板子貴,而且高漫的板子配置幾乎都是頂配,對於預算有限或是新入門的同學用再合適不過了。比較推薦的是M6,現在也出了M7,是M6的公升級款,但是對於新手來說,公升級的功能不是很必要,考慮到預算的話M6還是最合...

負債累累200個,面臨全部逾期關不上,總有個瞬間想離開的衝動,怎麼能擺脫這種怪圈?

想乖寶 我也是負債,雖然沒有你那麼多,但是現在也是全面爆發的時候如果可以,我們可以成為朋友,一起加油還債,也可以把我自己的副業推薦給你!總能減輕一些負擔 畢竟,多乙份收入,就多乙份早日上岸的希望!加油,我們一起努力! 眼前的路我曾走過 本人半年負債150個,信用卡 各種網貸 銀行貸款 線下平台貸款。...

推薦乙個200內的耳機,學生黨?

賣核彈的小女孩 電音的話就是凍死打次,非常極度建議買高斯pp.那低音簡直第一次聽就被震撼了,500以下低音最強耳機,現在也就是100多 三魚先生 如果200元以內,只能推薦一款,那我一定會推薦漫步者TWS1!我覺得這是200元價位內,價效比非常高的一款真無線藍芽耳機,最主要的是音質表現還是非常出色。...