Быстрая сортировка по нескольким клавишам - Википедия - Multi-key quicksort

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

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

Описание

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

алгоритм sort (a: массив строк, d: целое число) является    если длина (а) ≤ 1 или же d ≥ K тогда        возвращаться    p: = pivot (a, d) i, j: = partition (a, d, p) (Обратите внимание на одновременное присвоение двух переменных.)    sort (a [0: i), d) sort (a [i: j), d + 1) sort (a [j: length (a) », d)

В вращаться функция должна возвращать один символ. Bentley и Sedgewick предлагают выбрать медиана из a [0] [d], ..., a [длина (a) −1] [d] или какой-нибудь случайный символ в этом диапазоне.[3] Статистическая сумма является вариантом той, которая используется в обычных трехсторонняя быстрая сортировка: он переставляет а так что все а [0], ..., а [i − 1] иметь элемент в позиции d это меньше чем п, а [я], ..., а [j − 1] имеют п на позиции d, и строки из j вперед иметь dй элемент больше, чем п. (Первоначальная функция разделения, предложенная Бентли и Седжвиком, может быть медленной в случае повторяющихся элементов; Разделение голландского национального флага можно использовать, чтобы облегчить это.[5])

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

Смотрите также

Примечания

  1. ^ Один из способов сделать это без изменения представления строк в памяти - это проиндексировать их с помощью функции, которая возвращает -1 или другое небольшое значение, когда индекс выходит за пределы допустимого диапазона.
  2. ^ Массивы и строки имеют нулевой индекс. An срез массива а [я: j) дает подмассив а из я к j (исключая) и предполагается, что это не копирующая операция с постоянным временем.

Рекомендации

  1. ^ Эта статья включает материалы общественного достояния отNIST документ:Блэк, Пол Э. "мультиклавишная быстрая сортировка". Словарь алгоритмов и структур данных.
  2. ^ Хоар, К.А.Р. (1962). «Быстрая сортировка». Comput. Дж. 5 (1): 10–16. Дои:10.1093 / comjnl / 5.1.10.
  3. ^ а б c Бентли, Джон; Седжвик, Роберт (1997). Быстрые алгоритмы сортировки и поиска строк (PDF). Proc. Ежегодный симпозиум 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). "Сортировка строк с помощью трехсторонней быстрой сортировки по основанию". Журнал доктора Добба.