Сортировочная сеть

редактировать
A простая сортировочная сеть, состоящая из четырех проводов и пяти соединителей

В информатике, сети компараторов представляют собой абстрактные устройства, состоящие из фиксированного числа «проводов», переносящих значения и компаратора модули, которые соединяют пары проводов, меняя местами значения на проводах, если они расположены не в желаемом порядке. Такие сети обычно предназначены для выполнения сортировки по фиксированному количеству значений, и в этом случае они называются сетями сортировки .

Сети сортировки отличаются от обычных сортировок сравнения тем, что они не способны обрабатывать произвольно большие входные данные, и их последовательность сравнений задается заранее, независимо от результата предыдущих сравнений. Для сортировки большего количества входов необходимо построить новые сети сортировки. Эта независимость сравнительных последовательностей полезна для параллельного выполнения и для реализации в аппаратном обеспечении. Несмотря на простоту сортировочных сетей, их теория на удивление глубока и сложна. Сортировочные сети были впервые изучены примерно в 1954 году Армстронгом, Нельсоном и О'Коннором, которые впоследствии запатентовали эту идею.

Сортировочные сети могут быть реализованы либо в аппаратном обеспечении, либо в программном обеспечении. Дональд Кнут описывает, как компараторы для двоичных целых чисел могут быть реализованы в виде простых электронных устройств с тремя состояниями. Батчер в 1968 году предложил использовать их для построения коммутационных сетей для компьютерного оборудования, заменив обе шины и более быстрые, но более дорогие переключатели с перекладиной. С 2000-х годов сети сортировки (особенно bitonic mergesort ) используются сообществом GPGPU для построения алгоритмов сортировки для работы на графических процессорах.

Содержание
  • 1 Введение
    • 1.1 Глубина и эффективность
    • 1.2 Вставные и пузырьковые сети
    • 1.3 Принцип нуля и единицы
  • 2 Построение сетей сортировки
    • 2.1 Оптимальные сети сортировки
    • 2.2 Сложность тестирования сетей сортировки
  • 3 Ссылки
  • 4 Внешние ссылки
Введение
Демонстрация компаратора в сортировочной сети.

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

