Вы должны выбрать алгоритм, который действительно может имитировать реальную деятельность «Случайно выбрать k чисел из n чисел». Ваш алгоритм должен иметь два свойства
(1) Он должен вернуть k чисел в конце.
(2) Он должен действительно имитировать эти свойства целевой деятельности: каждое число выбирается с вероятностью k / n.
Оборок s answer is wrong because it hasn
т первый объект.
for i = 0 to n
randomly choose an integer number between [1,n-i+1]
if [randomValue <= (k - S'.size)/(S.size - i + 1)] then
S'.add(S[i])
При выбранном выше плане выбора, каждое число выбирается с вероятностью k / n. Вы можете убедиться в этом по уравнению доказать
https://www.facebook.com/photo.php?fbid=677984275648191&l=7cafe5d468