Функция C++ для выбора из списка, где каждый элемент имеет отличную вероятность

У меня есть массив структур, и одно из полей в структуре является плаванием. Я хочу выбрать одну из структур, где вероятность выбора ее относительно значения плавания. т.е.

struct s{
  float probability;
  ...
}

s sArray[50];

Что самый быстрый путь состоит в том, чтобы решить который s выбрать? Существует ли функция для этого? Если я знал, сумма всех полей вероятности (Обратите внимание, что это не будет 1), то мог я выполнять итерации через каждый s и выдержать сравнение probability/total_probability со случайным числом, изменяя случайное число для каждого s? т.е.

if( (float) (rand() / RAND_MAX) < probability)...
8
задан Stuart 15 April 2010 в 23:52
поделиться

2 ответа

float p = (rand() / static_cast<float>(RAND_MAX)) * total_probability;
s* current = &sArray[0];
while ( (p -= current->probability) > 0)
    ++current;
// `current` now points to your chosen target
9
ответ дан 5 December 2019 в 14:01
поделиться

Узнайте RAND_MAX, как вы говорите. Сгенерируйте случайное число до RAND_MAX. Перебирайте массив, подсчитывая вероятности, пока вы не сравняете или не превысите сгенерированное случайное число. {{1} } (Производительность всего 50 элементов не должна быть проблемой, иначе сохраните суммы вероятностей один раз в другом массиве, а затем выполните поиск пополам для случайного значения.)

3
ответ дан 5 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: