0-1 принцип — различия между версиями
м (→Источники) |
Rybak (обсуждение | вклад) м (→Доказательство 0-1 принципа) |
||
Строка 31: | Строка 31: | ||
{{Лемма | {{Лемма | ||
| statement = | | statement = | ||
− | Пусть <tex> f: A \rightarrow B </tex> - монотонная, а <tex> N </tex> - | + | Пусть <tex> f: A \rightarrow B </tex> - монотонная, а <tex> N </tex> - сеть компараторов. |
+ | Тогда <tex> N </tex> и <tex> f </tex> коммутируют, то есть <tex> N(f(a)) = f(N(a)) </tex> - другими словами, неважно, применить сначала <tex> f </tex> к <tex> a </tex> и пропустить через сеть <tex> N </tex>, или пропустить через сеть <tex> N </tex> последовательность <tex> a </tex>, а потом применить монотонную функцию <tex> f </tex>. | ||
| proof = | | proof = | ||
Рассмотрим произвольный компаратор <tex> [i: j] </tex>, сортирующий элементы <tex> a_i </tex> и <tex> a_j </tex>. Применим его к последовательности <tex> f(a) </tex> и рассмотрим элемент с индексом <tex> i </tex>. | Рассмотрим произвольный компаратор <tex> [i: j] </tex>, сортирующий элементы <tex> a_i </tex> и <tex> a_j </tex>. Применим его к последовательности <tex> f(a) </tex> и рассмотрим элемент с индексом <tex> i </tex>. |
Версия 23:39, 25 февраля 2012
Есть два способа проверить сеть из n компараторов на то, что она сортирующая.
Первый способ
Первый, наивный способ - перебрать все перестановки из n элементов, пропустить их через сеть и проверить их на то, что они отсортированы. Этот подход потребует
действий, где - количество компараторов в сети из n элементов. Обычно это количество можно оценить как (сеть Бэтчера), то есть получаем асимптотику , то есть при n, равном уже 10, проверить сеть очень проблематично.Второй способ
Второй способ основывается на предположении что если сеть сортирует все последовательности из нулей и единиц, то сеть является сортирующей. Если мы докажем это, то сможем проверять сеть за
, что намного быстрее.Доказательство 0-1 принципа
Определение: |
Функция | из A в B называется монотонной, если
Лемма: |
Пусть - монотонная. Тогда . |
Доказательство: |
Не теряя общности, предположим что . Тогда, . Также, по монотонности, . Тогда . То есть, . Такие же рассуждения можно провести для случая . |
Определение: |
Рассмотрим отображение | и последовательность . Определим как последовательность , то есть
Лемма: |
Пусть - монотонная, а - сеть компараторов.
Тогда и коммутируют, то есть - другими словами, неважно, применить сначала к и пропустить через сеть , или пропустить через сеть последовательность , а потом применить монотонную функцию . |
Доказательство: |
Рассмотрим произвольный компаратор , сортирующий элементы и . Применим его к последовательности и рассмотрим элемент с индексом .
|
Теорема (0-1 принцип): |
Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая |
Доказательство: |
Рассмотрим сеть , сортирующую в возрастающем порядке: .Предположим, что есть последовательность Рассмотрим функцию , которую сеть не сортирует. Тогда после пропуска через сеть , получим последовательность b, в которой найдется индекс такой, что . . Очевидно, она монотонная. Заметим, что , а , то есть , или - не отсортирована. Так как и коммутируют, - также не отсортирована. Но по предположению теоремы, все последовательности из нулей и единиц сеть сортировать умеет, то есть такой последовательности не найдется, то есть сеть компараторов является сортирующей. |
Источники
- Sorting networks
- Wikipedia - Sorting networks
- Дональд Кнут - Искусство программирования. Том 3. Глава 5.3.4, стр. 249