TwiddleLab / Код / Алгоритмы в движении
Сортирующие сети
Что ты узнаешь
- Компаратор берёт два числа и отправляет меньшее вверх, а большее вниз.
- Сортирующая сеть это неизменная схема компараторов, которая сортирует любой вход.
- Компараторы на разных проводах могут работать одновременно: это параллелизм. 12 сравнений всего за 5 раундов.
Как идёт урок
Рисунок мелом и одно правило на каждом пересечении: меньшее идёт вверх. Может ли рисунок сортировать?
Поставь четыре числа на входы в любом порядке, потом «Запуск».
Шесть проводов. Смотри раунд за раундом.
«Шаг» запускает один раунд. Считай сравнения и раунды.
Попробуй её сломать.
Перемешай входы кнопками обмена, потом «Запуск». Шесть попыток получить выход не по порядку.
Сортирующие сети.
Компаратор берёт два числа и отправляет меньшее вверх, а большее вниз.
Сортирующая сеть это неизменная схема компараторов, которая сортирует любой возможный вход. Она никогда не смотрит на данные, чтобы решить, что делать дальше.
Компараторы на разных проводах могут работать одновременно: параллелизм. Шесть чисел требуют 12 сравнений, но всего 5 раундов.
Эти компараторы нарисованы один за другим. Какие могут сработать вместе первыми?
Нажми на них, потом «Проверить».
Два компаратора могут работать одновременно, только если у них нет общего провода и ни одному не нужен результат, который другой ещё вычисляет.
Эта сеть потеряла компаратор.
Запусти, посмотри, что выходит, потом добавь недостающий.
Построй свою сеть для 3 чисел.
Три компаратора. Проверь все 6 порядков, потом «Проверить».
После первых двух компараторов самое большое число столкнуто на провод 3. Последний компаратор сортирует верхние два.
Миллион сравнений. Сколько работников нужно, чтобы уложиться в 1000 тактов?
Каждый работник делает одно сравнение за такт, все одновременно.
Твоя сеть на каждом входе.
Пропусти все шесть порядков через построенную сеть.
Предыдущий урок: Быстрая сортировка: выбери опорный · Следующий урок: Жадный выбор · Часть курса: Алгоритмы в движении
Уроки интерактивные и работают на JavaScript. Включи его, чтобы играть.