Сеть Бетчера
Содержание
Определение
Сеть Бетчера (Batcher odd-even mergesort) — сортирующая сеть размером
и глубиной , где — количество элементов для сортировки.Конструирование сети
Для начала введем понятие битонической последовательности:
Определение: |
Битонической последовательностью называется последовательность, которая сначала монотонно возрастает, а затем монотонно убывает, или последовательность, которая приводится к такому виду путем циклического сдвига. |
Сейчас мы будем рассматривать только нуль-единичные битонические последовательности:
Определение: |
Нуль-единичные битонические последовательности — последовательности вида | или для целых , где или обозначает идущих подряд единиц или нулей соответственно.
В качестве примеров нуль-единичной битонической последовательности можно привести последовательности
С первого взгляда битонические последовательности могут показаться бесполезными в деле построения сортирующих сетей, но на самом деле они обладают одним полезным свойством: если соединить вместе две отсортированные последовательности, причем одна из них должна быть отсортировала по возрастанию, а другая по убыванию — то получится битоническая последовательность. Далее этому свойству будет найдено применение.
Битонический сортировщик
Построим сеть, которая эффективно сортирует все битонические последовательности — т.н. битонический сортировщик.
ПолуфильтрОсновной элемент битонического сортировщика называется полуфильтром (half-cleaner).
Каждый полуфильтр — сравнивающая сеть единичной глубины, в которой |
|
Собственно битонический сортировщик
Теперь используем полуфильтры для сортировки битонических последовательностей. Как только что было доказано, один полуфильтр разделяет битоническую последовательность на две равные части, одна из которых однородна, а другая сама по себе является битонической последовательностью, причем части расположены в правильном порядке. Тогда мы можем каждую часть снова отправить в полуфильтр вдвое меньшего размера, чем предыдущий. Затем, если нужно, четыре получившихся части снова отправить в полуфильтры и так далее, пока количество проводов в одной части больше
. Схема битонического сортировщика для восьми входов приведен на рис. 3.Так можно построить сеть для числа входов, являющегося степенью
. Поскольку каждый вертикальный ряд полуфильтров вдвое сокращает число входов, которые необходимо отсортировать, глубина всей сети равна , где — число входов.Объединяющая сеть
Битонический сортировщик находит своё применение в конструкции так называемой объединяющей сети.
Определение: |
Объединяющая сеть (Merger) — сеть компараторов, объединяющая две отсортированные входные последовательности в одну отсортированную выходную последовательность. |
Построим объединяющую сеть на основе битонического сортировщика. Для этого рассмотрим наши отсортированные входные последовательности:
Отсортированная последовательность имеет вид для целых . Запишем две входные последовательности как и . Если перевернуть вторую последовательность, получится отсортированная по невозрастанию последовательность . Если теперь записать первую и перевернутую вторую последовательности подряд, получится битоническая последовательность , которую можно отсортировать в битоническом сортировщике с глубиной .
Объединяющая сеть является ничем иным как битоническим сортировщиком. Единственное отличие в том, что половина входных проводов расположена в обратном порядке (предполагается, что мы объединяем две сети одинакового размера
). Поэтому первый полуфильтр будет отличаться от остальных — он будет соединять -ый провод не с -ым, а с -ым проводом. Схема объединяющей сети для восьми проводов приведена на рисунке 4.Сортирующая сеть
Теперь, с помощью описанных выше объединяющих сетей мы построим параллельную версию сортировки слиянием.
Пусть мы хотим отсортировать входов, — целое и . Для этого сначала отсортируем пары проводов, поставив в первом слое компаратор между -ым и -ым проводом для нечетных . Затем с помощью объединяющих сетей параллельно объединим отсортированные пары проводов в отсортированные четверки. Затем объединим отсортированные четверки в отсортированные восьмерки. И так далее, пока на выходе очередной объединяющей сети не будет проводов.
Схема такой сети приведена на рис. 5.
|
Источники
- Wikipedia — Batcher odd-even mergesort
- Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. — 2-е изд. — М.: Издательский дом «Вильямс», 2005. — С. 808—818.