JavaScript 中常用的概率算法有以下几种:
1. Math.random() 随机数生成
Math.random() 方法可以生成 [0,1) 之间的随机数,我们可以通过该方法来实现任意范围内的随机数生成,例如生成 [min, max] 范围内的随机整数:
function randomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
2. 概率分布函数
概率分布函数是描述随机变量在每个可能取值处的概率的函数,其中最常用的是正态分布函数、均匀分布函数和指数分布函数。
3. 蒙特卡罗算法
蒙特卡罗算法利用随机采样的方式来模拟实验,并通过统计实验结果的频率来得出概率。例如,可以通过模拟抛硬币的过程来计算正面向上的概率。
下面是一个使用蒙特卡罗算法模拟计算圆周率的例子:
function estimatePi(numThrows) {
let inCircle = 0;
for (let i = 0; i < numThrows; i++) {
let x = Math.random();
let y = Math.random();
let distance = Math.sqrt(x * x + y * y);
if (distance <= 1) {
inCircle++;
}
}
return 4 * (inCircle / numThrows);
}
console.log(estimatePi(10000000)); // 输出圆周率的估计值
4. 马尔科夫链
马尔科夫链是一种随机过程,其中从一个状态转移到下一个状态的概率只与当前状态有关。可以利用马尔科夫链模拟状态的转移过程,并通过统计不同状态出现的频率来计算概率。例如,可以使用马尔科夫链模拟赌博游戏的输赢情况。
5.拉斯维加斯算法
拉斯维加斯算法是一种随机化算法,其特点是在进行计算时,会使用随机数来处理问题。下面是一个用于求解一元二次方程根的拉斯维加斯算法示例:
function lasVegas(a, b, c) {
let x1, x2;
while (true) {
let discriminant = b * b - 4 * a * c;
if (discriminant < 0) {
// 无解,继续随机生成参数
a = Math.random() * 10 - 5;
b = Math.random() * 10 - 5;
c = Math.random() * 10 - 5;
} else {
// 有解,计算根
x1 = (-b + Math.sqrt(discriminant)) / (2 * a);
x2 = (-b - Math.sqrt(discriminant)) / (2 * a);
break;
}
}
return { x1, x2 };
}
// 示例
let roots = lasVegas(1, 2, -3);
console.log(roots); // { x1: 1, x2: -3 }
运行结果可能因为随机数不同而有所不同。如果输入的参数无解,则算法会随机生成新的参数再进行计算。如果有解,则会计算出方程的两个根并返回。