Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Расчёт вероятности событий в JavaScript
Вероятность события - это отношение количества благоприятных исходов к общему числу возможных исходов. Это фундаментальная концепция в статистике и теории вероятностей, которая часто применяется в веб-разработке для анализа и решения задач.
Основная формула вероятности
// P(A) = Количество благоприятных исходов / Общее количество исходов
function calculateProbability(favorableOutcomes, totalOutcomes) {
if (totalOutcomes === 0) {
return 0; // Деление на ноль
}
return favorableOutcomes / totalOutcomes;
}
// Примеры
console.log(calculateProbability(1, 6)); // 0.1667 (один кубик, вероятность 1)
console.log(calculateProbability(3, 6)); // 0.5 (вероятность четного числа)
console.log(calculateProbability(13, 52)); // 0.25 (вероятность червей из колоды)
Вероятность в процентах и долях
function probabilityPercent(favorable, total) {
const prob = favorable / total;
return (prob * 100).toFixed(2) + '%';
}
function probabilityRatio(favorable, total) {
// Упростить дробь
const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
const divisor = gcd(favorable, total);
return `${favorable / divisor}:${total / divisor}`;
}
console.log(probabilityPercent(3, 6)); // '50.00%'
console.log(probabilityRatio(3, 6)); // '1:2'
Простые события
// Вероятность выпадения орла при бросании монеты
const coinFlip = () => {
const outcomes = ['heads', 'tails'];
const favorable = 1; // 'heads'
const total = outcomes.length;
return favorable / total; // 0.5
};
// Вероятность вытянуть красный шар из урны
function ballProbability() {
const redBalls = 5;
const blueBalls = 3;
const totalBalls = redBalls + blueBalls;
return redBalls / totalBalls; // 0.625
}
console.log(coinFlip()); // 0.5
console.log(ballProbability()); // 0.625
Сложные события (Умножение вероятностей)
Для независимых событий: P(A и B) = P(A) * P(B)
// Вероятность вытянуть два красных шара подряд (без возврата)
function twoRedBallsWithoutReplacement() {
const redBalls = 5;
const blueBalls = 3;
const total = redBalls + blueBalls;
const firstRed = redBalls / total; // 5/8
const secondRed = (redBalls - 1) / (total - 1); // 4/7
return firstRed * secondRed; // (5/8) * (4/7) = 20/56 ≈ 0.357
}
// С возвратом (независимые события)
function twoRedBallsWithReplacement() {
const redBalls = 5;
const total = 8;
const prob = (redBalls / total) * (redBalls / total);
return prob; // (5/8)^2 = 0.391
}
console.log(twoRedBallsWithoutReplacement()); // 0.357
console.log(twoRedBallsWithReplacement()); // 0.391
Сложение вероятностей (Логическое ИЛИ)
Для несовместимых событий: P(A или B) = P(A) + P(B)
// Вероятность выпадения чётного или нечётного числа на кубике
function diceEvenOrOdd() {
const evenNumbers = 3; // 2, 4, 6
const oddNumbers = 3; // 1, 3, 5
const total = 6;
const probEven = evenNumbers / total;
const probOdd = oddNumbers / total;
return probEven + probOdd; // 0.5 + 0.5 = 1.0
}
// Вероятность вытянуть король или туз
function kingOrAce() {
const kings = 4;
const aces = 4;
const total = 52;
return (kings + aces) / total; // 8/52 ≈ 0.154
}
console.log(diceEvenOrOdd()); // 1.0
console.log(kingOrAce()); // 0.154
Условная вероятность
Вероятность события A при условии что произошло событие B: P(A|B)
// Вероятность дождя завтра, если уже идёт дождь сегодня
function conditionalRain() {
const rainyDaysAfterRain = 15; // Дни с дождём после дождливого дня
const rainyDaysPreviousDay = 20; // Всего дождливых дней
return rainyDaysAfterRain / rainyDaysPreviousDay; // 0.75
}
// Вероятность купить красный товар, если товар дешёвый
function redGivenCheap() {
const cheapRed = 10; // Дешёвые красные товары
const cheapTotal = 50; // Все дешёвые товары
return cheapRed / cheapTotal; // 0.2
}
Формула Байеса (Обратная условная вероятность)
P(A|B) = P(B|A) * P(A) / P(B)
function bayesTheorem() {
// Задача: Какова вероятность что у человека болезнь если тест положительный?
const probDisease = 0.01; // 1% людей больны
const probPositiveIfDiseased = 0.95; // 95% тестов правильные для больных
const probPositiveIfHealthy = 0.05; // 5% ложных срабатываний
const probHealthy = 1 - probDisease; // 99% здоровы
// P(болезнь | положительный тест) = ?
const probPositive = (
probPositiveIfDiseased * probDisease +
probPositiveIfHealthy * probHealthy
);
const probDiseaseGivenPositive = (
(probPositiveIfDiseased * probDisease) / probPositive
);
return probDiseaseGivenPositive; // ≈ 0.16 (только 16% вероятность!)
}
console.log(bayesTheorem()); // 0.161
Распределение вероятностей
// Нормальное распределение (Гаусс)
function normalDistribution(x, mean, stdDev) {
const coefficient = 1 / (stdDev * Math.sqrt(2 * Math.PI));
const exponent = -Math.pow(x - mean, 2) / (2 * Math.pow(stdDev, 2));
return coefficient * Math.exp(exponent);
}
// Равномерное распределение
function uniformDistribution(x, a, b) {
if (x < a || x > b) return 0;
return 1 / (b - a);
}
// Биномиальное распределение (вероятность k успехов из n попыток)
function binomialDistribution(n, k, p) {
const combinations = factorial(n) / (factorial(k) * factorial(n - k));
return combinations * Math.pow(p, k) * Math.pow(1 - p, n - k);
}
function factorial(n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
// Примеры
console.log(normalDistribution(0, 0, 1)); // ≈ 0.399
console.log(uniformDistribution(5, 0, 10)); // 0.1
console.log(binomialDistribution(10, 5, 0.5)); // ≈ 0.246
Практический пример: Вероятность клика
class ClickAnalytics {
constructor() {
this.impressions = 0; // Показы
this.clicks = 0; // Клики
}
recordEvent(clicked) {
this.impressions++;
if (clicked) this.clicks++;
}
getClickProbability() {
return this.clicks / this.impressions;
}
getClickRate() {
return (this.getClickProbability() * 100).toFixed(2) + '%';
}
expectedClicks(futureImpressions) {
return Math.round(futureImpressions * this.getClickProbability());
}
}
const analytics = new ClickAnalytics();
[true, false, true, false, true].forEach(c => analytics.recordEvent(c));
console.log(analytics.getClickProbability()); // 0.6
console.log(analytics.getClickRate()); // '60.00%'
console.log(analytics.expectedClicks(1000)); // 600
Monte Carlo симуляция
function monteCarloPi(iterations = 100000) {
let circlePoints = 0;
for (let i = 0; i < iterations; i++) {
const x = Math.random();
const y = Math.random();
const distance = Math.sqrt(x * x + y * y);
if (distance <= 1) {
circlePoints++;
}
}
// Вероятность попадания в круг = площадь круга / площадь квадрата
// pi/4 = circlePoints / iterations
const piEstimate = (circlePoints / iterations) * 4;
return piEstimate;
}
console.log(monteCarloPi()); // ≈ 3.14159
Вероятность - мощный инструмент для анализа, предсказаний и принятия решений в приложениях.