Выбор предметов из событий, максимально равномерно распределенных - PullRequest
1 голос
/ 14 июня 2010

Если у меня есть событие, которое происходит 15 раз в секунду (пронумеровано 1 - 15), но я хочу обработать его только 3 раза, я могу выбрать [1], [6] and [11],.Важно, чтобы события, которые я обрабатываю, были как можно более равномерно распределены и учитывали циклический переход, то есть события были непрерывными 13, 14, 15, 1, 2, 3 и т. Д.

Если я хочу 4 элементалучшее, что я могу сделать, это [1], [5], [9] & [13].

Существует ли общий алгоритм, который будет вычислять, какие события мне нужно обрабатывать, учитывая общее количество событий (total) и число для обработки (processAmount)).

1 Ответ

1 голос
/ 14 июня 2010

Вы можете попробовать использовать этот базовый подход - разделите ваш интервал на равные нецелые части и возьмите ближайший целочисленный индекс события для каждого события:

int gaps = total+1;
double step = 1.0*gaps/processAmount;

for (int i = 0; i < processAmount;++i)
   int index = (int)(1 + i*step);
   //output or handle index
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...