js实现概率
JavaScript 实现概率的方法
在 JavaScript 中实现概率可以通过多种方式完成,具体取决于应用场景。以下是几种常见的实现方法:
使用 Math.random() 生成随机数
Math.random() 方法返回一个介于 0(包含)和 1(不包含)之间的伪随机浮点数。通过调整返回值范围,可以实现简单的概率控制。

const probability = 0.3; // 30% 的概率
if (Math.random() < probability) {
console.log("事件发生");
} else {
console.log("事件未发生");
}
权重概率实现
当需要根据不同的权重分配概率时,可以通过累加权重并比较随机数来实现。
const items = [
{ name: "A", weight: 50 },
{ name: "B", weight: 30 },
{ name: "C", weight: 20 }
];
function getRandomItem(items) {
const totalWeight = items.reduce((sum, item) => sum + item.weight, 0);
const random = Math.random() * totalWeight;
let weightSum = 0;
for (const item of items) {
weightSum += item.weight;
if (random <= weightSum) {
return item;
}
}
}
console.log(getRandomItem(items).name);
概率分布函数
对于更复杂的概率分布(如正态分布、泊松分布等),可以使用专门的库或自定义函数实现。

// 正态分布示例
function normalDistribution(mean, stddev) {
let u = 0, v = 0;
while (u === 0) u = Math.random();
while (v === 0) v = Math.random();
return mean + stddev * Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
}
console.log(normalDistribution(0, 1));
概率事件队列
对于需要按概率触发多个事件的场景,可以使用事件队列的方式管理。
const events = [
{ name: "Event1", probability: 0.1 },
{ name: "Event2", probability: 0.4 },
{ name: "Event3", probability: 0.5 }
];
function triggerEvent(events) {
const random = Math.random();
let cumulativeProbability = 0;
for (const event of events) {
cumulativeProbability += event.probability;
if (random <= cumulativeProbability) {
console.log(`触发了 ${event.name}`);
break;
}
}
}
triggerEvent(events);
蒙特卡洛模拟
对于复杂概率问题,可以使用蒙特卡洛方法进行模拟。
function monteCarloSimulation(trials, successCondition) {
let successes = 0;
for (let i = 0; i < trials; i++) {
if (successCondition()) {
successes++;
}
}
return successes / trials;
}
// 示例:模拟掷两个骰子和为7的概率
const probability = monteCarloSimulation(100000, () => {
const die1 = Math.floor(Math.random() * 6) + 1;
const die2 = Math.floor(Math.random() * 6) + 1;
return die1 + die2 === 7;
});
console.log(`和为7的概率约为 ${probability}`);






