2010-07-19 3 views
6

Страница 120 из программирования Pearls В первом издании представлен этот алгоритм для выбора M равновероятных случайных элементов из совокупности N целых чисел.Программирование жемчуга - алгоритм случайного выбора

Установлено, что ожидаемое число испытаний членов меньше, чем 2M, до тех пор, как M < N/2.

Я хотел бы знать, как это доказать, но мой анализ анализа алгоритмов не позволяет мне.

Я понимаю, что чем ближе M к N, тем дольше будет выполняться программа, потому что в результирующем наборе будет больше элементов, и вероятность того, что RandInt будет выбирать существующий, будет увеличиваться пропорционально.

Можете ли вы помочь мне разобраться с этим доказательством?

ответ

4

Я не математик, но я дам ему грубый снимок. Тем не менее, это НЕ гарантируется.

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

http://en.wikipedia.org/wiki/Geometric_distribution

Таким образом, вы работаете M геометрические испытания. Каждое испытание имеет ожидаемое значение 1/p, поэтому ожидается, что 1/p попытается получить номер, еще не находящийся в M. p, равный N минус число номеров, которые мы уже добавили из M, разделенные на N (т. Е. Сколько необозримых элементов/общее количество предметов). Таким образом, для четвертого числа p = (N -3)/N, что является вероятностью выбора неиспользуемого числа, поэтому ожидаемое количество выборок для третьего числа равно N/N-3.

Ожидаемое значение времени выполнения - все это вместе. Так что-то вроде

E (времени работы) = N/N + N/(N -1) + N/(N -2) ... + N/(NM)

Теперь, если M < N/2, то последний элемент этого суммирования ограничен сверху на 2. ((N/N/2) == 2)). Это также, очевидно, самый большой элемент во всем суммировании. Поэтому, если самый большой элемент - два выбора, и есть M элементов, которые суммируются, EV всего времени выполнения ограничено выше на 2M.

Спросите меня, если это неясно. Исправьте меня, если что-то из этого не так :)

+1

+1: Я удалил свой ответ. Эта сумма приблизительно равна N * ln (N/(N-M + 1)), поэтому для M = N мы ожидаем тесты O (NlogN). – 2010-07-19 16:46:32

+0

Perfect. Теперь это имеет для меня полный смысл. – mpm

+1

Я бы добавил круглые скобки: E (время выполнения) = N/N + N/(N-1) + N/(N -2) ... + N/(N-M) –

0

Скажем, мы выбрали K элементов из N. Тогда наша следующая попытка имеет вероятность (NK)/N успеха, поэтому количество попыток, которые требуется, чтобы найти K + 1-й элемент - geometrically distributed со средним значением N/(NK).

Так что если 2M < N, мы ожидаем, что он примет менее двух попыток получить каждый элемент.

+0

+1 для этого тоже. Краткая информация о конверте :-) – 2010-07-19 16:57:29

Смежные вопросы