Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Новые_лекции_СИИ.doc
Скачиваний:
390
Добавлен:
16.03.2015
Размер:
1.11 Mб
Скачать
    1. Сведение задачи к подзадачам и и/или графы.

Для некоторых категорий задач более естественным решением является разбиение задачи на подзадачи. Разбиение на подзадачи дает преимущество в том случае, когда подзадачи взаимно независимы, и, следовательно, решать их можно независимо друг от друга. Проиллюстрируем это на примере решения задачи поиска на карте дорог маршрута между заданными городами как показано на рисунке.

Вершинами a,b,c,d,f,h,z – представлены города. Расстояние между городами обозначено весом дуги из одной вершины графа в другую. На карте есть река. Допустим, что переправиться через реку можно только по двум мостам: один находится в городе f, а второй – в городе d. Очевидно, что искомый маршрут обязательно должен проходить через один из мостов, а значит должен проходить либо через f, либо через d. Таким образом, мы имеем две главные альтернативы:

  • путь из a в z, проходящий через f;

  • путь из a в z, проходящий через d.

Затем, каждую из этих двух альтернативных задач можно, в свою очередь, разбить следующим образом:

  1. для того, чтобы найти путь из a в z через f, необходимо:

  • найти путь из a в f и

  • найти путь из f в z.

  1. для того, чтобы найти путь из a в z через d, необходимо:

  • найти путь из a в d и

  • найти путь из d в z.

Таким образом, в двух альтернативах мы получили четыре подзадачи, которые можно решать независимо друг от друга. Полученное разбиение исходной задачи можно изобразить в форме И/ИЛИ – графа, представленного на рисунке.

Круглые дуги на графе указывают на отношение И между соответствующими подзадачами. Задачи более низкого уровня называются задачами-преемниками.

И/ИЛИ- граф- это направленный граф, вершины которого соответствуют задачам, а дуги – отношениям между задачами.

Между дугами также существуют свои отношения – это отношения И и ИЛИ, в зависимости от того, должны ли мы решить только одну из задач-преемников или же несколько из них. В принципе из верщины могут выходить дуги, находящиеся в отношении И вместе с дугами, находящимися в отношении ИЛИ. Тем не менее, будем предполагать, что каждая верщина имеет либо только И-преемников, либо только ИЛИ-преемников, так как в такую форму можно преобразовать любой И/ИЛИ- граф, вводя в него при необходимости вспомогательные ИЛИ-вершины. Вершину, из которой выходят только И- дуги называются И- вершиной; вершину, из которой выходят только ИЛИ- дуги,- ИЛИ- вершиной.

Решением задачи, представленной в виде И/ИЛИ- графа является решающее дерево, так как решение должно включать в себя все подзадачи И-вершин.

Решающее дерево T определяется следующим образом:

  • исходная задача P – это корень дерева T;

  • если P является ИЛИ-вершиной, то в T содержится только один из ее преемников (из И/ИЛИ-графа) вместе сос своим собственным решающим деревом;

  • если P – это И-вершина, то все ее преемники (из И/ИЛИ-графа) вместе со своими решающими деревьями содержатся в T.

На представленном выше И/ИЛИ- графе представлены три решающих дерева, обозначенных штих-пунктирной, пунктирной и сплошной линиями. Соответственно, стоимости данных деревьев составляют 7, 12, 7. В данном случае стоимости определены как суммы стоимостей всех дуг дерева. Иногда стоимость решающего дерева определяется сумой стоимостей всех его вершин. В соответствии с заданным критерием, из всех решающих деревьев выбирается оптимальное.