Сортирующие сети для квадратичных сортировок — различия между версиями
Timur (обсуждение | вклад) |
Timur (обсуждение | вклад) |
||
Строка 12: | Строка 12: | ||
== Сортирующие сети с параллельной сортировкой == | == Сортирующие сети с параллельной сортировкой == | ||
− | На один слой | + | На один слой устанавливается несколько компараторов. |
=== Сортировка пузырьком и вставками === | === Сортировка пузырьком и вставками === | ||
− | Заметим, если сжать последовательные сортирующие сети пузырьком и вставками, то результат будет одним и тем же. | + | Заметим, если сжать последовательные сортирующие сети пузырьком и вставками, то результат будет одним и тем же. Это видно из симметрии расположения компараторов на картинках выше. |
− | |||
{{ | {{ | ||
− | + | Утверждение | |
|statement= | |statement= | ||
− | В результирующей сети будет <tex>(2n - 3)</tex> слоев, где <tex>n</tex> | + | В результирующей сети будет <tex>(2n - 3)</tex> слоев, где <tex>n</tex> — количество входов. |
|proof= | |proof= | ||
Докажем данное утверждение по принципу математической индукции. | Докажем данное утверждение по принципу математической индукции. | ||
Строка 33: | Строка 32: | ||
Пусть <tex> S(n) = 2n - 3 </tex> — количество слоев в сети сортировки. | Пусть <tex> S(n) = 2n - 3 </tex> — количество слоев в сети сортировки. | ||
− | При переходе от сортирующей сети с <tex>n</tex> входами к сети с <tex>n + 1</tex> входами, добавляем <tex> n </tex> дополнительных компараторов. В полученной "треугольной" сети можно заметить, что <tex>n - 1</tex> компаратор входят в уже существующие слои, но тогда один компаратор из предыдущей сортирующий сети и один из добавленных не вносят вклад в количество слоев. Тогда | + | При переходе от сортирующей сети с <tex>n</tex> входами к сети с <tex>n + 1</tex> входами, добавляем <tex> n </tex> дополнительных компараторов(<tex>[1:2]\dots[n - 1:n]</tex> или <tex>[n - 1:n]\dots[1:2]</tex>, т.к. возможны две стратегии добавления). В полученной "треугольной" сети можно заметить, что <tex>n - 1</tex> компаратор входят в уже существующие слои, но тогда один компаратор из предыдущей сортирующий сети и один из добавленных не вносят вклад в количество слоев. Тогда видно, что количество слоев увеличилось на <tex> 2 = S(n + 1) - S(n) </tex>, т.е. наш переход выполняется и наша формула верна. Что и требовалось доказать. |
− | |||
}} | }} | ||
Строка 43: | Строка 41: | ||
=== Сортировка выбором === | === Сортировка выбором === | ||
− | Будем | + | Сеть для сортировки выбором выглядит иначе. Будем компаратор "вкладывать" в компаратор, для получения слоев. |
{{ | {{ | ||
Теорема | Теорема | ||
Строка 59: | Строка 57: | ||
'''Шаг индукции''': | '''Шаг индукции''': | ||
− | Пусть <tex> S(n) </tex> | + | Пусть <tex> S(n) </tex> — количество слоев в сети сортировки с <tex> n </tex> входами. |
− | При переходе от сортирующей сети с <tex>n</tex> входами к сети с <tex>n + 1</tex> входами, добавляем <tex> n </tex> компаратор<tex>\left( [0:1] \dots [0:n]\right) </tex>. Заметим, что в <tex> n - 2 </tex> добавленных компараторов можно вложить <tex> n - 2 </tex> компараторов из предыдущей сети, так, что условие слоя не нарушатся. Тогда останется два компаратора: <tex>[0:1], [0:2] </tex> в которые ничего нельзя вложить, чтобы не нарушить условие вложения. Тогда количество слоев изменяется на <tex> 2 </tex>. Однако, начиная с <tex> n = 4 </tex> можно перенести свободные компараторы и слить их в один слой, но при этом сеть перестает быть сортирующей (при <tex> n = 4 </tex> ошибка будет возникать на векторе <tex> 0100 </tex>). | + | При переходе от сортирующей сети с <tex>n</tex> входами к сети с <tex>n + 1</tex> входами, добавляем <tex> n </tex> компаратор<tex>\left( [0:1] \dots [0:n]\right) </tex>. Заметим, что в <tex> n - 2 </tex> добавленных компараторов можно вложить <tex> n - 2 </tex> компараторов из предыдущей сети, так, что условие слоя не нарушатся. Тогда останется два компаратора: <tex>[0:1], [0:2] </tex> в которые ничего нельзя вложить, чтобы не нарушить условие вложения. Тогда количество слоев изменяется на <tex> 2 = S(n + 1) - S(n)</tex>. Однако, начиная с <tex> n = 4 </tex> можно перенести свободные компараторы и слить их в один слой, но при этом сеть перестает быть сортирующей (при <tex> n = 4 </tex> ошибка будет возникать на векторе <tex> 0100 </tex>). Тогда наш переход выполняется и наша формула верна. Что и требовалось доказать. |
− | |||
}} | }} | ||
[[Файл:Choosesortparralel.png]] | [[Файл:Choosesortparralel.png]] | ||
+ | [[Файл:MyRis.jpg]] | ||
==См.также== | ==См.также== | ||
* [[Сортировочные сети с особыми свойствами]] | * [[Сортировочные сети с особыми свойствами]] | ||
Строка 73: | Строка 71: | ||
*Дональд Э. Кнут. Искусство программирования. Том 3. Сортировка и Поиск. стр. 238— ISBN 0-201-89685-0 | *Дональд Э. Кнут. Искусство программирования. Том 3. Сортировка и Поиск. стр. 238— ISBN 0-201-89685-0 | ||
*Кормен, Томас Х.,Рональд Л., Штайн, Клифорд. Глава 27. Сортирующие сети // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-e издание. — М.: «Вильямс», 2005. — С. 799 - 822. — ISBN 5-8459-0857-4. | *Кормен, Томас Х.,Рональд Л., Штайн, Клифорд. Глава 27. Сортирующие сети // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-e издание. — М.: «Вильямс», 2005. — С. 799 - 822. — ISBN 5-8459-0857-4. | ||
− | *[https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D1%8C_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8 Википедия | + | *[https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D1%8C_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8 Википедия — Сети сортировки] |
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Сортирующие сети]] | [[Категория: Сортирующие сети]] |
Версия 22:56, 23 мая 2015
Рассмотрим модели сортирующих сетей для квадратичных сортировок.
Содержание
Сортирующие сети с последовательной сортировкой
На один слой будем устанавливать только один компаратор. Все последующие сети получаются простым моделированием соответствующих сортировок.
Сортировка пузырьком | Сортировка вставками | Сортировка выбором |
Сортирующие сети с параллельной сортировкой
На один слой устанавливается несколько компараторов.
Сортировка пузырьком и вставками
Заметим, если сжать последовательные сортирующие сети пузырьком и вставками, то результат будет одним и тем же. Это видно из симметрии расположения компараторов на картинках выше.
Утверждение: |
В результирующей сети будет слоев, где — количество входов. |
Докажем данное утверждение по принципу математической индукции. База индукции: При . В сети всего два входа, на которых располагается один компаратор, тем самым наше предположение выполняется.Шаг индукции: Пусть При переходе от сортирующей сети с — количество слоев в сети сортировки. входами к сети с входами, добавляем дополнительных компараторов( или , т.к. возможны две стратегии добавления). В полученной "треугольной" сети можно заметить, что компаратор входят в уже существующие слои, но тогда один компаратор из предыдущей сортирующий сети и один из добавленных не вносят вклад в количество слоев. Тогда видно, что количество слоев увеличилось на , т.е. наш переход выполняется и наша формула верна. Что и требовалось доказать. |
Сортирующая сеть для
:Сортировка выбором
Сеть для сортировки выбором выглядит иначе. Будем компаратор "вкладывать" в компаратор, для получения слоев.
Теорема: |
В результирующей сети будет слой, где — количество входов. |
Доказательство: |
Определим операцию вложения компаратора в компаратор . Для этого разместим компаратор и на одном слое, так, что .Теперь воспользуемся принципом математической индукции. База индукции: . В сети всего два входа, на которых располагается один компаратор, тем самым наше предположение выполняется. Шаг индукции: Пусть При переходе от сортирующей сети с — количество слоев в сети сортировки с входами. входами к сети с входами, добавляем компаратор . Заметим, что в добавленных компараторов можно вложить компараторов из предыдущей сети, так, что условие слоя не нарушатся. Тогда останется два компаратора: в которые ничего нельзя вложить, чтобы не нарушить условие вложения. Тогда количество слоев изменяется на . Однако, начиная с можно перенести свободные компараторы и слить их в один слой, но при этом сеть перестает быть сортирующей (при ошибка будет возникать на векторе ). Тогда наш переход выполняется и наша формула верна. Что и требовалось доказать. |
См.также
Источники информации
- Дональд Э. Кнут. Искусство программирования. Том 3. Сортировка и Поиск. стр. 238— ISBN 0-201-89685-0
- Кормен, Томас Х.,Рональд Л., Штайн, Клифорд. Глава 27. Сортирующие сети // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-e издание. — М.: «Вильямс», 2005. — С. 799 - 822. — ISBN 5-8459-0857-4.
- Википедия — Сети сортировки