Как выбрать из входящего потока случайных чисел X% времени? - PullRequest
0 голосов
/ 18 октября 2019

У меня проблема с выборкой.

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

Я думаю, если я в порядке с смещенным сэмплером, я могу сделать:

(id % 100) < X

Но если яне хочу вводить предвзятость, тогда что мне делать?

1 Ответ

1 голос
/ 18 октября 2019

Предполагая, что у вас есть источник непредвзятых целых случайных чисел, вы можете просто удалить любое число, которое добавит смещение с числом по модулю.

Предполагается, что вы используете стандартное случайное число, которое вернет число 0..RAND_MAX:

bool sample_pct(int x) {
   int max_id = RAND_MAX - RAND_MAX%100 ;
   while ( true ) {
       int id = random() ;
       if ( id >= max_id) continue ;
       return (id%100) < x ;
   } ;
}

Если у вас есть другой источник случайных чисел, код (с другим диапазоном) должен бытьс учетом диапазона значений.

...