Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013-ПОИСК-Задания и теор мат / 1.ПОИСК-1 Общие пон, Алг-мы осн. поиска-сокр.doc
Скачиваний:
20
Добавлен:
27.04.2015
Размер:
186.37 Кб
Скачать

4 4

3

5 5

4 3

2 4

Рис. 3

10,4 6,7 4,0

11,0

8,9

6,9 3,0

Рис. 4

ПРИМЕР.

Построить дерево поиска для ГРАФА Рис. 3 и начального узла S.

При таком построении исключаются пути, содержащие петли, т.е. вида

S - A - D - S - A - D.

В результате получим дерево поиска - Рис. 5

(Winst/ Fig 4.2 Ch 4, p 64)

Пояснение:

Каждый узел дерева поиска представляет НЕ узел исходного графа, а ПУТЬ (возможно, один из путей) от начального узла данного графа к его узлу, с одноименному с этим узлом дерева, и имеет имя того узла ИСХОДНОГО ГРАФА, которым оканчивается ЭТОТ представляемый им путь (терминального узла).

Рис. 5 (см. ниже)

Frame3Frame4На Рис. 5:

УЗЕЛ C (обозначенный C1) представляет путь S -A -B - C (C1),

УЗЕЛ E (E1) - путь S -A -B - E (E1)

УЗЕЛ F (F1) - дочерний узел узла E (E1) представляет путь

S -A -B - E (E1) - F (F1)

ТЕРМИНЫ

В процессе поиска используются следующие термины: (Winst/166):

- РАСШИРЕНИЕ УЗЛА (РАСКРЫТИЕ ВЕРШИНЫ - Попов) - это определение (формирование) всех дочерних вершин данного узла.

- узел считается ОТКРЫТЫМ, если он НЕ РАСШИРЕН, т.е. его дочерние узлы не сформированы (не определены, не указаны).

- узел считается ЗАКРЫТЫМ, если он РАСШИРЕН, т.е. его дочерние узлы сформированы.

Процедура поиска должна РАСШИРЯТЬ (т.е. ЗАКРЫВАТЬ) не расширенные (открытые) узлы, начиная с корневого узла, (т.е. формировать для них дочерние вершины) до тех пор, пока она не найдет ЦЕЛЕВОЙ узел и, тем самым, путь от КОРНЯ к ЦЕЛИ.

Общее число путей в дереве с коэффициентом разветвления k и глубиной (числом уровней) d равно k d , т.е.

число путей растет экспоненциально при увеличении глубины дерева.

Поэтому надо стремиться к уменьшению числа исследуемых путей.

3.2.3. ОСНОВНЫЕ МЕТОДЫ ПОИСКА ПУТИ НА ДЕРЕВЕ

ОСНОВНОЙ ПОИСК

Это поиск КАКОГО-ЛИБО (любого) пути на дереве.

(Basic Search)

1. Методы "слепого" поиска

(Blind methods) Winst/Ch 4, p 64

Рассмотрим методы "слепого поиска", т.е. поиска КАКОГО-ЛИБО (любого) ПУТИ, который осуществляется при отсутствии информации, помогающей упорядочивать выбор в узлах так, чтобы наиболее перспективные варианты рассматривались первыми.

А. Поиск в глубину

Depth-first search - Раф/103; Winst/ Ch 4, p 66, Fig 4.3

Пример со спелеологом. Рис. 6 (Winst/p 67,Fig 4.3)

Принцип: предполагая, что все пути равноценны, выбираем произвольно какаю-то одну ветвь в дереве поиска и исследуем ее, начиная с корневого узла, до первого терминального узла.

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

Т.е. в каждом узле, куда мы попадаем, рассматривается только один из его дочерних узлов, и далее процедура продолжается с этого узла. Все другие альтернативы на этом же самом уровне игнорируются.

Напр., выбрав порядок просмотра слева направо, мы "бросаемся (ныряем), очертя голову" (to dash headlong) на дно дерева вдоль крайней левой ветви (Рис. 6). Но т.к. мы попадаем в "листовой" узел С, не дойдя до цели G, то на следующем шаге надо вернуться к ближайшему предшественнику, который имеет неисследованные дочерние узлы. Таким узлом является В, от которого мы идем к неисследованному узлу Е, затем к D (который вновь является терминальным, но не целевым), возвращаемся к Е, идем к его неисследованному дочернему узлу F и, наконец, к целевому узлу G.

