我正在寻找最有效的算法来随机选择一组n个不同的整数,其中所有整数都在某个范围[0..maxValue].
约束:
我最初的想法是构造一个整数列表[0..maxValue]然后随机提取n个元素而不替换.但这似乎效率很低,特别是如果maxValue很大的话.
更好的解决方案?
我有以下代码$n从$arrayPHP中的数组中选择元素:
shuffle($array);
$result = array_splice($array, 0, $n);
Run Code Online (Sandbox Code Playgroud)
给定一个大数组但只有少数元素(例如5out 10000),这是相对较慢的,所以我想优化它,以便不是所有元素都必须被洗牌.值必须是唯一的.
我正在寻找最有效的替代方案.我们可以假设$array没有重复并且是0索引的.
我一直在使用random_element()SAGE提供的函数为给定的整数(N)生成一个特定长度(S)的随机整数分区.我正在尝试从给定值N和的所有分区的集合中生成无偏的随机样本S.SAGE的功能快速返回N(即Partitions(N).random_element())的随机分区.
但是,添加S(即Partitions(N,length=S).random_element())时它会大大减慢.同样,过滤掉N长度的随机分区S非常慢.
但是,我希望这对某人有帮助,我发现在函数返回N不匹配长度的分区的情况下S,共轭分区的长度通常为S.这就是:
S = 10
N = 100
part = list(Partitions(N).random_element())
if len(part) != S:
SAD = list(Partition(part).conjugate())
if len(SAD) != S:
continue
Run Code Online (Sandbox Code Playgroud)
这增加了S找到长度分区的速率,并且看起来产生无偏的样本(我已经针对各种值的N和来检查了整个分区集的结果S).
然而,我正在使用N(例如10,000)和S(例如300)的值,这甚至使得这种方法不切实际地缓慢.与SAGE random_element()功能相关的评论承认有足够的优化空间.那么,有没有办法更快速地生成与给定值匹配的整数分区的无偏(即随机统一)样本,N并且S可能不生成不匹配的分区S?此外,在许多情况下使用共轭分区可以很好地生成无偏差的样本,但我不能说我完全理解为什么.
我看过其他类似问题的帖子。我知道如何生成N个正整数。我也知道如何限制随机生成的整数的总和。唯一的问题是满足N个值均未超出指定范围的条件。
例如,generate_ints(n, total, low, high)应生成n个值数组,以使每个值介于低值和高值之间,并且总和加起来。任何指针/帮助将不胜感激。
例如generate_ints(4, 40, 4, 15)应该生成类似
[7,10,13,10]
Run Code Online (Sandbox Code Playgroud)
我不在乎数字是否重复,只要它们不高度偏斜即可。我np.randon.randint(5,15,n)用来选择整数。
到目前为止,我已经尝试了以下方法,但是它不起作用-
import numpy as np
import random
from random import uniform as rand
total=50
n=10
low=2
high=15
result=[]
m=0
nobs=1
while nobs <= n:
if m >= (total - low):
last_num= total -new_tot
result.append(last_num)
else:
next_num=np.random.randint(low,high,1)
new_tot = sum(result) + next_num
result.append(next_num)
m=new_tot
nobs +=1
print result
print sum(result)
Run Code Online (Sandbox Code Playgroud)
再次感谢。
我为这个简单的问题苦苦挣扎:我想创建一些随机的民意调查数字.我有4个变量需要填充数据(实际上是一个整数数组).这些数字应代表随机百分比.所有百分比均为100%.听起来很简单.
但我认为这并不容易.我的第一次尝试是生成一个介于10和base(base = 100)之间的随机数,并减去基数中的数字.这是3次,最后一个值被分配了基数.有更优雅的方式吗?
我的问题用几句话说:
如何用随机值填充此数组,这些值在加在一起时将为100?
int values[4];
random ×4
python ×2
algorithm ×1
arrays ×1
c ×1
combinations ×1
numpy ×1
performance ×1
php ×1
python-2.7 ×1
range ×1
sage ×1
shuffle ×1