From f4cb5f4033da761da9bc01af293da1960d3648d5 Mon Sep 17 00:00:00 2001 From: bernd32 Date: Sat, 16 Apr 2022 23:43:59 +0500 Subject: [PATCH] editing README.md --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index e746173..1dec671 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,34 @@ const pseudoCumulativeWeights = [ Элемент `1`: ≈ 9% +В общем случае функция выглядит примерно так: +```javascript + +function weightedRandom(items, weights) { + if (items.length !== weights.length) { + throw new Error('Массивы элементов и весов должны быть одинакового размера'); + } + + if (!items.length) { + throw new Error('Элементы массива не должны быть пустыми'); + } + const cumulativeWeights = []; + for (let i = 0; i < weights.length; i += 1) { + cumulativeWeights[i] = weights[i] + (cumulativeWeights[i - 1] || 0); + } + + const maxCumulativeWeight = cumulativeWeights[cumulativeWeights.length - 1]; + + const randomNumber = maxCumulativeWeight * Math.random(); + + for (let itemIndex = 0; itemIndex < items.length; itemIndex += 1) { + if (cumulativeWeights[itemIndex] >= randomNumber) { + return items[itemIndex]; + } + } +} +``` + ## Как можно еще лучше алгоритм генерации слов? Данный скрипт является больше примером использования алгоритма выбора случайного элемента массива на основе их веса, поэтому я не