10億個數中找出1000個最大的數的演算法思路:
1,先拿出前1000個數字,並排序,找出最小值為 minvalue .
2, 然後再依次拿出1000個數字,找出最大值為 tempmaxvalue.
3, 如果tempmaxvalue 比 minvalue 大, 則將 themaxvalue 放入前1000個數中,再排序並找出minvalue .
4 .. 依此類推。 即可得到1000個最大的數。
以下是本人測試的** 。可以參考,歡迎高手指正,謝謝!
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.collections;
namespace test
arraylist list = new arraylist(maxlength);
list.addrange(orignlist);
list.sort();
int retlist = new int[1000];
int j = 0;
for (int i = maxlength - 1; i > maxlength - 1000; i++)
console.writeline(" test end : " + datetime.now.tolongtimestring());
foreach (int i in list)
console.writeline("end: " + datetime.now.tolongtimestring());
}public static void testsort()
arraylist forelist = new arraylist();
if (maxlength > eachcount)
forelist.sort();
int addvalue = eachcount;
for (int j = 1; j < maxlength / eachcount +1 ; j++)
templist.sort();
for (int m = templist.count -1; m >=0 ; m--)}}
else
console.writeline(" test end : " + datetime.now.tolongtimestring());
foreach (int i in forelist)
console.writeline("end: " + datetime.now.tolongtimestring());}}
public class client}}
談從10億個數中找出前10萬個最大的
10億個浮點數大概佔據3g左右的空間,因此全部一次性讀入記憶體目前在個人pc上是不太現實的。本次討論不考慮記憶體等等,只考慮演算法。如果一次性比較排序,然後輸出前面最大的10w個,那麼眾所周知,演算法的時間複雜度不下於o n lgn 此處的n為數的個數 10億 如果用堆排序,由於堆排序像合併排序而不...
100億資料找出最大的1000個數字
這是網際網路領域乙個比較經典的演算法問題 top k 如何在巨大的資料中找出最大,或者訪問量最高的前10個,前100個或者前1000個資料。比如在2億使用者記錄中找出信用等級最高的,在上億個搜尋詞彙中找出被搜尋次數最高的10個關鍵字。前提是資料儲存在檔案中 一般遇到這個問題,第一反應會想到排序,但是...
100億資料找出最大的1000個數字
轉於 1 最容易想到的方法是將資料全部排序。該方法並不高效,因為題目的目的是尋找出最大的10000個數即可,而排序卻是將所有的元素都排序了,做了很多的無用功。2 區域性淘汰法。用乙個容器儲存前10000個數,然後將剩餘的所有數字一一與容器內的最小數字相比,如果所有後續的元素都比容器內的10000個數...