相关疑难解决方法(0)

随机选择一组不同整数的最有效方法

我正在寻找最有效的算法来随机选择一组n个不同的整数,其中所有整数都在某个范围[0..maxValue].

约束:

  • maxValue大于n,可能更大
  • 我不在乎输出列表是否排序
  • 必须以相同的概率选择所有整数

我最初的想法是构造一个整数列表[0..maxValue]然后随机提取n个元素而不替换.但这似乎效率很低,特别是如果maxValue很大的话.

更好的解决方案?

language-agnostic random algorithm combinations

9
推荐指数
2
解决办法
5031
查看次数

从PHP数组中有效地选择n个随机元素(不用shuffle)

我有以下代码$n$arrayPHP中的数组中选择元素:

shuffle($array);
$result = array_splice($array, 0, $n);
Run Code Online (Sandbox Code Playgroud)

给定一个大数组但只有少数元素(例如5out 10000),这是相对较慢的,所以我想优化它,以便不是所有元素都必须被洗牌.值必须是唯一的.

我正在寻找最有效的替代方案.我们可以假设$array没有重复并且是0索引的.

php arrays random performance shuffle

9
推荐指数
1
解决办法
2165
查看次数

在Python中随机生成特定长度的整数分区的算法?

我一直在使用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?此外,在许多情况下使用共轭分区可以很好地生成无偏差的样本,但我不能说我完全理解为什么.

python combinatorics sage

6
推荐指数
1
解决办法
2022
查看次数

生成一个范围内的N个正整数,总计python中的总数

我看过其他类似问题的帖子。我知道如何生成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)

再次感谢。

python random numpy range python-2.7

5
推荐指数
0
解决办法
867
查看次数

生成随机轮询号码

我为这个简单的问题苦苦挣扎:我想创建一些随机的民意调查数字.我有4个变量需要填充数据(实际上是一个整数数组).这些数字应代表随机百分比.所有百分比均为100%.听起来很简单.

但我认为这并不容易.我的第一次尝试是生成一个介于10和base(base = 100)之间的随机数,并减去基数中的数字.这是3次,最后一个值被分配了基数.有更优雅的方式吗?

我的问题用几句话说:

如何用随机值填充此数组,这些值在加在一起时将为100?

int values[4];

c random

2
推荐指数
1
解决办法
113
查看次数