Обычный простой алгоритм для нахождения медианного элемента в массиве из чисел:н
- Пример элементов из с заменой на Б
- Сортируйте и найдите элементы ранга и из| Б | ± √ lrB
- Убедитесь , что и находятся на противоположных сторонах средней части и что существует не более элементами в А между л и г для некоторых соответствующих постоянная С > 0 . Сбой, если этого не произойдет.r A C √
- В противном случае найдите медиану, отсортировав элементы между и
Нетрудно видеть, что это происходит за линейное время и что это происходит с большой вероятностью. (Все плохие события - большие отклонения от ожидания бинома.)
Альтернативный алгоритм для той же задачи, который более естественно преподавать учащимся, которые видели быструю сортировку, описан здесь: Рандомизированный отбор
Также легко увидеть, что у этого есть линейное ожидаемое время выполнения: скажем, что «раунд» - это последовательность рекурсивных вызовов, которая заканчивается, когда кто-то дает разбиение 1 / 4-3 / 4, а затем наблюдаем, что ожидаемая длина раунд не более 2. (В первом тираже раунда вероятность получения хорошего разделения равна 1/2, а затем после фактического увеличения, как было описано в алгоритме, поэтому в длине раунда преобладает геометрическая случайная величина.)
Итак, теперь вопрос:
Можно ли показать, что рандомизированный отбор проходит в линейное время с высокой вероятностью?
У нас есть раундов, и каждый раунд имеет длину не менее k с вероятностью не более 2 - k + 1 , поэтому при объединении получается, что время выполнения равно O ( n log log n ) с вероятностью 1 - 1 / O ( журнал N ) .
Это отчасти неудовлетворительно, но на самом ли деле это правда?