0-1 принцип — различия между версиями
Igorjan94 (обсуждение | вклад) м (→Первый способ) |
Igorjan94 (обсуждение | вклад) м (→Доказательство 0-1 принципа) |
||
| Строка 17: | Строка 17: | ||
{{Лемма | {{Лемма | ||
| statement = | | statement = | ||
| − | Пусть <tex> f: A \rightarrow B </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 \le a_2 </tex>. Тогда <tex> f(\min(a_1, a_2)) = f(a_1) </tex>. Также, по монотонности, <tex> f(a_1) \le f(a_2) </tex>. Тогда <tex> \min(f(a_1), f(a_2)) = f(a_1) </tex>. То есть, | Не теряя общности, предположим что <tex> a_1 \le a_2 </tex>. Тогда <tex> f(\min(a_1, a_2)) = f(a_1) </tex>. Также, по монотонности, <tex> f(a_1) \le f(a_2) </tex>. Тогда <tex> \min(f(a_1), f(a_2)) = f(a_1) </tex>. То есть, | ||
| Строка 55: | Строка 55: | ||
1, x \ge b_i | 1, x \ge b_i | ||
\end{cases} | \end{cases} | ||
| − | </tex> . Очевидно, она монотонная. Заметим, что <tex> f(b_i) = 1 </tex>, а <tex> f(b_{i + 1}) = 0 </tex>, то есть <tex> f(b) </tex>, или <tex> f(N(a)) </tex> | + | </tex> . Очевидно, она монотонная. Заметим, что <tex> f(b_i) = 1 </tex>, а <tex> f(b_{i + 1}) = 0 </tex>, то есть <tex> f(b) </tex>, или <tex> f(N(a)) </tex> — не отсортирована. Так как <tex> f </tex> и <tex> N </tex> коммутируют, <tex> N(f(a)) </tex> — также не отсортирована. Но по предположению теоремы, все последовательности из нулей и единиц сеть сортировать умеет, то есть такой последовательности <tex> a </tex> не найдется, то есть сеть компараторов является сортирующей. |
}} | }} | ||
Версия 18:26, 31 мая 2012
Есть два способа проверить сеть из n компараторов на то, что она сортирующая.
Первый способ
Первый, наивный способ — перебрать все перестановки из элементов, пропустить их через сеть и проверить их на то, что они отсортированы. Этот подход потребует действий, где — количество компараторов в сети из элементов. Обычно это количество можно оценить как (Сеть Бетчера). Таким образом, получаем асимптотику , и при проверить сеть очень проблематично.
Второй способ
Второй способ основывается на предположении, что если сеть сортирует все последовательности из нулей и единиц, то сеть является сортирующей. Если мы докажем это, то сможем проверять сеть за , что намного быстрее.
Доказательство 0-1 принципа
| Определение: |
| Функция из в называется монотонной, если |
| Лемма: |
Пусть — монотонная. Тогда . |
| Доказательство: |
|
Не теряя общности, предположим что . Тогда . Также, по монотонности, . Тогда . То есть, . Такие же рассуждения можно провести для случая . |
| Определение: |
| Рассмотрим отображение и последовательность . Определим как последовательность , то есть |
| Лемма: |
Пусть — монотонная, а — сеть компараторов.
Тогда и коммутируют, то есть . Другими словами, неважно, применить сначала к и пропустить через сеть , или пропустить через сеть последовательность , а потом применить монотонную функцию . |
| Доказательство: |
|
Рассмотрим произвольный компаратор , сортирующий элементы и . Применим его к последовательности и рассмотрим элемент с индексом . |
| Теорема (0-1 принцип): |
Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая |
| Доказательство: |
|
Рассмотрим сеть , сортирующую в возрастающем порядке: . Предположим, что есть последовательность , которую сеть не сортирует. Тогда после пропуска через сеть , получим последовательность , в которой найдется индекс такой, что . Рассмотрим функцию . Очевидно, она монотонная. Заметим, что , а , то есть , или — не отсортирована. Так как и коммутируют, — также не отсортирована. Но по предположению теоремы, все последовательности из нулей и единиц сеть сортировать умеет, то есть такой последовательности не найдется, то есть сеть компараторов является сортирующей. |
Источники
- Sorting networks
- Wikipedia - Sorting networks
- Дональд Кнут - Искусство программирования. Том 3. Глава 5.3.4, стр. 249