1
A
回答
2
我猜的答案,我的問題是這樣的:
pick first k elements and store them into an array of length k
for each element x > k
insert x with probability k/x
choose position at random between 1 and k
1
簡單(如果k < = n)。這就像獲得k個號碼列表< n。這將是要獲得的數字位置的列表。創建範圍列表(0..n),從中獲得k個隨機數。直到最後一刻,您不必閱讀物品的實際列表。顯然,這只是有用的是最後的項目列表是慢讀(它是從磁盤或類似的東西讀取)。
爲了獲得項目的位置,只選擇做:
import random
itemstopick = random.Random().sample(range(0,n), k)
如果n,項目數是未知的,那麼你必須開始採摘第k個項目(即解決方案如果k = n)。然後,唯一的選擇是繼續閱讀物品,並選擇保留剛剛閱讀的新物品(並刪除另一個物品)或保持當前物品的狀態。要堅持一致的概率,您將不得不降低選擇最後一個讀取項目的概率。保持最後一項的概率應該總是P(k/n0),其中n0是當時n的值。我不相信你能做得比這更好。
如果你知道一些n的大小(值可以保證n大於它),只需要混合上面的兩個方法即可。首先用一個用minorant而不是n創建的列表,然後像未知n那樣繼續。
0
這取決於你是否有隨機值生成,如果你這樣做,比可能,如果不是你將不得不生成它們,你將需要從2 * k到3 * k左右的操作這種情況下,
0
- 跳過隨機數從當前位置的項目列表
- 就拿當前項目。
- 如果您已到達列表的末尾,請跳到列表的開頭並轉到步驟1
- 重複這些步驟k次。
相關問題
- 1. 隨機隨機化項目列表
- 2. 從Google表格中的列表中選擇隨機項目
- 3. 從序列中提取隨機項目
- 4. 在列表中生成隨機項目
- 5. 詞典:隨機密鑰和隨機數從鍵的列表中的項目
- 6. Python:從列表中隨機產生的項目只有兩個
- 7. 使用Numpy的random.choice從列表中隨機刪除項目
- 8. 從列表中隨機選擇比列出的項目更多的選項
- 9. 隨機追加列表中的項目到矩陣列表
- 10. C++隨機項目關閉列表
- 11. 從加權列表中選擇一個隨機項目
- 12. 從網格列表中尋找隨機噪聲類項目
- 13. 從角度js列表中隨機抽取一個項目
- 14. 從Python列表中選擇隨機項目
- 15. 從列表中拾取隨機項目,而不重複
- 16. 從列表中隨機抽取n個項目
- 17. 從列表中選擇一個隨機項目
- 18. 隨機從列表中選擇一個項目
- 19. 如何從列表中獲得最多10個隨機項目?
- 20. 從列表中選擇一個隨機項目,然後刪除隨機選擇的項目中包含相同單詞的後續列表項目?
- 21. UL中列表項的隨機(項目符號)圖像?
- 22. 從字典和隨機項目列表中挑選隨機列表並將其顯示在textBlock中?
- 23. 隨機項從條件列表
- 24. Prolog中的隨機項目
- 25. XSLT中的隨機項目
- 26. Python中的隨機列表選項
- 27. 從JavaScript Object中選擇隨機項目?
- 28. 從流中隨機收集項目
- 29. 從ArrayList中刪除隨機項目
- 30. 從NSMutableArray中刪除隨機項目
如果`K> = N`?你會得到所有物品嗎? – 2010-11-27 01:25:54
取第一個k,因爲你不知道他們是隨機的:) – 2010-11-27 01:28:32
n是未知的;然而,假設k <= n成立。前k項不是隨機的,它可能是一個排序列表。 – Bob 2010-11-27 01:38:46