0-1 принцип — различия между версиями
м |
м |
||
Строка 7: | Строка 7: | ||
{{ Определение | {{ Определение | ||
| definition = | | definition = | ||
− | Функция <tex> f </tex> из A в B называется монотонной, если <tex> \forall a_1, a_2 \in A : a_1 \le a_2 \Rightarrow f(a_1) \le f(a_2) </tex> | + | Функция <tex> f </tex> из A в B называется '''монотонной''', если <tex> \forall a_1, a_2 \in A : a_1 \le a_2 \Rightarrow f(a_1) \le f(a_2) </tex> |
}} | }} | ||
Строка 14: | Строка 14: | ||
Пусть <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 \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> f(\min(a_1, a_2)) = \min(f(a_1), f(a_2)) = f(a_1) </tex>. Такие же рассуждения можно провести для случая <tex> a_2 < 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>. То есть, |
+ | |||
+ | <tex> f(\min(a_1, a_2)) = \min(f(a_1), f(a_2)) = f(a_1) </tex>. Такие же рассуждения можно провести для случая <tex> a_2 < a_1 </tex>. | ||
}} | }} | ||
Строка 32: | Строка 34: | ||
То есть, в результате <tex> i </tex>-й элемент не зависит от порядка применения компаратора <tex> [i: j] </tex> и функции <tex> f </tex>. Те же рассуждения можно провести для всех других индексов, то есть <tex> [i: j]f(a) = f([i: j](a)) </tex>, и также для всех компараторов в сети, то есть лемма доказана. | То есть, в результате <tex> i </tex>-й элемент не зависит от порядка применения компаратора <tex> [i: j] </tex> и функции <tex> f </tex>. Те же рассуждения можно провести для всех других индексов, то есть <tex> [i: j]f(a) = f([i: j](a)) </tex>, и также для всех компараторов в сети, то есть лемма доказана. | ||
}} | }} | ||
+ | |||
{{ Теорема | {{ Теорема | ||
Строка 37: | Строка 40: | ||
| statement = Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая | | statement = Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая | ||
| proof = | | proof = | ||
+ | Рассмотрим сеть <tex> N </tex> , сортирующую в возрастающем порядке: <tex> a_0 \le a_1 \le \dots \le a_{n-1} </tex>. | ||
+ | |||
+ | Предположим, что есть последовательность <tex> a </tex>, которую сеть <tex> N </tex> не сортирует. Тогда после пропуска <tex> a </tex> через сеть <tex> N </tex>, получим последовательность b, в которой найдется индекс <tex> i </tex> такой, что <tex> b_i > b_{i + 1} </tex>. | ||
+ | Рассмотрим функцию <tex> f(x) = | ||
+ | \begin{cases} | ||
+ | 0, x < b_i \\ | ||
+ | 1, x \ge b_i | ||
+ | \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> f </tex> и <tex> N </tex> коммутируют, <tex> N(f(a)) </tex> - также не отсортирована. Но по предположению теоремы, все последовательности из нулей и единиц сеть сортировать умеет, то есть такой последовательности <tex> a </tex> не найдется, то есть сеть компараторов является сортирующей. | ||
}} | }} |
Версия 00:05, 25 мая 2011
Есть два способа проверить сеть из n компараторов на то, что она сортирующая.
Первый, наивный способ - перебрать все перестановки из n элементов, пропустить их через сеть и проверить их на то, что они отсортированы. Этот подход потребует
действий, где - количество компараторов в сети из n элементов. Обычно это количество можно оценить как (сеть Бэтчера), то есть получаем асимптотику , то есть при n, равном уже 10, проверить сеть очень проблематично.Второй способ основывается на предположении что если сеть сортирует все последовательности из нулей и единиц, то сеть является сортирующей. Докажем это.
Определение: |
Функция | из A в B называется монотонной, если
Лемма: |
Пусть - монотонная. Тогда . |
Доказательство: |
Не теряя общности, предположим что . Тогда, . Также, по монотонности, . Тогда . То есть, . Такие же рассуждения можно провести для случая . |
Определение: |
Рассмотрим отображение | и последовательность . Определим как последовательность , то есть
Лемма: |
Пусть - монотонная, а - какая-то сеть компараторов. Тогда и коммутируют: - другими словами, неважно, применить сначала к и пропустить через сеть , или пропустить через сеть последовательность , а потом применить монотонную функцию . |
Доказательство: |
Рассмотрим произвольный компаратор , сортирующий элементы и . Применим его к последовательности и рассмотрим элемент с индексом .
|
Теорема (0-1 принцип): |
Если сеть компараторов сортирует все последовательности из нулей и единиц, то она сортирующая |
Доказательство: |
Рассмотрим сеть , сортирующую в возрастающем порядке: .Предположим, что есть последовательность Рассмотрим функцию , которую сеть не сортирует. Тогда после пропуска через сеть , получим последовательность b, в которой найдется индекс такой, что . . Очевидно, она монотонная. Заметим, что , а , то есть , или - не отсортирована. Так как и коммутируют, - также не отсортирована. Но по предположению теоремы, все последовательности из нулей и единиц сеть сортировать умеет, то есть такой последовательности не найдется, то есть сеть компараторов является сортирующей. |