Приложение 1. МЕТОДЫ ПОИСКА, ИСПОЛЬЗУЮЩИЕ ДЕРЕВО РЕШЕНИЙ
1. Принцип поиска, использующий дерево решений
Основной принцип, на котором базируются методы поиска с деревом решений, состоит в разбиении начальной задачи на некоторое число подзадач (в целом представляющих всю задачу с последующей попыткой разрешить каждую из зтих подзадач. Выражение разрешить мы понимаем так:
либо (i) найти оптимальное решение,
либо (ii) показать, что значение оптимального решения хуже, чем для полученного до этого наилучшего решения,
либо (iii) показать, что подзадача не является допустимой.
Это разбиение описывается деревом на рис. П.1, причем вершины изображают подзадачи.
Смысл разбиения задачи на некоторое число подзадач состоит в том, что или эти подзадачи проще разрешить, или они имеют меньший размер, или обладают структурой, не присущей первоначальной задаче Но, вообще говоря, все еще может оказаться, что подзадачу нельзя разрешить, и эта подзадача сама разбивается на новые подзадачи как это показано на рис. Это разбиение (называемое также ветвлением), повторяется для каждой подзадачи, которая не может быть разрешена.
На любом этапе полное множество подзадач, требующих разрешения, представляется множеством концевых вершин (т. е. вершин степени 1) всех цепей, исходящих из корня дерева решений. (Корень этого дерева изображает начальную задачу Эти вершины называются висячими вершинами, и на рис. это
Если поиск исчерпан, то очевидно, что множество подзадач, на которые разбита задача, должно представлять всю задачу. Таким образом, если задача разбита на подзадач
где обозначает множество всех допустимых решений задачи
Так как соотношение должно быть применено к каждому разбиению, то
В случаях когда требуется перебрать все решения задачи (а не только найти оптимальное решение), желательно уметь перебирать решения с помощью вышеприведенного разбиения задачи на подзадачи и перебирать решения каждой из этих подзадач.
Рис. П.1. Разбиение задачи на подзадачи.
Рис. П.2. Дерево после ветвления в вершине
В этом случае нужно избежать дублирования построенных решений, т. е. нужно разбивать задачу на подзадачи так, чтобы
для любых двух подзадач для которых
Соотношение определяет собственное разбиение задачи Хотя условие не является необходимым для полноценного поиска с деревом решений, оно тем не менее имеет большие выгоды с вычислительной точки зрения, так как
(а) для задачи оптимизации оптимальное решение является решением одной и только одной подзадачи, представляемой висячей вершиной;
(б) для задачи полного перебора объединение множеств решений подзадач, представляемых висячими вершинами, дает множество всех решений задачи без дублирования.