Что такое детерминированный Quicksort?

Я читал о Quicksort и обнаружил, что иногда его называют "детерминированным Quicksort".

это альтернативная версия обычного Quicksort ? В чем разница между обычной и детерминированной Quicksort ?

7 ответов


обычный ("детерминированный") Quicksort может иметь очень плохое поведение для определенных наборов данных(например, реализация, которая выбирает первый несортированный элемент, имеет o (n^2) временную сложность для уже отсортированных данных).

рандомизированный Quicksort (который выбирает случайный поворот, а не выбирает детерминированно) иногда используется, чтобы дать лучшую ожидаемую производительность над все наборы данных.


Quicksort работает в O(n log n) ожидаемые/среднее время, но O(n^2) худшем случае. Это происходит, если выбранная ось последовательно является минимальной или максимальной.

В идеале вы хотите выбрать медиану в качестве своего пивота. Если нахождение медианы напрямую слишком дорого (обычно это происходит, если вы пытаетесь использовать quicksort), то обычно вместо этого нужно либо взять медиану из трех потенциальных элементов pivot, либо просто выбрать случайный элемент в качестве вашего стержень.

последний метод делает quicksort недетерминированным из-за случайности, присущей процессу выбора поворота.


В общем случае алгоритм сортировки является "детерминированным", если он последовательно сортирует элементы в одном и том же порядке каждый раз. Задан набор записей для сортировки по id (asc):

  1 Censu
  11 Marju
  4  Cikku
  11 Lonzu

тогда алгоритм сортировки может возвращать как Censu, Cikk, Marju, Lonzu, так и Censu, Cikku, Lonzu, Marju, как правильные сортировки. Детерминированный вид-это тот, который всегда возвращает один и тот же порядок. Это не всегда так. В случае quicksort можно получить более быструю среднюю производительность, если повороты выбираются случайным образом (в идеале вы бы выбрали медиану, но это может быть дорого). Однако это стоит того: ваш поиск больше не является детерминированным.


ваш источник может (и должен) дать свое собственное определение, но обычно детерминированный quicksort-это тот, где ось выбирается с помощью формулы, которая не зависит от случайных чисел. Например, всегда выбирайте средний элемент или всегда первый, или что-то вроде этого. Это означает, что его производительность всегда будет одинаковой (в теории в любом случае, хотя на практике разница не должна быть слишком большой) независимо от того, сколько раз вы запускаете его на одном входе. В рандомизированных быстрая сортировка означает, что вы используете случайные числа при выборе поворота, то есть производительность не может быть (легко) предсказана для разных запусков на одном входе.


Это связано с разделением (или шагом разделения от знаменитого разделения и завоевания, который используется в быстрой сортировке). Если каждый раз, когда последний (или первый элемент или элемент в любой позиции, просто он должен быть одной и той же позицией каждый раз, когда набор данных разделен) используется в качестве оси для разделения, то это детерминированная быстрая сортировка. Если ось выбрана случайным образом, то это Рандомизированная быстрая сортировка.

здесь конспект лекций что ставит его через.

надеюсь, это поможет

ура


общие прилагательные перед quicksort являются детерминированными и рандомизированными. Детерминированный означает, что быстрая сортировка будет всегда один и тот же набор данных таким же образом, хотя рандомизированных быстрая сортировка использует рандомизацию и редко вроде те же данные в том же самом мода (если набор данных очень мало - тогда это скорее всего).

детерминированные

это сводится к тому, как выбираются оси. В детерминированном quicksort, оси выбираются либо всегда с одинаковым относительным индексом, таким как первый, последний или средний элемент, либо с использованием медианы любого числа заданных вариантов элементов. Например, распространенным методом является выбор медианы первого, последнего и среднего элементов в качестве оси вращения. Даже с описанным выше методом медианы 3 Некоторые наборы данных могут легко дать O (N^2) временную сложность. Примером набора данных является набор так называемых органных труб данные:

array = [1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1]

рандомизированных

Randomizated quicksorts может выбрать только случайный поворот или использовать медиану некоторого количества случайно выбранных поворотов. Существует еще возможность o (n^2) временной сложности, но вероятность намного меньше и становится меньше с увеличением размера набора данных.


помимо того, что многие другие уже рассказывали вам о том, как реализуется детерминированная быстрая сортировка и недетерминированная, я считаю, что гораздо более важным аспектом такого рода является то, что с детерминированные quicksort, у вас всегда есть тот же порядок записей, когда ключи сталкиваются, в то время как с недетерминированный quicksorts, порядок таких записей может отличаться каждый раз, когда вы запускаете сортировку.

Я думаю, что вы не должны использовать недетерминированный quicksorting, когда у вас есть не уникальные ключи.