Я работаю над переносом моделирования MATLAB на C++. Для этого я пытаюсь воспроизвести MATLAB's randsample() function. Я еще не нашел эффективного способа сделать это.C++ случайный выбор k чисел из диапазона 0: n-1 (n> k) без замены
Итак, я спрашиваю вас, как наилучшим образом случайным образом выбирать k чисел из диапазона 0: n-1 (для n> k) без замены в C++?
Я рассмотрел следующий псевдокод (вдохновленный третьим примером на cppreference.com), но я чувствую, что это немного Hacky:
initialize vect<int> v of size n
for i = 0 to n-1
v[i] = i
shuffle v
return v[0 to k-1]
Недостаток здесь является также требованием, чтобы построить огромный массив первым слишком. Это похоже на медленный/неуклюжий перебор.
Мне понравилось бы какое-то направление здесь, если вы можете помочь. Меня интересует теория (алгоритмы интересны, но не актуальны для моих потребностей сейчас), чем лучший способ реализовать это на C++.
Заранее благодарен!
Вы помечены это C++, но ваш код псевдо-код. Что вас интересует? – Daniel
Справедливо вопрос. Я интересуюсь C++, но особенно полезными функциями на C++ для выполнения грязной работы. Я не хочу изобретать велосипед, и кажется, что это довольно простой материал, поэтому я думаю, что там есть вещи. Я просто не могу найти его или понять. – marcman
Алгоритмы полностью соответствуют вашим потребностям сейчас, это именно то, о чем вы просите. – BlamKiwi