В формуле, если верхний провод несет x, а нижний провод несет y, то после попадания в компаратор провода несут x ′ = min (x, y) {\ displaystyle x '= \ min (x, y)}x' = \min(x, y)и y ′ = max (x, y) {\ displaystyle y '= \ max (x, y)}y' = \max(x, y)соответственно, поэтому пара значений отсортирована. Сеть проводов и компараторов, которая будет правильно сортировать все возможные входы в порядке возрастания, называется сетью сортировки или хабом Краскала. Отражая сеть, также можно отсортировать все входные данные в порядке убывания.

Полная работа простой сортировочной сети показана ниже. Очевидно, почему эта сортировочная сеть будет правильно сортировать входы; обратите внимание, что первые четыре компаратора «опускают» наибольшее значение вниз и «перемещают» наименьшее значение вверх. Последний компаратор перебирает два средних провода.

SimpleSortingNetworkFullOperation.svg

Глубина и эффективность

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

Вставка и пузырьковые сети

Мы можем легко построить сеть любого размера рекурсивно, используя принципы вставки и выбора. Предполагая, что у нас есть сортировочная сеть размера n, мы можем построить сеть размером n + 1, «вставив» дополнительный номер в уже отсортированную подсеть (используя принцип, лежащий в основе insert sort ). Мы также можем сделать то же самое, сначала «выбрав» наименьшее значение из входных данных, а затем рекурсивно отсортировав оставшиеся значения (используя принцип пузырьковой сортировки ).

Сеть сортировки, построенная рекурсивно, которая сначала опускает наибольшее значение в снизу, а затем сортирует оставшиеся провода. На основе пузырьковой сортировки
сеть сортировки, построенная рекурсивно, которая сначала сортирует первые n проводов, а затем вставляет оставшееся значение. На основе сортировка вставкой

Структура этих двух сетей сортировки очень схожа. Конструкция двух разных вариантов, которая объединяет компараторы, которые могут выполняться одновременно, показывает, что на самом деле они идентичны.

Сеть пузырьковой сортировки Сеть сортировки вставкой При использовании параллельных компараторов пузырьковая сортировка и сортировка вставкой идентичны

Сеть вставки (или, что эквивалентно, пузырьковая сеть) имеет глубину 2n - 3, где n - количество значений. Это лучше, чем O (n log n) время, необходимое машинам с произвольным доступом, но оказывается, что существуют гораздо более эффективные сети сортировки с глубиной всего O (log n), как описано ниже.

Принцип нуля и единицы

Хотя доказать правильность некоторых сетей сортировки (например, вставки / пузырькового сортировщика) несложно, это не всегда так просто. Нет! перестановки чисел в n-проводной сети, и для их проверки потребуется значительное количество времени, особенно когда n велико. Количество тестовых примеров можно значительно сократить до 2, используя так называемый принцип нуля или единицы. Хотя он все еще экспоненциальный, он меньше n! для всех n ≥ 4, и разница довольно быстро растет с увеличением n.

Принцип нуля или единицы гласит, что если сеть сортировки может правильно отсортировать все 2 последовательности нулей и единиц, то он также действителен для произвольно упорядоченных входных данных. Это не только резко сокращает количество тестов, необходимых для проверки достоверности сети, но и очень полезно при создании множества конструкций сетей сортировки.

Принцип может быть доказан, сначала наблюдая следующий факт о компараторах: когда монотонно возрастающая функция применяется к входам, то есть x и y заменяются на f (x) и f (y), то компаратор выдает min (f (x), f (y)) = f (min (x, y)) и max (f (x), f (y)) = f (max ( х, у)). Посредством индукции по глубине сети этот результат может быть расширен до леммы, утверждающей, что если сеть преобразует последовательность a 1,..., a n в b 1,..., b n, он преобразует f (a 1),..., f (a n) в f (b 1),..., f (b n). Предположим, что некоторые входные данные a 1,..., a n содержат два элемента a i< aj, и сеть неправильно меняет местами их на выходе. Тогда он также будет неправильно отсортировать f (a 1),..., f (a n) для функции

f (x) = {1 if x>ai 0 в противном случае. {\ displaystyle f (x) = {\ begin {cases} 1 \ {\ t_dv {if}} x>a_ {i} \\ 0 \ {\ t_dv {в противном случае.}} \ end {cases}}}f(x)={\begin{cases}1\ {\t_dv{if }}x>a_ {i} \\ 0 \ {\ t_dv {в противном случае.}} \ End {cases}}

Эта функция является монотонной, поэтому у нас есть принцип нуля или единицы в качестве противоположных.

<147 построения сетей сортировки>

Существуют различные алгоритмы для построения сетей сортировки глубины O (log n) (отсюда размер O (n log n)), такие как Сортировка слиянием нечетных и четных дозаторов, битонная сортировка, Сортировка оболочки и Сеть попарной сортировки. Эти сети часто используются на практике.

Также возможно построение сетей глубины O (log n) (отсюда размер O (n log n)) с использованием конструкции, называемой сетью AKS, в честь ее первооткрывателей Ajtai, Komlós и Szemerédi. открытие, сеть AKS имеет очень ограниченный практический приложение из-за большой линейной константы, скрытой обозначением Big-O. Отчасти это связано с построением графа-расширителя .

Упрощенная версия сети AKS была описана Патерсоном в 1990 году, который отметил, что «константы, полученные для границы глубины, все еще не позволяют конструкция имеет практическую ценность ».

Более новая конструкция, называемая зигзагообразной сортировочной сетью размера O (n log n), была обнаружена Гудрич в 2014 году. Хотя ее размер составляет намного меньше, чем у сетей AKS, его глубина O (n log n) делает его непригодным для параллельной реализации.

Оптимальные сети сортировки

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

n1234567891011121314151617
Глубина013355667788999910
Размер, верхняя граница01359121619252935394551566071
Размер, нижняя граница (если отличается)4347515560

Для более крупных сетей ни оптимальная глубина, ни оптимальный размер в настоящее время неизвестны. Известные на данный момент границы представлены в таблице ниже:

n181920212223242526272829303132
Глубина, верхняя граница111111121212121313141414141414
Глубина, нижняя граница101010101010101010101010101010
Размер, верхняя граница778591100107115120132139150155165172180185
Размер, нижняя граница65707580859095100105110115120125130135

.

Первые шестнадцать сетей с оптимальной глубиной перечислены в книге Кнута Искусство компьютерного программирования, начиная с издания 1973 года; однако, хотя оптимальность первых восьми была установлена ​​Флойдом и Кнутом в 1960-х годах, это свойство не было доказано для последних шести до 2014 года (дела девять и десять были решены в 1991 году).

Для от одного до одиннадцати входов известны минимальные (т. Е. Оптимальные по размеру) сети сортировки, а для более высоких значений нижние границы их размеров S (n) могут быть получены индуктивно с использованием леммы Ван Вурхиса ( стр. 240): S (n) ≥ S (n - 1) + ⌈log 2 n⌉. Первые десять оптимальных сетей были известны с 1969 года, причем первые восемь снова были известны как оптимальные со времен работы Флойда и Кнута, но оптимальность случаев n = 9 и n = 10 требовала до 2014 года. Оптимальная сеть для размера 11 была найдена в декабре 2019 года Яннисом Хардером, который также сделал нижнюю границу для 12 совпадающей с верхней границей.

Некоторая работа по проектированию оптимальной сети сортировки была выполнена с использованием генетического алгоритмы : Д. Кнут упоминает, что наименьшая известная сеть сортировки для n = 13 была обнаружена Хьюгом Жюилле в 1995 г. «путем моделирования эволюционного процесса генетического разведения» (стр. 226), и что сети сортировки минимальной глубины для n = 9 и n = 11 были обнаружены Лорен Швиберт в 2001 году «с использованием генетических методов» (стр. 229).

Сложность тестирования сетей сортировки

Маловероятно, что дальнейшие существенные улучшения могут быть сделаны для тестирования сетей общей сортировки, если только P = NP, потому что проблема проверки того, действительно ли сеть-кандидат - это сеть сортировки, известная как co-NP - завершенная.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-08 10:42:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте