Глава 1. Введение в разработку алгоритмов
39
этими задачами, т. к. они они изложены на языке, типичном для моделирования при-
ложений. Чтобы научиться свободно владеть этим языком, просмотрите задачи в ката-
логе и изучите рисунки входа и выхода для каждой из них. Разобравшись в этих зада-
чах, хотя бы на уровне рисунков и формулировок, вы будете знать, где искать возмож-
ный ответ в случае возникновения проблем в разработке вашего приложения.
В книге также представлены примеры успешного применения моделирования прило-
жений в виде описаний решений реальных задач. Однако здесь необходимо высказать
одно предостережение. Моделирование сводит разрабатываемое приложение к одной
из многих существующих задач и структур. Такой процесс по своей природе является
ограничивающим, и некоторые нюансы модели могут не соответствовать вашей кон-
кретной задаче. Кроме того, встречаются задачи, которые можно моделировать не-
сколькими разными способами.
Моделирование является всего лишь первым шагом в разработке алгоритма решения
задачи. Внимательно отнеситесь к отличиям вашего приложения от потенциальной
модели, но не спешите с заявлением, что ваша задача является уникальной и особен-
ной. Временно игнорируя детали, которые не вписываются в модель, вы сможете найти
ответ на вопрос, действительно ли они являются принципиально важными.
П
ОДВЕДЕНИЕ ИТОГОВ
Моделирование разрабатываемого приложения в терминах стандартных структур и алго-
ритмов является важнейшим шагом в поиске решения.
1.4.2. Рекурсивные объекты
Научившись мыслить рекурсивно, вы научитесь определять большие сущности, со-
стоящие из меньших сущностей
точно такого же типа, как и большие
.
Например,
если рассматривать дом как набор комнат, то при добавлении или удалении комнаты
дом остается домом.
В мире алгоритмов рекурсивные структуры встречаются повсеместно. Более того, каж-
дую из ранее описанных абстрактных структур можно считать рекурсивной. На рис. 1.9
видно, как легко они разбиваются на составляющие.
Перечислим возможные рекурсивные объекты.
Перестановки
. Удалив первый элемент перестановки {1,...,
n
}, мы получим переста-
новку остающихся
n –
1 элементов.
Подмножества
. Каждое множество элементов {1,...,
n
} содержит подмножество
{1,...,
n –
1}, являющееся результатом удаления элемента
n
, если такой имеется.
Деревья
. Что мы получим, удалив корень дерева? Правильно, коллекцию меньших
деревьев. А что мы получим, удалив какой-либо лист дерева? Немного меньшее де-
рево.
Графы
. Удалите любую вершину графа, и вы получите меньший граф. Теперь разо-
бьем вершины графа на две группы, правую и левую. Разрезав все ребра, соеди-
няющие эти группы, мы получим два меньших графа и набор разорванных ребер.
40
Do'stlaringiz bilan baham: |