Сеть Бетчера — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Битонический сотрировщик)
(Начаты работы по разгребанию завалов)
Строка 1: Строка 1:
 
{{В разработке}}
 
{{В разработке}}
 
==Определение==
 
==Определение==
<b>Сеть Бетчера (Batcher odd-even mergesort)</b> - сортирующая сеть размером <tex>O(n \log^2n)</tex> и глубиной <tex>O(\log^2n)</tex>, где <tex>n</tex> - количество элементов для сортировки.
+
<b>Сеть Бетчера (Batcher odd-even mergesort)</b> {{---}} сортирующая сеть размером <tex>O(n \log^2n)</tex> и глубиной <tex>O(\log^2n)</tex>, где <tex>n</tex> {{---}} количество элементов для сортировки.
  
 
==Конструирование сети==
 
==Конструирование сети==
Строка 7: Строка 7:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Битонической последовательностью называется последовательность, которая сначала монотонно возрастает, а затем монотонно убывает, или последовательность, которая приводится к такому виду путем циклического сдвига.}}
+
<b>Битонической последовательностью</b> называется последовательность, которая сначала монотонно возрастает, а затем монотонно убывает, или последовательность, которая приводится к такому виду путем циклического сдвига.}}
В нашем случае мы будем рассматривать нуль-единичные битонические последовательности:
+
Сейчас мы будем рассматривать только нуль-единичные битонические последовательности:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Нуль-единичные битонические последовательности - последовательности вида <tex>0^i1^j0^k</tex> или <tex>1^i0^j1^k</tex> для <tex>i,j,k\ge0</tex>}}
+
<b>Нуль-единичные битонические последовательности</b> {{---}} последовательности вида <tex>0^i1^j0^k</tex> или <tex>1^i0^j1^k</tex> для целых <tex>i,j,k\ge0</tex>, где <tex>1^i</tex> или <tex>0^i</tex> обозначает <tex>i</tex> идущих подряд единиц или нулей соответственно.}}
 +
В качестве примеров нуль-единичной битонической последовательности можно привести последовательности <tex>00111000</tex>,  <tex>11000111</tex>,  <tex>1110</tex>,  <tex>1</tex>,  <tex>000</tex>. <br>
 +
С первого взгляда битонические последовательности могут показаться бесполезными в деле построения сортирующих сетей, но на самом деле они обладают одним полезным свойством: если соединить вместе две отсортированные последовательности, причем одна из них должна быть отсортировала по возрастанию, а другая по убыванию {{---}} то получится битоническая последовательность. Далее мы найдем этому свойству применение.
 +
 
 
===Битонический сортировщик===
 
