Jump to content

Быстрая сортировка с несколькими ключами

Быстрая сортировка с несколькими ключами , также известная как быстрая поразрядная сортировка с тремя путями . [1] это алгоритм сортировки строк . Этот гибрид быстрой сортировки и поразрядной сортировки был первоначально предложен П. Шеклтоном, как сообщается в одной из К. А. Хоара основополагающих статей о быстрой сортировке ; [2] : 14  его современное воплощение было разработано Джоном Бентли и Робертом Седжвиком в середине 1990-х годов. [3] Алгоритм разработан с учетом того свойства, что во многих задачах строки имеют общие префиксы .

Одним из применений алгоритма является построение суффиксных массивов , для чего по состоянию на 2004 год это был один из самых быстрых алгоритмов. [4]

Описание

[ редактировать ]

Алгоритм трехсторонней быстрой сортировки по основанию сортирует массив из N строк ( указателей на) в лексикографическом порядке . Предполагается, что все строки имеют одинаковую длину K ; если строки имеют разную длину, они должны быть дополнены дополнительными элементами, размер которых меньше любого элемента в строках. [а] Тогда псевдокод алгоритма будет [б]

algorithm sort(a : array of string, d : integer) is
    if length(a) ≤ 1 or d ≥ K then
        return
    p := pivot(a, d)
    i, j := partition(a, d, p)   (Note a simultaneous assignment of two variables.)
    sort(a[0:i), d)
    sort(a[i:j), d + 1)
    sort(a[j:length(a)), d)

В отличие от большинства алгоритмов сортировки строк, которые просматривают множество байтов в строке, чтобы решить, является ли строка меньше, такой же или равной какой-либо другой строке; а затем переключив внимание на какую-либо другую пару строк, быстрая сортировка с несколькими ключами сначала рассматривает только один байт каждой строки в массиве, байт d, первоначально первый байт каждой строки. Рекурсивный вызов использует новое значение d и передает подмассив, где каждая строка в подмассиве имеет одну и ту же начальную часть — символы перед символом d.

The функция поворота должна возвращать один символ. Бентли и Седжвик предлагают либо медиану выбрать a[0][d], ..., a[length(a)−1][d] или какой-либо случайный символ в этом диапазоне. [3] Функция разделения — это вариант той, которая используется в обычной трехсторонней быстрой сортировке : она переупорядочивает а так, что все a[0], ..., a[i−1] имеют элемент в позиции д, это меньше, чем п , a[i], ..., a[j−1] имеют p в позиции d , а строки, начиная с j, имеют a d 'й элемент больше, чем p . (Исходная функция разделения, предложенная Бентли и Седжвиком, может быть медленной в случае повторяющихся элементов; разделение под национальным флагом Нидерландов . для облегчения этого можно использовать [5] )

Практические реализации быстрой многоключевой сортировки могут выиграть от тех же оптимизаций, которые обычно применяются к быстрой сортировке: поворот по медиане из трех, переключение на сортировку вставками для небольших массивов и т. д. [6]

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Один из способов сделать это, не изменяя представление строк в памяти, — это индексировать их с помощью функции, которая возвращает −1 или какое-либо другое небольшое значение, когда индекс выходит за пределы диапазона.
  2. ^ Массивы и строки имеют нулевой индекс. Срез массива a[i:j) дает подмассив а из я чтобы j (эксклюзивный) и предполагается, что это некопирующая операция с постоянным временем.
  1. ^ Общественное достояние В этой статье использованы общедоступные материалы из Пол Э. Блэк. «многоклавишная быстрая сортировка» . Словарь алгоритмов и структур данных . НИСТ .
  2. ^ Хоар, ЦАР (1962). «Быстрая сортировка» . Вычислить. Дж. 5 (1): 10–16. дои : 10.1093/comjnl/5.1.10 .
  3. ^ Перейти обратно: а б с Бентли, Джон; Седжвик, Роберт (1997). Быстрые алгоритмы сортировки и поиска строк (PDF) . Учеб. Ежегодный симпозиум ACM-SIAM. по дискретным алгоритмам (SODA). ISBN  0-89871-390-0 .
  4. ^ Манзини, Джованни; Феррагина, Паоло (2004). «Разработка облегченного алгоритма построения суффиксного массива». Алгоритмика . 40 : 33–50. CiteSeerX   10.1.1.385.5959 . дои : 10.1007/s00453-004-1094-1 .
  5. ^ Ким, Ынсанг; Пак, Кунсу (2009). «Улучшение многоключевой быстрой сортировки для сортировки строк с множеством одинаковых элементов». Письма об обработке информации . 109 (9): 454–459. дои : 10.1016/j.ipl.2009.01.007 .
  6. ^ Бентли, Джон; Седжвик, Роберт (1998). «Сортировка строк с помощью трехсторонней быстрой сортировки» . Журнал доктора Добба .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fd85409bd619e0a26b74c53e750a86dc__1678698840
URL1:https://arc.ask3.ru/arc/aa/fd/dc/fd85409bd619e0a26b74c53e750a86dc.html
Заголовок, (Title) документа по адресу, URL1:
Multi-key quicksort - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)