2014-11-23 41 views
-1

給定大量數字(比如1兆)。你怎麼能把它們分成N個桶,每個桶都有一定範圍。 病例: 1.假設分佈不均勻 2.假設分佈是均勻的。在桶中劃分大量數字

+0

這是一個實際的編程問題,還是一個思維難題? – hatchet 2014-11-23 23:57:46

+0

是編程難題。我知道我們可以做類似K-Means Clustering的事情,但我想知道是否有更高效的創建桶的方法,比如0-9,10-19 .... n - n + 10,如果我們不知道數字的分佈。 – 2014-11-24 00:40:59

回答

1

如果不一致,並且您希望有相同數量的存儲桶,只需製作您自己的哈希表即可。

如果你有1000個1-1000的數字,並且你需要10個桶,那麼簡單地給出1-100的哈希碼爲0,101-200爲1.這很容易做到 - 你可以do(maxNum(首先是100)-1)/ 100(即1000/numOfBuckets)來查找散列表內數組的索引。

如果你想要均勻分佈 - 這有點困難。你將不得不首先考慮以前的不均勻分佈,然後重新組合,以便每個桶具有相同的數字。

重新編號時,只需取數字(遍歷每個存儲桶,查找大小並添加),然後除以存儲桶數。現在你有了新的lambda值。如果你不關心範圍不統一(如1-10,11-20,而不是1-15,15-20等),然後遍歷舊的散列表並添加到新的散列表w /新的lambda值,按順序填充 - 這是最接近你會得到(有時你會從lambda值-1)。

如果你不太關心原始的不均勻分佈,但是同樣的範圍,只需要把你有的數字的數量,使用一些簡單的排序,如quicksort排序,然後把(lambda值)桶。

不知道這是你的意思,但希望這有助於。

+0

謝謝,幫助 – 2014-11-24 05:21:41