test.forEach((ele) => { const res = findMedianSortedArrays(ele[0], ele[1]); console.log(res); });
五、概率
概率算法依照概率统计的思路来求解问题, 求出的是近似解,常见概率算法有:
(1) 数值概率算法
(2) 蒙特卡罗(Monte Carlo)算法
(3) 拉斯维加斯(Las Vegas)算法
(4) 舍伍德(Sherwood)算法
🌰
/** * 概率算法思想 * 蒙特卡罗算法 * 蒙特卡罗算法计算圆周率 * 一个半径为1的圆,(如图6-23)阴影部分面积,也就是四分之一的圆的面积 * 计算公式,s₁=s/4=(π*r²)/4=π/4 * 而图中的正方形面积为S₂=r²=1; * 按照图中建议一个坐标系,均匀的向正方形内撒点,那么落入阴影部分的点数比上全部的点数应该就是 s₁/S₂=π/4 * 根据概率统计的规律,只要撒点足够多,那么将得到近似的结果。这就是蒙特卡罗算法 * * @param n 撒点数 */ var monteCarloPI = (n) => { let PI; //圆周率π let valid = 0; //有效点数,也就是落入阴影部分的点数
for (let i = 0; i < n; i++) { let x = Math.random(); //产生0~1之间的一个随机数 let y = Math.random(); if (x * x + y * y <= 1) { //点在有效区域内,根据图,有效点距离原点的距离小于等于1,也就是x²+y²<=1 valid++; } } PI = (4.0 * valid) / n;
console.log("撒点数:%d,有效点数%d,圆周率π ≈ %f\n", n, valid, PI); };
for (let i = 500000; i < 800000; i += 50000) { monteCarloPI(i); } // 撒点数:500000,有效点数392676,圆周率π ≈ 3.141408