0-1 принцип — различия между версиями
| Igorjan94 (обсуждение | вклад) м (→Доказательство 0-1 принципа) | м (rollbackEdits.php mass rollback) | ||
| (не показано 9 промежуточных версий 4 участников) | |||
| Строка 1: | Строка 1: | ||
| − | Есть два способа проверить сеть из n компараторов на то, что она сортирующая. | + | Есть два способа проверить сеть из <tex>n</tex> компараторов на то, что она сортирующая. | 
| __TOC__ | __TOC__ | ||
| == Первый способ == | == Первый способ == | ||
| − | Первый, наивный способ — перебрать все перестановки из <tex> n </tex> элементов, пропустить их через сеть и проверить их на то, что они отсортированы. Этот подход потребует <tex> O(n! \cdot Comp(n)) </tex> действий, где <tex> Comp(n) </tex> — количество компараторов в сети из <tex>n</tex> элементов.  | + | Первый, наивный способ — перебрать все перестановки из <tex> n </tex> элементов, пропустить их через сеть и проверить их на то, что они отсортированы. Этот подход потребует <tex> O(n! \cdot Comp(n)) </tex> действий, где <tex> Comp(n) </tex> — количество компараторов в сети из <tex>n</tex> элементов. Это количество можно оценить как <tex> n \log^2n </tex> ([[Сеть_Бетчера|Сеть Бетчера]]). Таким образом, получаем асимптотику <tex> O(n!n \log^2n) </tex>, и при <tex>n = 10</tex> проверить сеть очень проблематично. | 
| == Второй способ == | == Второй способ == | ||
| Строка 12: | Строка 12: | ||
| {{ Определение | {{ Определение | ||
| | definition = | | definition = | ||
| − | Функция <tex> f  | + | Функция <tex> f: A \rightarrow B </tex> называется '''монотонной''' (англ. ''monotonous''), если <tex> \forall a_1, a_2 \in A : a_1 \leqslant a_2 \Rightarrow f(a_1) \leqslant f(a_2) </tex> | 
| }} | }} | ||
| Строка 19: | Строка 19: | ||
| Пусть <tex> f: A \rightarrow B </tex> — монотонная. Тогда <tex> \forall a_1, a_2 \in A: f(\min(a_1, a_2)) = \min(f(a_1), f(a_2)) </tex>. | Пусть <tex> f: A \rightarrow B </tex> — монотонная. Тогда <tex> \forall a_1, a_2 \in A: f(\min(a_1, a_2)) = \min(f(a_1), f(a_2)) </tex>. | ||
| | proof = | | proof = | ||
| − | Не теряя общности, предположим что <tex> a_1 \ | + | Не теряя общности, предположим что <tex> a_1 \leqslant a_2 </tex>. Тогда <tex> f(\min(a_1, a_2)) = f(a_1) </tex>. Также, по монотонности, <tex> f(a_1) \leqslant f(a_2) </tex>. Тогда <tex> \min(f(a_1), f(a_2)) = f(a_1) </tex>. То есть,   | 
| <tex> f(\min(a_1, a_2)) = \min(f(a_1), f(a_2)) = f(a_1) </tex>. Такие же рассуждения можно провести для случая <tex> a_2 < a_1 </tex>. | <tex> f(\min(a_1, a_2)) = \min(f(a_1), f(a_2)) = f(a_1) </tex>. Такие же рассуждения можно провести для случая <tex> a_2 < a_1 </tex>. | ||
| Строка 48: | Строка 48: | ||
| | statement = Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая | | statement = Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая | ||
| | proof = | | proof = | ||
| − | Рассмотрим сеть <tex> N </tex>, сортирующую в возрастающем порядке: <tex> a_0 \ | + | Рассмотрим сеть <tex> N </tex>, сортирующую в возрастающем порядке: <tex> a_0 \leqslant a_1 \leqslant \dots \leqslant a_{n-1} </tex>. | 
| Предположим, что есть последовательность <tex> a </tex>, которую сеть <tex> N </tex> не сортирует. Тогда после пропуска <tex> a </tex> через сеть <tex> N </tex>, получим последовательность <tex> b </tex>, в которой найдется индекс <tex> i </tex> такой, что <tex> b_i > b_{i + 1} </tex>. | Предположим, что есть последовательность <tex> a </tex>, которую сеть <tex> N </tex> не сортирует. Тогда после пропуска <tex> a </tex> через сеть <tex> N </tex>, получим последовательность <tex> b </tex>, в которой найдется индекс <tex> i </tex> такой, что <tex> b_i > b_{i + 1} </tex>. | ||
| Строка 60: | Строка 60: | ||
| }} | }} | ||
| − | == Источники == | + | == См. также == | 
| − | *[http://www.inf.fh-flensburg.de/lang/algorithmen/sortieren/networks/indexen.htm Sorting networks] | + | *[[Сеть_Бетчера|Сеть Бетчера]] | 
| − | *[http://en.wikipedia.org/wiki/Sorting_network Wikipedia  | + | *[[Сортирующие_сети|Сортирующие сети]] | 
| − | *Дональд Кнут  | + | |
| + | == Источники информации == | ||
| + | *[http://www.inf.fh-flensburg.de/lang/algorithmen/sortieren/networks/indexen.htm Bachelor-Studiengang Angewandte Informatik {{---}} Sorting networks] | ||
| + | *[http://en.wikipedia.org/wiki/Sorting_network Wikipedia {{---}} Sorting networks] | ||
| + | *Дональд Кнут {{---}} Искусство программирования {{---}} Том 3 {{---}} Глава 5.3.4 {{---}} стр. 249 | ||
| [[Категория:Дискретная математика и алгоритмы]] | [[Категория:Дискретная математика и алгоритмы]] | ||
| [[Категория:Сортирующие сети]] | [[Категория:Сортирующие сети]] | ||
Текущая версия на 19:35, 4 сентября 2022
Есть два способа проверить сеть из компараторов на то, что она сортирующая.
Первый способ
Первый, наивный способ — перебрать все перестановки из элементов, пропустить их через сеть и проверить их на то, что они отсортированы. Этот подход потребует действий, где — количество компараторов в сети из элементов. Это количество можно оценить как (Сеть Бетчера). Таким образом, получаем асимптотику , и при проверить сеть очень проблематично.
Второй способ
Второй способ основывается на предположении, что если сеть сортирует все последовательности из нулей и единиц, то сеть является сортирующей. Если мы докажем это, то сможем проверять сеть за , что намного быстрее.
Доказательство 0-1 принципа
| Определение: | 
| Функция называется монотонной (англ. monotonous), если | 
| Лемма: | 
| Пусть  — монотонная. Тогда . | 
| Доказательство: | 
| Не теряя общности, предположим что . Тогда . Также, по монотонности, . Тогда . То есть,. Такие же рассуждения можно провести для случая . | 
| Определение: | 
| Рассмотрим отображение и последовательность . Определим как последовательность , то есть | 
| Лемма: | 
| Пусть  — монотонная, а  — сеть компараторов.
Тогда  и  коммутируют, то есть . Другими словами, неважно, применить сначала  к  и пропустить через сеть , или пропустить через сеть  последовательность , а потом применить монотонную функцию . | 
| Доказательство: | 
| Рассмотрим произвольный компаратор , сортирующий элементы и . Применим его к последовательности и рассмотрим элемент с индексом . Тогда 
 | 
| Теорема (0-1 принцип): | 
| Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая | 
| Доказательство: | 
| Рассмотрим сеть , сортирующую в возрастающем порядке: . Предположим, что есть последовательность , которую сеть не сортирует. Тогда после пропуска через сеть , получим последовательность , в которой найдется индекс такой, что .Рассмотрим функцию . Очевидно, она монотонная. Заметим, что , а , то есть , или — не отсортирована. Так как и коммутируют, — также не отсортирована. Но по предположению теоремы, все последовательности из нулей и единиц сеть сортировать умеет, то есть такой последовательности не найдется, то есть сеть компараторов является сортирующей. | 
См. также
Источники информации
- Bachelor-Studiengang Angewandte Informatik — Sorting networks
- Wikipedia — Sorting networks
- Дональд Кнут — Искусство программирования — Том 3 — Глава 5.3.4 — стр. 249
