Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

10.3.3Деревья поиска

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

Конечный результат применения такой стратегии — построение дерева, называемого деревом поиска (search tree), которое состоит из части графа состояний, исследованного системой управления. Корневой узел дерева поиска — это начальное состояние, а потомки каждого узла — это состояния, достижимые из родительского после применения одного порождения. Каждая дуга между узлами в дереве поиска обозначает выполнение одного порождения, а каждый путь от корня к листу — путь между соответствующими состояниями в графе состояний.

Дерево поиска, которое будет создано в ходе решения головоломки из восьми фишек из конфигурации, показанной на рис. 10.5, показано на рис. 10.6. Крайняя левая ветвь дерева представляет попытку решить задачу, сперва переместив фишку 6 вверх, центральная ветка обозначает решение, начатое с перемещения фишки 2 вправо, а крайняя правая ветвь представляет перемещение вниз фишки 5. Кроме того, дерево поиска показывает, что если начать с перемещения вверх фишки 6, то единственно возможным порождением на следующем шаге будет перемещение фишки 8 вправо. (В действительности на этом шаге можно передвинуть фишку 6 вниз, но это будет всего лишь откат предыдущего порождения, то есть лишний ход.)

Целевое состояние достигается на последнем уровне дерева поиска (рис. 10.6). Так как это означает, что решение найдено, система управления может прервать процедуру поиска и начать создание последовательности инструкций, которая будет использоваться для решения головоломки во внешней среде. Это представляет собой простой процесс прохождения по дереву поиска вверх от целевого узла и одновременного проталкивания всех встречающихся порождений, представляемых дугами дерева, в стек. Применение такой техники к дереву поиска на рис. 10.6 приведет к формированию стека порождений на рис. 10.7. Система управления теперь может решить головоломку во внешней среде, выполняя инструкции, выталкиваемые из стека.

Можно сделать еще одно наблюдение. Вспомните, что в деревьях, которые мы обсуждали в главе 7, использовалась система указателей, следуя которой, можно было пройти по дереву вниз, от родительских узлов к их потомкам. Однако в случае дерева поиска система управления должна перемещаться от потомков к их родителям, то есть от целевого состояния вверх по дереву к начальному состоянию. Указатели в таких деревьях указывают вверх, а не вниз. То есть в каждом узле-потомке есть указатель на его родителя, но в узлах-родителях нет указателей на их потомков. (В некоторых приложениях используются оба набора указателей, что позволяет перемещаться по дереву в обоих направлениях.)