Сеть Бетчера — различия между версиями
(→Битонический сортировщик) |
(→Полуфильтр) |
||
Строка 29: | Строка 29: | ||
{{Лемма|statement= | {{Лемма|statement= | ||
− | Если на вход в полуфильтр подать битоническую последовательность из нулей и единиц длиной <tex>n</tex>, то на выходе мы получим две битонические последовательности длиной <tex>\frac{n}{2}</tex> такие, что каждый элемент из верхней последовательности не превосходит любой элемент из нижней, и что одна из них будет | + | Если на вход в полуфильтр подать битоническую последовательность из нулей и единиц длиной <tex>n</tex>, то на выходе мы получим две битонические последовательности длиной <tex>\frac{n}{2}</tex> такие, что каждый элемент из верхней последовательности не превосходит любой элемент из нижней, и что одна из них будет '''однородной''' (англ. ''clean'') {{---}} целиком состоящей либо из нулей, либо из единиц. |
|proof= | |proof= | ||
Для всех <tex>i=1,2,...,\frac{n}{2}</tex> полуфильтр сравнивает провода с номерами <tex>i</tex> и <tex>i+\frac{n}{2}</tex>. Без потери общности будем рассматривать входную последовательность вида <tex>0...01...10...0</tex> (для последовательности вида <tex>1...10...01...1</tex> рассуждения аналогичны). В зависимости от того в каком блоке из последовательно расположенных нулей и единиц находится средняя точка <tex>\frac{n}{2}</tex> входной последовательности, можно выделить 3 случая, причем один из случаев (когда средняя точка попадает на блок из единиц) можно разбить еще на 2 случая. Все 4 случая разобраны на рисунке справа. Для каждого из них лемма выполняется. | Для всех <tex>i=1,2,...,\frac{n}{2}</tex> полуфильтр сравнивает провода с номерами <tex>i</tex> и <tex>i+\frac{n}{2}</tex>. Без потери общности будем рассматривать входную последовательность вида <tex>0...01...10...0</tex> (для последовательности вида <tex>1...10...01...1</tex> рассуждения аналогичны). В зависимости от того в каком блоке из последовательно расположенных нулей и единиц находится средняя точка <tex>\frac{n}{2}</tex> входной последовательности, можно выделить 3 случая, причем один из случаев (когда средняя точка попадает на блок из единиц) можно разбить еще на 2 случая. Все 4 случая разобраны на рисунке справа. Для каждого из них лемма выполняется. | ||
Строка 37: | Строка 37: | ||
[[Файл:Half-Cleaner-proof.png|350px|center|thumb|Все случаи попадания битонической последовательности на полуфильтр.]] | [[Файл:Half-Cleaner-proof.png|350px|center|thumb|Все случаи попадания битонической последовательности на полуфильтр.]] | ||
− | |||
=== Построение битонического сортировщика === | === Построение битонического сортировщика === |
Версия 21:46, 22 января 2017
Сеть Бетчера (англ. Batcher bitonic mergesort) — сортирующая сеть размером [1].
и глубиной , где — количество элементов для сортировки. Её авторство принадлежит Кену БетчеруВ этой статье будет описана сортирующая сеть для случая когда
— степень двойки ( ).Содержание
Битоническая последовательность
Сначала введем все необходимые понятия для построения сортирующей сети Бетчера.
Определение: |
Битонической последовательностью (англ. bitonic sequence) называется конечный упорядоченный набор (кортеж) из вещественных чисел, в котором они сначала монотонно возрастают, а затем монотонно убывают, или набор, который приводится к такому виду путем циклического сдвига. |
Здесь мы воспользуемся 0-1 принципом и будем рассматривать только нуль-единичные битонические последовательности:
Определение: |
Нуль-единичные битонические последовательности — кортежи из нулей и единиц вида | или для целых , где или обозначает идущих подряд единиц или нулей соответственно.
Приведем несколько примеров нуль-единичной битонической последовательности:
, , , , .Далее будет показано, что битоническую последовательность можно легко получить из двух отсортированных, поэтому если мы найдем способ эффективно её сортировать, то сможем столь же эффективно сливать (объединять) две отсортированные последовательности в одну. На этой операции и основывается принцип работы описываемой в этой статье сети сортировки.
Битонический сортировщик
Построим сеть, которая эффективно сортирует все битонические последовательности — так называемый битонический сортировщик (англ. bitonic sorter).
ПолуфильтрБитонический сортировщик представляет собой каскад так называемых полуфильтров (англ. half-cleaner). Каждый полуфильтр — сеть компараторов единичной глубины, в которой -й входной провод сравнивается со входным проводом с номером , где (количество входов — чётное).
|
Построение битонического сортировщика
Теперь используем полуфильтры для сортировки битонических последовательностей. Как только что было доказано, один полуфильтр разделяет битоническую последовательность на две равные части, одна из которых однородна, а другая сама по себе является битонической последовательностью, причем части расположены в правильном порядке. Тогда мы можем каждую часть снова отправить в полуфильтр вдвое меньшего размера, чем предыдущий. Затем, если нужно, четыре получившихся части снова отправить в полуфильтры и так далее, пока количество проводов в одной части больше
.Так можно построить сеть для числа входов, являющегося степенью двойки. Поскольку каждый вертикальный ряд полуфильтров вдвое сокращает число входов, которые необходимо отсортировать, глубина всей сети равна
, где — число входов. Количество компараторов равно , потому что размер одного полуфильтра на входов — компараторов, а в слое битонического сортировщика находится полуфильтров, где — номер слоя, начиная с единицы.Объединяющая сеть
Битонический сортировщик находит своё применение в конструкции так называемой объединяющей сети.
Определение: |
Объединяющая сеть (англ. merger) — сеть компараторов, объединяющая две отсортированные входные последовательности в одну отсортированную выходную последовательность. |
Построим объединяющую сеть на основе битонического сортировщика. Для этого рассмотрим наши отсортированные входные последовательности:
Отсортированная последовательность имеет вид
для целых . Запишем две входные последовательности как и . Если перевернуть вторую последовательность, получится отсортированная по невозрастанию последовательность . Если теперь записать первую и перевернутую вторую последовательности подряд, получится битоническая последовательность , которую можно отсортировать в битоническом сортировщике с глубиной .Объединяющая сеть является ничем иным как битоническим сортировщиком. Единственное отличие в том, что половина входных проводов расположена в обратном порядке (предполагается, что мы объединяем две сети одинакового размера
). Поэтому первый полуфильтр будет отличаться от остальных — он будет соединять -ый провод не с -ым, а с -ым проводом. Схема объединяющей сети для восьми проводов приведена ниже.Глубина и число компараторов в объединяющей сети очевидно те же, что и в битоническом сортировщике.
Сортирующая сеть
Построение
Теперь, с помощью описанных выше объединяющих сетей мы построим параллельную версию сортировки слиянием.
Пусть мы хотим отсортировать
входов, — целое и . Для этого сначала отсортируем пары проводов, поставив в первом слое компаратор между -ым и -ым проводом для нечетных . Затем с помощью объединяющих сетей параллельно объединим отсортированные пары проводов в отсортированные четверки. Затем объединим отсортированные четверки в отсортированные восьмерки. И так далее, пока на выходе очередной объединяющей сети не будет проводов.Так мы построили сеть, сортирующую любую последовательность из нулей и единиц. А это означает, согласно 0-1 принципу, что она будет сортировать и любой набор чисел.
Точные формулы размера и глубины сети
Оценим глубину этой сортирующей сети. Она состоит из
слоёв объединяющих сетей и каждый слой имеет глубину, зависящую от его номера. В слое с номером ( ) объединяющая сеть имеет глубину , потому как объединяет проводов. Таким образом глубина всей сортирующей сети в точности равна .Оценим размер сети. В объединяющей сети на
входов содержится компараторов. Снова просуммируем формулу по числу объединяющих сетей и получим точную оценку .Примечания
Источники информации
- Wikipedia — Bitonic mergesort
- Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. — 2-е изд. — М.: Издательский дом «Вильямс», 2005. — С. 808—818.