gpt4 book ai didi

Java:具有非均匀分布的随机整数

转载 作者:IT老高 更新时间:2023-10-28 20:48:12 28 4
gpt4 key购买 nike

如何在 Java 中创建一个随机整数 n,介于 1k 之间,具有“线性递减分布”,即 1 最有可能,2 不太可能,3 不太可能,...,k 最不可能,并且概率线性下降,如下所示:

enter image description here

我知道这个主题已经有几十个主题了,我很抱歉创建一个新主题,但我似乎无法从它们中创建我需要的内容。我知道使用 import java.util.*;,代码

Random r=new Random();
int n=r.nextInt(k)+1;

1k之间创建一个随机整数,均匀分布。

GENERALIZATION: 任何用于创建任意分布整数的提示,即 f(n)=some function, P(n)=f(n)/(f(1)+...+f(k))),也可以理解,例如:

enter image description here .

最佳答案

这应该可以满足您的需求:

public static int getLinnearRandomNumber(int maxSize){
//Get a linearly multiplied random number
int randomMultiplier = maxSize * (maxSize + 1) / 2;
Random r=new Random();
int randomInt = r.nextInt(randomMultiplier);

//Linearly iterate through the possible values to find the correct one
int linearRandomNumber = 0;
for(int i=maxSize; randomInt >= 0; i--){
randomInt -= i;
linearRandomNumber++;
}

return linearRandomNumber;
}

此外,这里是一个从开始索引到停止索引范围内的正函数(负函数实际上没有意义)的一般解决方案:

public static int getYourPositiveFunctionRandomNumber(int startIndex, int stopIndex) {
//Generate a random number whose value ranges from 0.0 to the sum of the values of yourFunction for all the possible integer return values from startIndex to stopIndex.
double randomMultiplier = 0;
for (int i = startIndex; i <= stopIndex; i++) {
randomMultiplier += yourFunction(i);//yourFunction(startIndex) + yourFunction(startIndex + 1) + .. yourFunction(stopIndex -1) + yourFunction(stopIndex)
}
Random r = new Random();
double randomDouble = r.nextDouble() * randomMultiplier;

//For each possible integer return value, subtract yourFunction value for that possible return value till you get below 0. Once you get below 0, return the current value.
int yourFunctionRandomNumber = startIndex;
randomDouble = randomDouble - yourFunction(yourFunctionRandomNumber);
while (randomDouble >= 0) {
yourFunctionRandomNumber++;
randomDouble = randomDouble - yourFunction(yourFunctionRandomNumber);
}

return yourFunctionRandomNumber;
}

注意:对于可能返回负值的函数,一种方法可能是获取该函数的绝对值并将其应用于上述解决方案中的每个 yourFunction 调用。

关于Java:具有非均匀分布的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969447/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com