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