Я не математик, но я дам ему грубый снимок. Тем не менее, это НЕ гарантируется.
Для каждого дополнительного члена 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: Я удалил свой ответ. Эта сумма приблизительно равна N * ln (N/(N-M + 1)), поэтому для M = N мы ожидаем тесты O (NlogN). – 2010-07-19 16:46:32
Perfect. Теперь это имеет для меня полный смысл. – mpm
Я бы добавил круглые скобки: E (время выполнения) = N/N + N/(N-1) + N/(N -2) ... + N/(N-M) –