javascript:从范围中生成2个随机但不同的数字
快速问题: 实现这一行python代码(从给定范围生成两个随机但不同的数字)的最佳方法是什么 …用Javascript 提前谢谢javascript:从范围中生成2个随机但不同的数字,javascript,random,sampling,Javascript,Random,Sampling,快速问题: 实现这一行python代码(从给定范围生成两个随机但不同的数字)的最佳方法是什么 …用Javascript 提前谢谢 Martin生成一个,然后重复生成第二个,直到它与第一个不一样。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能影响。生成一个数字,然后重复生成第二个数字,直到它与第一个数字不一样为止。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能损失。以下是我使用splice的尝试: var a = [1,2
Martin生成一个,然后重复生成第二个,直到它与第一个不一样。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能影响。生成一个数字,然后重复生成第二个数字,直到它与第一个数字不一样为止。它必须运行更长时间的可能性很小,但除非您需要生成数十亿个数字,否则您不会看到任何性能损失。以下是我使用splice的尝试:
var a = [1,2,3,4,5,6,7,8,9,10];var sample = [];
sample.push(a.splice(Math.random()*a.length,1));
sample.push(a.splice(Math.random()*a.length,1));
包装在函数中:
function sample_range(range, n) {
var sample = [];
for(var i=0; i<n; i++) {
sample.push(range.splice(Math.random()*range.length,1));
}
return sample;
}
var sample = sample_range([1,2,3,4,5,6,7,8,9,10], 2);
函数样本_范围(范围,n){
var样本=[];
对于(var i=0;i,我尝试使用拼接:
var a = [1,2,3,4,5,6,7,8,9,10];var sample = [];
sample.push(a.splice(Math.random()*a.length,1));
sample.push(a.splice(Math.random()*a.length,1));
包装在函数中:
function sample_range(range, n) {
var sample = [];
for(var i=0; i<n; i++) {
sample.push(range.splice(Math.random()*range.length,1));
}
return sample;
}
var sample = sample_range([1,2,3,4,5,6,7,8,9,10], 2);
函数样本_范围(范围,n){
var样本=[];
对于(var i=0;i如果要生成0到n
之间的随机数,一种方法是在0..n
中随机选取r1
,然后从0..n-1
中选取r2
,如果r2>=r1
如果要生成0到n
之间的随机数,一种方法是在0..n
中随机选取编号r1
,然后从0..n-1
中选取r2
,如果r2>=r1
函数样本(范围,tot),则将1添加到r2
{
function sample(range,tot){
if(tot > range){
alert('infinite loop?');
return [];
}
var myRandomNumbers = [];
for(var i = 0; i<tot; i++){
var randN = Math.floor(Math.random()*range);
while(myRandomNumbers.contains(randN)){
randN = Math.floor(Math.random()*range);
}
myRandomNumbers.push(randN);
}
return myRandomNumbers
}
var nums = sample(10,2); //array containing 2 distinct random numbers
如果(tot>范围){
警报(“无限循环”);
返回[];
}
var myRandomNumbers=[];
对于(var i=0;i函数样本(范围,tot){
如果(tot>范围){
警报(“无限循环”);
返回[];
}
var myRandomNumbers=[];
对于(var i=0;iPerformance on this O(n*range)。我不建议使用它。如果假设已经创建了range数组,则最好运行n次Knuth shuffle迭代,即O(n),否则为O(n+range)。此O(n*range)上的性能。我不建议您使用它。您最好运行n次Knuth shuffle迭代,如果您假设已经创建了范围数组,则为O(n),否则为O(n+范围)。