После сборки разработочной программы Minsort3 будет иметь 6 операторов WRITE, как и IFSort3. На что же будет похода процедура MinSort4? Нам нужно только поменять раздел проекта 3, для того чтобы включить в него дополнительную переменную Ch3. Новый раздел проекта потребуется для нахождения минимального значения из Ch1, Ch2, Ch3, Ch4. Затем разделы проекта 3.1 и 3.1.1 могут быть повторно использованы для того, чтобы оставить оставшиеся символы в Ch1, Ch2 и Ch3. Т.е. Minsort4 просто записывает минимум и уменьшает сложности до уровня MinSort3.
Для того, чтобы найти минимум из 4-х переменных, потребуется оператор IF вложенностью как минимум 3 уровня в глубину, потому что минимальное значение должно предшествовать или быть равно трем другим переменным. Фактичести, 3 уровня вложенности достаточны, поскольку условия операторов IF могут быть организованы в таблице:
Сравнения для поиска минимума из четырех переменных
Условие
Минимум
Ch1 < Ch2
Ch1 < Ch3
Ch1 < Ch4
Ch1
Ch4 <= Ch1
Ch4
Ch3 <= Ch1
Ch3 < Ch4
Ch3
Ch4 <= Ch3
Ch4
Ch2 <= Ch1
Ch2 < Ch3
Ch2 < Ch4
Ch2
Ch4 <= Ch2
Ch4
Ch3 <= Ch2
Ch3 < Ch4
Ch4
Ch4 <= Ch3
Ch4
Трехуровневой оператор IF потребует 8 операторов Write, поэтому количество операторов Write в программе MinSort4 будет 8 + 4 + 2 = 14, по сравнению с 4 * 3 * 2 * 1 = 24 для программы IFSort4.
Таблица ниже показывает количество операторов Write в двух семействах программ:
2 + 4 + 8 + 16 + … + 2^N-1 (MinSortN)
2 * 3 * 4 * 5 * … * N (IFSortN)
Количество операторов Write
N
IFSortN
MinSortN
5 040
40 320
362 880
3 628 800
1 022
Как видите, изменения проекта может привести к уменьшению размера программ. Однако даже программы MinSort растут довольно быстро.
Программы семейства MinSort были открыты с использованием другой стратегии проектирования:
Для решения одной задачи семейства, подумайте о способе решения меньших задач.
Подход IFSort трансформирует решения для меньших задач семейства в решения для более сложных задач, а программа MinSort – напротив, идет в противоположном направлении.
Анализируя эти простые стратегии сортировки, мы приходим к двум принципам проектирования программ:
Тщательно поразмышляйте о проекте, который может привести к программе меньшего размера.
Хорошая стратегия проектирования – это решение задачи путем уменьшения ее до более простого случая.