2013-10-26 119 views
0

我有一個以某一速率到達的int值流。每5分鐘,我想從這些值中計算出一些百分數,然後重新開始。使用固定數量的內存計算百分位數

問題:我不想浪費太多內存,所以我想只保留幾個KB的值。如果我的緩衝區在5分鐘內沒有填滿,我可以完美地計算百分位數。但是,如果緩衝區填滿了,我想開始刪除一些值(可能使用reservoir sampling和這裏建議的隨機驅逐 - Percentiles of Live Data Capture)。不幸的是,我找不到在兩種情況下都能很好地工作的解決方案 - 如果緩衝區未滿,我不想驅逐或忽略價值觀,一旦它變滿並開始驅逐,我總會引入偏見。

+0

緩衝區大小是多少? – vidit

+0

大小是可配置的。現在我有10,000個整數= 40KB。我可以把它做得更大,但是因爲我沒有辦法知道有多少價值會到達 - 這可能會隨着時間的推移而發生相當大的變化 - 我選擇的每個尺寸可能都不夠。而僅僅投擲10MB就太浪費了。 – user1424934

回答

0

好吧我想我已經想通了 - 我可以使用Algorithm R統一選擇一個固定大小的傳入元素子集。然後我可以從這個子集計算出百分位數。