Произвольно генерировать набор из m целых чисел из массива размером n
Полный вопрос:
Напишите метод для случайного генерирования набора из m целых чисел из массива размераn
, Каждый элемент должен иметь равную вероятность быть выбранным`
Этот вопрос выбран из "Взломайте кодовое интервью и решение таково:
Мы можем поменять элемент с элементом в начале массива, а затем «Помните" что массив теперь включает только элементыj
и больше. То есть когда мы выбираемsubset[0]
бытьarray[k]
заменяемarray[k]
с первым элементом в массиве. Когда мы выбираемsubset[1]
, мы считаемarray[0]
быть "мертвых" и мы выбираем случайный элементy
между 1 и массивомsize()
, Затем мы устанавливаем подмножество [1] равнымarray[y]
и установитьarray[y]
равно массиву [1]. Элементы 0 и 1 теперь «мертвых".Subset[2]
сейчас выбран изarray[2]
черезarray[array size()]
, и так далее.
Мой вопрос в том, что если мысжимаем массив, из которого мыперебирая случайные числа, то вероятность каждого числа выбирается1/remaining_num_elements
, Как оно остается одинаковым для всех элементов?