===Битонический сортировщик===
{|
+
Сначала мы построим сеть, которая эффективно сортирует все битонические последовательности {{---}} т.н. <b>битонический сортировщик</b>. <br>
|На первом этапе конструирования стоит задача построить сравнивающую сеть, которая будет сортировать любую нуль-единичную битоническую последовательность - битонический сортировщик.<br>
+
 
 +
{| <!-- Какие-то адовые костыли только чтобы разместить картинку справа от текста -->
 +
|
 
====Полуфильтр====
 
====Полуфильтр====
Битонический сортировщик состоит из нескольких каскадов, каждый из которых называется <b>''полуфильтром''</b> (half-cleaner). Каждый полуфильтр - сравнивающая сеть глубиной 1, в которой <tex>i</tex>-й входной провод сравнивается со входным проводом с номером <tex>i+\frac{n}{2}</tex>, где <tex>i=1,2,...,\frac{n}{2}</tex>.<br>
+
Основной элемент битонического сортировщика называется <b>полуфильтром</b> (half-cleaner).
 +
Каждый полуфильтр {{---}} сравнивающая сеть единичной глубины, в которой <tex>i</tex>-й входной провод сравнивается со входным проводом с номером <tex>\frac{n}{2} + i</tex>, где <tex>i=1,2,...,\frac{n}{2}</tex> (предположим, что <tex>n</tex> {{---}} чётное).<br>
 +
[[Файл:Half-Cleaner1.png‎|250px|center|thumb|Рис.1 Полуфильтр для 8 проводов]]
 +
 
 
{{Лемма|statement=
 
{{Лемма|statement=
Если на вход в полуфильтр подать битоническую последовательность из нулей и единиц длиной <tex>n</tex>, то на выходе мы получим две битонические последовательности длиной <tex>\frac{n}{2}</tex> такие, что каждый элемент из верхней последовательности не превосходит любой элемент из нижней, и что одна из них будет <b>''однородной''</b> (clean) - состоящей либо из нулей, либо из единиц.<br>
+
Если на вход в полуфильтр подать битоническую последовательность из нулей и единиц длиной <tex>n</tex>, то на выходе мы получим две битонические последовательности длиной <tex>\frac{n}{2}</tex> такие, что каждый элемент из верхней последовательности не превосходит любой элемент из нижней, и что одна из них будет <b>''однородной''</b> (clean) {{---}} целиком состоящей либо из нулей, либо из единиц.<br>
 +
<!-- TODO: написать нормальное доказательство, а не копипасту из Кормена -->
 
|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 случая разобраны на рис. 2. Для каждого из ни лемма выполняется.
 
Для всех <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 случая разобраны на рис. 2. Для каждого из ни лемма выполняется.
 
}}
 
}}
||[[Файл:Half-Cleaner1.png‎|250px|right|thumb|Рис.1 Полуфильтр для 8 проводов]]
+
||[[Файл:Half-Cleaner-proof.png‎|200px|right|thumb|Рис.2 Все случаи попадания битонической последовательности на полуфильтр]]
 
|}
 
|}
 +
 
{|
 
{|
|
+
|  
====Битонический сотрировщик====
+
====Битонический сортировщик====
erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.erwtgretasdfg a sdfg sdhgj  adfh artfgh  DASGASJ DFA HTY ADFHWT YDASGS UJA ZHJRYTUH R DEUJETYH FYUJES SDFGHGS HERFGAHE FGHWRFG YTEUH SHEDT.\
+
Теперь мы используем полуфильтры для сортировки битонических последовательностей. Как только что было доказано, один полуфильтр разделяет битоническую последовательность на две равные части, одна из которых однородна, а другая сама по себе является битонической последовательностью, причем части расположены в правильном порядке. Тогда мы можем каждую часть снова отправить в полуфильтр вдвое меньшего размера, чем предыдущий. Затем, если нужно, четыре получившихся части снова отправить в полуфильтры и так далее, пока количество проводов в частях больше одного.
 
+
||[[Файл:Bitonic_sorter_8.png|305px|right|thumb|Рис.3 Битонический сортировщик на 8 входов с выделенными полуфильтрами.]]
//Четко
 
||[[Файл:Half-Cleaner-proof.png‎|450px|thumb|Рис.2 Все случаи попадания битонической последовательности на полуфильтр]]
 
 
|}
 
|}
  
 
==Источники==
 