Эта процедура является полезной, если известно, что дерево небольшое и у него много целевых узлов, а возвраты - дорогостоящие.

Б. Поиск в ширину

Breadth-first search - Раф/102; Winst/ Ch 4, p 68, Fig 4.4

Рис. 7 - Сначала просматриваются все дочерние узлы корневого узла и проверяется , не является ли ЦЕЛЕВЫМ один из них.

Если нет, то проверяется все дочерние узлы этих узлов второго уровня - не является ли целевым один из них и т.д., иначе говоря, процедура проверяет все пути данной длины k до того, как перейти к проверке путей длины k +1:

сначала ищутся все пути от КОРНЕВОГО УЗЛА к ЦЕЛЕВОМУ длины 1, затем - длины 2 и т.д. до тех пор, пока не будет найдено решение, т.е. какой-либо путь к ЦЕЛЕВОМУ УЗЛУ.

Эта процедура гарантирует нахождение решения (если оно существует) и решение здесь - путь минимальной длины (но если дуги имеют разные стоимости, то не обязательно - минимальной стоимости).

В. Метод постепенного углубления - Рис.8 - Раф/104;

Это компромисс между поиском в глубину и в ширину

Сначала - поиск на глубину заданного уровня по 1-й выбранной ветви (не обязательно до конца ветви), если цель не достигнута, то возврат к развилке и исследование новой ветви на эту же глубину .

Если все дерево исследовано на заданную глубину и решение не найдено, то уровень глубины увеличивается на заданную величину и поиск продолжается.

Если первоначальная глубина установлена равной 1 и ее однократное приращение также равно 1, то это - поиск в ширину.

Если первоначальная глубина установлена равной очень большому значению (миллиону), то это - поиск в глубину.

Эта стратегия гарантирует нахождение решения, причем ДЛИНА пути решения будет отличаться от КРАТЧАЙШЕЙ не более, чем на величину однократного приращения уровня глубины, но при этом возможная СТОИМОСТЬ путей решения никак не оценивается.

ПРЕИМУЩЕСТВА И НЕДОСТАТКИ ДАННЫХ МЕТОДОВ.

Правильный поиск зависит от дерева - Winst/69

Поиск в глубину

- хорошая стратегия, когда есть уверенность, что все частичные пути либо заканчиваются тупиковыми узлами [dead ends] ("листовыми"), либо. достигают целевого узла после разумного числа шагов.

- это плохая стратегия, если существуют длинные пути, даже бесконечно длинные, которые и НЕ заканчиваются тупиковыми ("листовыми") узлами и НЕ достигают целевого узла. В таких ситуациях требуются другие стратегии.

Поиск в ширину -

- работает даже на деревьях, которые имеют бесконечную глубину.

- но является расточительным, если все пути ведут к целевому узлу, находящемуся примерно на одной и той же глубине.

Это - плохая стратегия, если к-т разветвления k велик, т.к. число путей растет экспоненциально при увеличении глубины дерева:

общее число путей в дереве с к-том разв-ния k и глубиной (числом уровней) d равно kd.

Это- хорошая стратегия, если мы уверены, что к-т разветвления k мал.

Поиск в ширину можно выбирать вместо поиска в глубину, если есть опасение, что возможно наличие длинных путей, либо даже бесконечно длинных, которые и НЕ заканчиваются тупиковыми ("листовыми") узлами и НЕ достигают целевого узла.

Г. Недетерминированный поиск

- случайное движение в дереве поиска - Winst/ Ch 4, p 69

Возможна ситуация, когда у нас настолько мало информации, что мы не можем исключить ни возможности большого к-та разветвления, ни длинных бесполезных путей.

В такой ситуации мы можем искать некоторую среднюю стратегию между поиском в глубину и поиском в ширину.

Одна из возможностей - недетерминированный поиск. При таком поиске открытый узел, для которого осуществляется расширение (т.е. определение дочерних вершин), выбирается случайно. В этом случае гарантируется, что мы не можем "завязнуть" ни из-за слишком большого числа ветвей, ни из-за слишком большого числа уровней.