Задать вопрос
vitvad
@vitvad

Какие есть алгоритмы для выдачи результата из заданого списка с определенной вероятностью?

Задача:
Есть исходный набор данных в виде массива. Для каждого элемента массива указана вероятность его появления в результате.
Нужно написать функцию которая каждый раз при вызове будет возвращать один случайный элемент из массива с заданой вероятностью.

примеры применения:
- AB тестирование - есть 3 страницы которые должны показываться пользователям при заходе на сайт с вероятность 50%, 35% и 15% соответственно
- Словарь который будет показывать одно из слов содержащихся в памяти каждые 3 минуты. При этом новые слова будут показываться чаще чем старые.

Мне в голову приходит только решение в "лоб". УПРОЩЕННЫЙ вариант ниже (JavaScript):
function probabilityRandom(chanceA, chanceB, chanceC, items) {
	var totalWeight = chanceA + chanceB + chanceC;
	// generate random number in range from 1 to `totalWeight`
	var tmp = 1 + (Math.random() * totalWeight);

	if(0 < tmp && tmp <= chanceA){
		return items[0];
	}
	if(chanceA < tmp && tmp <= chanceA + chanceB){
		return items[0];
	}

	if(chanceA + chanceB < tmp && tmp <= chanceA + chanceB + chanceC){
		return items[0];
	}
}

probabilityRandom(50, 35, 15, ["first", "second", "third"]);


Собственно вопрос - есть ли какие либо алгоритмы для подобного вида задач, и как бы вы решали их?
приветствуются ссылки на статьи описывающие подобное, псевдокод и советы.

PS.
41591611cffe4cad8efbace0fd7d6059.gif
  • Вопрос задан
  • 1143 просмотра
Подписаться 2 Оценить 1 комментарий
Ответ пользователя Константин Китманов К ответам на вопрос (5)
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Probability and Games, есть псевдокод
github://jotson/LootTable.js, имплементация на JS.
Ответ написан