我很想知道,如何用概率来产生愤怒的价值观。
As an example, I have four integers with their probability values: 1|0.4, 2|0.3, 3|0.2, 4|0.1
我怎么能考虑到这四个数字的概率,得出这些数字?
我很想知道,如何用概率来产生愤怒的价值观。
As an example, I have four integers with their probability values: 1|0.4, 2|0.3, 3|0.2, 4|0.1
我怎么能考虑到这四个数字的概率,得出这些数字?
这里是一个有用的骗局:-
function randomWithProbability() {
var notRandomNumbers = [1, 1, 1, 1, 2, 2, 2, 3, 3, 4];
var idx = Math.floor(Math.random() * notRandomNumbers.length);
return notRandomNumbers[idx];
}
A simple naive approach can be:
function getRandom(){
var num=Math.random();
if(num < 0.3) return 1; //probability 0.3
else if(num < 0.6) return 2; // probability 0.3
else if(num < 0.9) return 3; //probability 0.3
else return 4; //probability 0.1
}
更灵活的解决方案,以@bhups回答为基础。 这使用了各种概率值(重量)。 重量应等于1。
var weights = [0.3, 0.3, 0.3, 0.1]; // probabilities
var results = [1, 2, 3, 4]; // values to return
function getRandom () {
var num = Math.random(),
s = 0,
lastIndex = weights.length - 1;
for (var i = 0; i < lastIndex; ++i) {
s += weights[i];
if (num < s) {
return results[i];
}
}
return results[lastIndex];
};
我建议对随机次数的概率和其余部分进行持续检查。
这项职能首先确定最后一项可能的指数的回报值,并在其他随机值低于实际概率之前重新计算。
可能性必须一概。
function getRandomIndexByProbability(probabilities) {
var r = Math.random(),
index = probabilities.length - 1;
probabilities.some(function (probability, i) {
if (r < probability) {
index = i;
return true;
}
r -= probability;
});
return index;
}
var i,
probabilities = [0.4, 0.3, 0.2, 0.09, 0.01 ],
count = {},
index;
probabilities.forEach(function (a) { count[a] = 0; });
for (i = 0; i < 1e6; i++) {
index = getRandomIndexByProbability(probabilities);
count[probabilities[index]]++
}
console.log(count);
这是一种最灵活的解决办法,可以在任何具有概率的物体内选择:
// set of object with probabilities:
const set = {1:0.4,2:0.3,3:0.2,4:0.1};
// get probabilities sum:
var sum = 0;
for(let j in set){
sum += set[j];
}
// choose random integers:
console.log(pick_random());
function pick_random(){
var pick = Math.random()*sum;
for(let j in set){
pick -= set[j];
if(pick <= 0){
return j;
}
}
}
let cases = {
10 : 60,// 0-10 : 60 => 10%
90 : 10,// 10-90 : 10 => 80%
100 : 70,// 90-100 : 70 => 10%
};
function randomInt(){
let random = Math.floor(Math.random() * 100);
for(let prob in cases){
if(prob>=random){
return cases[prob];
}
}
}
console.log(randomInt())
Rom098的答复有所改动,使之更加灵活。 添加加权作为单位阵列。
function randomWithProbability(outcomes, weights){
if(!weights){
weights=Array(outcomes.length).fill(1);
}
let totalWeight=weights.reduce((prev, curr)=>prev+=curr);
const num=Math.random();
let sum=0, lastIndex=weights.length-1;
for(let i=0; i<=lastIndex; i++){
sum+=weights[i]/totalWeight;
if(num<sum) return outcomes[i];
}
return outcomes[lastIndex];
}
for(let i=0; i<20; i++){
console.log(randomWithProbability([true, false], [10,1]));
}
How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.
I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...
Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...
Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...
I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...
Is it possible for someone to give me a few pointers on how to display a multidimensional array in the form of a bar graph? The array is multidimensional, with three elements in each part - and the ...
Is it possible to reload a form after file-input change? I have a form where the user can chose an image for upload. I also have a php script which displays that image resized. I only wonder if it ...
I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.