Jump to content

Битонический сортировщик

Битонический сортировщик
Сеть битической сортировки с восемью входами
Сеть битонной сортировки с восемью входами.
Сорт Алгоритм сортировки
Структура данных Множество
Худшая производительность параллельное время
Лучшая производительность параллельное время
Средняя производительность параллельное время
Наихудшая пространственная сложность непараллельное время
Оптимальный Нет

Bitonic mergesort — это параллельный алгоритм сортировки. Он также используется в качестве метода построения сортировочной сети . Алгоритм был разработан Кеном Бэтчером . Полученные сортировочные сети состоят из компараторов и имеют задержку , где количество элементов, подлежащих сортировке. [1] Это делает его популярным выбором для сортировки большого количества элементов в архитектуре, которая сама содержит большое количество параллельных исполнительных блоков, работающих синхронно , например, в типичном графическом процессоре .

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

Сложность

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

Позволять и .

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

Отсюда следует, что число компараторов ограничен (что устанавливает точное значение для когда является степенью 2).

Хотя абсолютное число сравнений обычно выше, чем при сортировке «нечет-чет» Бэтчера , многие последовательные операции в битонной сортировке сохраняют локальность ссылки , что делает реализации более удобными для кэширования и, как правило, более эффективными на практике.

Как работает алгоритм

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

Ниже представлена ​​битоническая сортировочная сеть с 16 входами:

Схема битонной сортировочной сети с 16 входами и стрелками

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

Стрелки — компараторы. Всякий раз, когда два числа достигают двух концов стрелки, они сравниваются, чтобы убедиться, что стрелка указывает в сторону большего числа. Если они вышли из строя, их меняют местами. Цветные рамки предназначены только для иллюстрации и не влияют на алгоритм.

Каждое красное поле имеет одинаковую структуру: каждый ввод в верхней половине сравнивается с соответствующим вводом в нижней половине, при этом все стрелки направлены вниз (темно-красный) или все вверх (светло-красный). Если входные данные образуют битоническую последовательность (одна неубывающая последовательность, за которой следует одна невозрастающая или наоборот), то выходные данные будут формировать две битонические последовательности. Верхняя половина выходных данных будет битонической, а нижняя половина — битонной, причем каждый элемент верхней половины меньше или равен каждому элементу нижней половины (для темно-красного) или наоборот (для светло-красного). Эта теорема не очевидна, но ее можно проверить, внимательно рассмотрев все случаи сравнения различных входных данных, используя принцип нуля-единицы , где битоническая последовательность представляет собой последовательность нулей и единиц, содержащую не более двух «10». " или "01" подпоследовательности.

Красные прямоугольники объединяются, образуя синие и зеленые прямоугольники. Каждый такой блок имеет одинаковую структуру: красный блок применяется ко всей входной последовательности, затем к каждой половине результата, затем к каждой половине каждого из этих результатов и так далее. Все стрелки направлены вниз (синие) или вверх (зеленые). Эта структура известна как сеть-бабочка . Если входные данные в это поле являются битоническими, то выходные данные будут полностью отсортированы в порядке возрастания (синий) или убывания (зеленый). Если число попадает в синее или зеленое поле, то первое красное поле отсортирует его в правильную половину списка. Затем он пройдет через меньшую красную рамку, которая сортирует его по правильной четверти списка внутри этой половины. Это продолжается до тех пор, пока он не будет отсортирован в правильное положение. Таким образом, выходные данные зеленого или синего поля будут полностью отсортированы.

Зеленые и синие прямоугольники объединяются, образуя всю сортировочную сеть. Для любой произвольной последовательности входных данных он отсортирует их правильно, начиная с самого большого значения внизу. Выходные данные каждого зеленого или синего поля будут представлять собой отсортированную последовательность, поэтому выходные данные каждой пары соседних списков будут битоническими, поскольку верхний — синий, а нижний — зеленый. Каждый столбец синих и зеленых прямоугольников содержит N отсортированных последовательностей и объединяет их попарно, образуя N/2 битонических последовательностей, которые затем сортируются по полям в этом столбце для формирования N/2 отсортированных последовательностей. Этот процесс начинается с того, что каждый вход считается отсортированным списком из одного элемента, и продолжается по всем столбцам, пока последний не объединит их в один отсортированный список. Поскольку последний этап был синим, в этом окончательном списке самый большой элемент будет внизу.

Альтернативное представительство

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

Каждый зеленый прямоугольник на диаграмме выше выполняет ту же операцию, что и синий, но с сортировкой в ​​противоположном направлении. Таким образом, каждый зеленый квадрат можно заменить синим блоком, за которым следует пересечение, при котором все провода перемещаются в противоположное положение. Это позволит всем стрелкам указывать в одном направлении, но не позволит горизонтальным линиям быть прямыми. Однако аналогичное пересечение можно разместить справа от нижней половины выходных данных любого красного блока, и сортировка по-прежнему будет работать правильно, поскольку обратная битоническая последовательность по-прежнему является битонной. Если у красного прямоугольника есть пересечение до и после него, его можно переставить внутри так, чтобы два пересечения нейтрализовались, и провода снова стали прямыми. Таким образом, следующая диаграмма эквивалентна приведенной выше, где каждый зеленый прямоугольник стал синим плюс кроссовер, а каждый оранжевый прямоугольник — красным блоком, поглотившим два таких пересечения:

Схема битонной сортировочной сети с 16 входами (и без стрелок)

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

Пример кода

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

Ниже приведена безрекурсивная реализация битонической сортировки слиянием, когда длина массива равна степени двойки: [2]

    // задан массив arr длиной n, этот код сортирует его на месте      // все индексы работают от 0 до n-1      for   (  k   =   2  ;   k   <=   n  ;   k   *=   2  )   // k удваивается на каждой итерации          for   (  j   =   k  /  2  ;   j   >   0  ;   j   /=   2  )   // j уменьшается вдвое на каждой итерации с усечением дробных частей              for   (  i   =   0  ;   i   <   n  ;   i  ++  )                  l   =   побитовое XOR   (  i  ,   j  );   // в C-подобных языках это "i ^ j"                  if   (  l   >   i  )                      if   (    (  побитовое   AND (  i  ,   k  )   ==   0  )   AND   (  arr  [  i  ]   >   arr  [  l  ])                         OR   (  побитовое AND   (  i  ,   k  )   !=   0  )   AND   (  arr  [  i  ]   <   arr  [  l  ]))   )                            поменять   элементы   местами   arr  [  i  ]   и   arr  [  l  ] 

См. также

[ редактировать ]
  1. ^ Битоническая сортировочная сеть для n, а не степени 2
  2. ^ Исходный код на языке C находился по адресу https://www2.cs.duke.edu/courses/fall08/cps196.1/Pthreads/bitonic.c (самая последняя функция в файле). Для Википедии он был заменен общим синтаксисом псевдокода, не специфичным для C.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 80d74fd81c6e9750ca62c38aacf369cd__1721122440
URL1:https://arc.ask3.ru/arc/aa/80/cd/80d74fd81c6e9750ca62c38aacf369cd.html
Заголовок, (Title) документа по адресу, URL1:
Bitonic sorter - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)