editing README.md

This commit is contained in:
bernd32 2022-04-16 23:43:59 +05:00
parent 043f5eb70d
commit f4cb5f4033

View File

@ -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];
}
}
}
```
## Как можно еще лучше алгоритм генерации слов?
Данный скрипт является больше примером использования алгоритма выбора случайного элемента массива на основе их веса, поэтому я не