У меня есть массив структур, и одно из полей в структуре является плаванием. Я хочу выбрать одну из структур, где вероятность выбора ее относительно значения плавания. т.е.
struct s{
float probability;
...
}
s sArray[50];
Что самый быстрый путь состоит в том, чтобы решить который s выбрать? Существует ли функция для этого? Если я знал, сумма всех полей вероятности (Обратите внимание, что это не будет 1), то мог я выполнять итерации через каждый s и выдержать сравнение probability/total_probability
со случайным числом, изменяя случайное число для каждого s? т.е.
if( (float) (rand() / RAND_MAX) < probability)...
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
Узнайте RAND_MAX, как вы говорите. Сгенерируйте случайное число до RAND_MAX. Перебирайте массив, подсчитывая вероятности, пока вы не сравняете или не превысите сгенерированное случайное число. {{1} } (Производительность всего 50 элементов не должна быть проблемой, иначе сохраните суммы вероятностей один раз в другом массиве, а затем выполните поиск пополам для случайного значения.)