Звичайний простий алгоритм знаходження серединного елемента в масиві з чисел:н
- Зразок елементів з із заміною на Б
- Сортування і знайти ранг елементів і про| Б | ± √ lrB
- Переконайтеся, що і знаходяться на протилежних сторонах медіани і що в між та є не більше елементів для деякої відповідної постійної . Не вдасться, якщо цього не відбудеться.r A C √ AlrC>0
- В іншому випадку знайдіть медіану, відсортувавши елементи між таl r
Не важко зрозуміти, що це працює в лінійний час і що це досягає високої ймовірності. (Усі погані події - це великі відхилення від очікування бінома.)
Альтернативний алгоритм цієї ж проблеми, який природніше навчити студентам, які побачили швидке сортування, є описаним тут: Випадковий вибір
Неважко також помітити, що цей має лінійний очікуваний час роботи: скажіть, що "раунд" - це послідовність рекурсивних викликів, яка закінчується, коли дається розділення 1 / 4-3 / 4, а потім спостерігайте, що очікувана тривалість круглий максимум 2. (У першому розіграші раунду ймовірність отримати хороший розкол становить 1/2, а потім після того, як насправді збільшується, як алгоритм був описаний, так що довга кругла переважає геометрична випадкова величина.)
Отже, тепер питання:
Чи можливо показати, що рандомізований вибір проходить у лінійний час з високою ймовірністю?
У нас є раунди, і кожен раунд має довжину принаймні з вірогідністю не більше , тому зв'язане з'єднання дає, що час запуску - з ймовірністю .k 2 - k + 1 O ( n log log n ) 1 - 1 / O ( log n )
Це свого роду незадовільно, але чи це насправді правда?