==Источники==
*[http://en.wikipedia.org/wiki/Batcher_odd-even_mergesort| Batcher odd-even merge sort]
+
*[http://en.wikipedia.org/wiki/Batcher_odd-even_mergesort Wikipedia {{---}} Batcher odd-even mergesort]
*Т.Кормен "Алгоритмы построение и анализ"
+
*Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. — 2-е изд. — М.: Издательский дом «Вильямс», 2005. — С. 808—818.
 +
<!-- TODO: проверить 2007 издание Кормена и написать его -->

Версия 02:11, 5 июня 2012

Эта статья находится в разработке!

Определение

Сеть Бетчера (Batcher odd-even mergesort) — сортирующая сеть размером [math]O(n \log^2n)[/math] и глубиной [math]O(\log^2n)[/math], где [math]n[/math] — количество элементов для сортировки.

Конструирование сети

Для начала введем понятие битонической последовательности:

Определение:
Битонической последовательностью называется последовательность, которая сначала монотонно возрастает, а затем монотонно убывает, или последовательность, которая приводится к такому виду путем циклического сдвига.

Сейчас мы будем рассматривать только нуль-единичные битонические последовательности:

Определение:
Нуль-единичные битонические последовательности — последовательности вида [math]0^i1^j0^k[/math] или [math]1^i0^j1^k[/math] для целых [math]i,j,k\ge0[/math], где [math]1^i[/math] или [math]0^i[/math] обозначает [math]i[/math] идущих подряд единиц или нулей соответственно.

В качестве примеров нуль-единичной битонической последовательности можно привести последовательности [math]00111000[/math], [math]11000111[/math], [math]1110[/math], [math]1[/math], [math]000[/math].
С первого взгляда битонические последовательности могут показаться бесполезными в деле построения сортирующих сетей, но на самом деле они обладают одним полезным свойством: если соединить вместе две отсортированные последовательности, причем одна из них должна быть отсортировала по возрастанию, а другая по убыванию — то получится битоническая последовательность. Далее мы найдем этому свойству применение.

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

Сначала мы построим сеть, которая эффективно сортирует все битонические последовательности — т.н. битонический сортировщик.

Полуфильтр

Основной элемент битонического сортировщика называется полуфильтром (half-cleaner). Каждый полуфильтр — сравнивающая сеть единичной глубины, в которой [math]i[/math]-й входной провод сравнивается со входным проводом с номером [math]\frac{n}{2} + i[/math], где [math]i=1,2,...,\frac{n}{2}[/math] (предположим, что [math]n[/math] — чётное).

Рис.1 Полуфильтр для 8 проводов
Лемма:
Если на вход в полуфильтр подать битоническую последовательность из нулей и единиц длиной [math]n[/math], то на выходе мы получим две битонические последовательности длиной [math]\frac{n}{2}[/math] такие, что каждый элемент из верхней последовательности не превосходит любой элемент из нижней, и что одна из них будет однородной (clean) — целиком состоящей либо из нулей, либо из единиц.
Доказательство:
[math]\triangleright[/math]
Для всех [math]i=1,2,...,\frac{n}{2}[/math] полуфильтр сравнивает провода с номерами [math]i[/math] и [math]i+\frac{n}{2}[/math]. Без потери общности будем рассматривать входную последовательность вида [math]0...01...10...0[/math] (для последовательности вида [math]1...10...01...1[/math] рассуждения аналогичны). В зависимости от того в каком блоке из последовательно расположенных нулей и единиц находится средняя точка [math]\frac{n}{2}[/math] входной последовательности, можно выделить 3 случая, причем один из случаев (когда средняя точка попадает на блок из единиц) можно разбить еще на 2 случая. Все 4 случая разобраны на рис. 2. Для каждого из ни лемма выполняется.
[math]\triangleleft[/math]
Рис.2 Все случаи попадания битонической последовательности на полуфильтр

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

Теперь мы используем полуфильтры для сортировки битонических последовательностей. Как только что было доказано, один полуфильтр разделяет битоническую последовательность на две равные части, одна из которых однородна, а другая сама по себе является битонической последовательностью, причем части расположены в правильном порядке. Тогда мы можем каждую часть снова отправить в полуфильтр вдвое меньшего размера, чем предыдущий. Затем, если нужно, четыре получившихся части снова отправить в полуфильтры и так далее, пока количество проводов в частях больше одного.

Рис.3 Битонический сортировщик на 8 входов с выделенными полуфильтрами.

Источники

  • Wikipedia — Batcher odd-even mergesort
  • Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. — 2-е изд. — М.: Издательский дом «Вильямс», 2005. — С. 808—818.