Изменения

Перейти к: навигация, поиск

Сеть Бетчера

6 байт убрано, 19:53, 12 июня 2012
м
Иллюстрации
Битонический сортировщик представляет собой каскад так называемых <b>полуфильтров <i>(half-cleaner)</i></b>.
Каждый полуфильтр {{---}} сеть компараторов единичной глубины, в которой <tex>i</tex>-й входной провод сравнивается со входным проводом с номером <tex>\frac{n}{2} + i</tex>, где <tex>i=1,2,...,\frac{n}{2}</tex> (количество входов <tex>n</tex> {{---}} чётное).<br>
||[[Файл:Half-Cleaner1.png‎|262px|right|thumb|Полуфильтр для 8 проводов.]]
|}
{|
|
{{Лемма|statement=
Если на вход в полуфильтр подать битоническую последовательность из нулей и единиц длиной <tex>n</tex>, то на выходе мы получим две битонические последовательности длиной <tex>\frac{n}{2}</tex> такие, что каждый элемент из верхней последовательности не превосходит любой элемент из нижней, и что одна из них будет <b>однородной ''(clean)''</b> {{---}} целиком состоящей либо из нулей, либо из единиц.<br>
Для всех <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 случая разобраны на рисунке справа. Для каждого из них лемма выполняется.
}}
||[[Файл:Half-Cleaner-proofCleaner1.png‎|350px262px|right|thumb|Все случаи попадания битонической последовательности на полуфильтрПолуфильтр для 8 проводов.]]
|}
 
[[Файл:Half-Cleaner-proof.png‎|350px|center|thumb|Все случаи попадания битонической последовательности на полуфильтр.]]
 
=== Построение битонического сортировщика ===
=== Точные формулы размера и глубины сети ===
Оценим глубину этой сортирующей сети. Она состоит из <tex>\log_2{n}</tex> слоёв объединяющих сетей и каждый слой имеет глубину, зависящую от его номера. В слое с номером <tex>i</tex> (<tex>1 \le i \le \log_2{n}</tex>) объединяющая сеть имеет глубину <tex>\log_2{2^i}</tex>, потому как объединяет <tex>2^i</tex> проводов. Таким образом глубина всей сортирующей сети в точности равна <tex dpi = "150">\sum\limits^{\log_2{n}}_{i = 1}{\log_2{2^i}} = \sum\limits^{\log_2{n}}_{i = 1}{i} = \frac{(1+\log_2{n}}{2} )\log_2{n}}{2}</tex>.
Оценим размер сети. В объединяющей сети на <tex>n</tex> входов содержится <tex dpi="150">\frac{n \log_2{n}}{2}</tex> компараторов. Снова просуммируем формулу по числу объединяющих сетей и получим точную оценку <tex dpi = "150">\sum\limits^{\log_2{n}}_{i = 1}{ \frac{2^i \log_2{2^i}}{2} } = \sum\limits^{\log_2{n}}_{i = 1}{ 2^{i-1} i} = \frac{n \log_{2}^{2}{n} + 2 \log_2{n}}{4}</tex>.
101
правка

Навигация