Jump to content

Итеративный поиск в глубину с углублением

Итеративный поиск в глубину с углублением
Сорт Алгоритм поиска
Структура данных Дерево , График
Худшая производительность , где является фактором ветвления и это глубина самого мелкого раствора
Наихудшая пространственная сложность [1]
Оптимальный да (для невзвешенных графиков)

В информатике итеративный поиск с углублением или, точнее, итеративный поиск в глубину с углублением. [1] (IDS или IDDFS) — это стратегия поиска в пространстве состояний /графе, в которой ограниченная по глубине версия поиска в глубину запускается повторно с увеличением пределов глубины, пока цель не будет найдена. IDDFS оптимален, что означает, что он находит самую поверхностную цель. [2] Поскольку он посещает все узлы дерева поиска вплоть до глубины перед посещением каких-либо узлов на глубине , совокупный порядок первого посещения узлов фактически такой же, как и при поиске в ширину . Однако IDDFS использует гораздо меньше памяти. [1]

Алгоритм для ориентированных графов

[ редактировать ]

Следующий псевдокод показывает IDDFS, реализованную в виде рекурсивной DFS с ограниченной глубиной (называемой DLS) для ориентированных графов . Эта реализация IDDFS не учитывает уже посещенные узлы.

function IDDFS(root) is
    for depth from 0 todo
        found, remaining ← DLS(root, depth)
        if found ≠ null then
            return found
        else if not remaining then
            return null

function DLS(node, depth) is
    if depth = 0 then
        if node is a goal then
            return (node, true)
        else
            return (null, true)    (Not found, but may have children)

    else if depth > 0 then
        any_remaining ← false
        foreach child of node do
            found, remaining ← DLS(child, depth−1)
            if found ≠ null then
                return (found, true)   
            if remaining then
                any_remaining ← true    (At least one node found at depth, let IDDFS deepen)
        return (null, any_remaining)

Если целевой узел найден DLS , IDDFS вернет его, не заглядывая глубже. В противном случае, если хотя бы один узел существует на этом уровне глубины, оставшийся флаг позволит IDDFS продолжить работу.

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

Характеристики

[ редактировать ]

IDDFS достигает полноты поиска в ширину (когда коэффициент ветвления конечен) с использованием пространственной эффективности поиска в глубину. Если решение существует, оно найдет путь решения с наименьшим количеством дуг. [2]

Итеративные углубленные посещения штатов проводятся несколько раз, и это может показаться расточительным. Однако если IDDFS исследует дерево поиска на глубину , большая часть общих усилий направлена ​​на глубокое изучение состояний . Относительно количества состояний на глубине , стоимость повторного посещения состояний выше этой глубины всегда невелика. [3]

Основное преимущество IDDFS при поиске в дереве игры состоит в том, что более ранние поиски имеют тенденцию улучшать часто используемые эвристики, такие как эвристика-убийца и альфа-бета-отсечение , так что более точная оценка оценки различных узлов при окончательном поиске на глубину может произойти, и поиск завершается быстрее, поскольку он выполняется в лучшем порядке. Например, альфа-бета-отсечение наиболее эффективно, если сначала ищется лучший ход. [3]

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

Асимптотический анализ

[ редактировать ]

Временная сложность

[ редактировать ]

Временная сложность IDDFS в (хорошо сбалансированном) дереве оказывается такой же, как и при поиске в ширину, т.е. , [1] : 5  где является фактором ветвления и это глубина цели.

Доказательство

[ редактировать ]

При итеративном поиске с углублением узлы на глубине расширяются один раз, те, что на глубине расширяются дважды и так далее до корня дерева поиска, который расширенный раз. [1] : 5  Таким образом, общее количество расширений в итеративном поиске с углублением равно

где количество расширений на глубине , количество расширений на глубине , и так далее. Факторинг дает

Теперь позвольте . Тогда у нас есть

Это меньше, чем бесконечная серия

который сходится к

, для

То есть у нас есть

, для

С или является константой, не зависящей от (глубина), если (т. е. если коэффициент ветвления больше 1), время выполнения итеративного поиска с углублением в глубину равно .

Для и номер

В общем, итеративный углубляющийся поиск из глубины. вплоть до глубины расширяется только примерно больше узлов, чем один поиск в ширину или с ограничением по глубине , когда . [4]

Чем выше коэффициент ветвления, тем меньше накладные расходы на многократно расширяемые состояния. [1] : 6  но даже когда коэффициент ветвления равен 2, итеративный поиск с углублением занимает примерно вдвое больше времени, чем полный поиск в ширину. Это означает, что временная сложность итеративного углубления по-прежнему велика. .

Пространственная сложность

[ редактировать ]

Пространственная сложность IDDFS составляет , [1] : 5  где это глубина цели.

Доказательство

[ редактировать ]

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

В общем, итеративное углубление является предпочтительным методом поиска, когда пространство поиска большое и глубина решения неизвестна. [3]

Для следующего графика:

поиск в глубину, начиная с A, предполагая, что левые ребра в показанном графе выбраны раньше правых ребер, и предполагая, что поиск запоминает ранее посещенные узлы и не будет повторять их (поскольку это небольшой граф), посетит узлы в следующем порядке: A, B, D, F, E, C, G. Ребра, пройденные в этом поиске, образуют дерево Тремо — структуру, имеющую важные применения в теории графов .

Выполнение того же поиска без запоминания ранее посещенных узлов приводит к посещению узлов в порядке A, B, D, F, E, A, B, D, F, E и т. д. навсегда, попадая в A, B, D, F. , цикл E и никогда не достигает C или G.

Итеративное углубление предотвращает этот цикл и достигает следующих узлов на следующих глубинах, при условии, что оно происходит слева направо, как указано выше:

  • 0: А
  • 1: А, Б, В, Е

(Теперь при итеративном углублении появился C, а при обычном поиске в глубину — нет.)

  • 2: А, Б, Г, Ж, В, Г, Е, Ж

(Он по-прежнему видит C, но появился позже. Кроме того, он видит E по другому пути и дважды возвращается к F.)

  • 3: А, Б, Г, Ж, Е, С, Г, Е, Ж, Б

Для этого графика по мере увеличения глубины два цикла «ABFE» и «AEFB» просто станут длиннее, прежде чем алгоритм сдастся и попробует другую ветвь.

[ редактировать ]

Подобно итеративному углублению, существует стратегия поиска, называемая поиском с итеративным удлинением , которая работает с увеличением пределов стоимости пути вместо ограничений глубины. Он расширяет узлы в порядке увеличения стоимости пути; поэтому первой целью, с которой он сталкивается, является цель с наименьшей стоимостью пути. Однако итеративное удлинение требует значительных накладных расходов, что делает его менее полезным, чем итеративное углубление. [3]

Итеративное углубление A* — это поиск по принципу «наилучшее первое», который выполняет итеративное углубление на основе значений « f », аналогичных тем, которые вычислены в алгоритме A* .

Двунаправленный IDDFS

[ редактировать ]

IDDFS имеет двунаправленный аналог, [1] : 6  который чередует два поиска: один начинается с исходного узла и движется по направленным дугам, а другой начинается с целевого узла и продолжается по направленным дугам в противоположном направлении (от головного узла дуги к хвостовому узлу дуги). Процесс поиска сначала проверяет, что исходный узел и целевой узел совпадают, и если это так, возвращает тривиальный путь, состоящий из одного исходного/целевого узла. В противном случае процесс прямого поиска расширяет дочерние узлы исходного узла (установите ), процесс обратного поиска расширяет родительские узлы целевого узла (установите ), и проверяется, и пересекаться. Если да, то кратчайший путь найден. В противном случае глубина поиска увеличивается и выполняются те же вычисления.

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

Двунаправленный IDDFS

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

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

Временные и пространственные сложности

[ редактировать ]

Время работы двунаправленной IDDFS определяется выражением

а пространственная сложность определяется выражением

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

Псевдокод

[ редактировать ]
function Build-Path(s, μ, B) is
    π ← Find-Shortest-Path(s, μ) (Recursively compute the path to the relay node)
    remove the last node from π
    return π  B (Append the backward search stack)
function Depth-Limited-Search-Forward(u, Δ, F) is
    if Δ = 0 then
        F ← F  {u} (Mark the node)
        return
    foreach child of u do
        Depth-Limited-Search-Forward(child, Δ − 1, F)
function Depth-Limited-Search-Backward(u, Δ, B, F) is
    prepend u to B
    if Δ = 0 then
        if u in F  then
            return u (Reached the marked node, use it as a relay node)
        remove the head node of B
        return null
    foreach parent of u do
        μ ← Depth-Limited-Search-Backward(parent, Δ − 1, B, F)
        if μ  null then
            return μ
    remove the head node of B
    return null
function Find-Shortest-Path(s, t) is
   if s = t then
       return <s>
   F, B, Δ ← ∅, ∅, 0
   forever do
       Depth-Limited-Search-Forward(s, Δ, F)
       foreach δ = Δ, Δ + 1 do
           μ ← Depth-Limited-Search-Backward(t, δ, B, F)
           if μ  null then
               return Build-Path(s, μ, B) (Found a relay node)
       F, Δ ← ∅, Δ + 1
  1. ^ Jump up to: а б с д и ж г час Корф, Ричард (1985). «Итеративное углубление в глубину: поиск оптимального допустимого дерева». Искусственный интеллект . 27 : 97–109. дои : 10.1016/0004-3702(85)90084-0 . S2CID   10956233 .
  2. ^ Jump up to: а б Дэвид Пул; Алан Макворт. «3.5.3 Итеративное углубление ‣ Глава 3 Поиск решений ‣ Искусственный интеллект: основы вычислительных агентов, 2-е издание» . artint.info . Проверено 29 ноября 2018 г.
  3. ^ Jump up to: а б с д Рассел, Стюарт Дж .; Норвиг, Питер (2003), Искусственный интеллект: современный подход (2-е изд.), Аппер-Сэддл-Ривер, Нью-Джерси: Прентис-Холл, ISBN  0-13-790395-2
  4. ^ Рассел; Норвиг (1994). Искусственный интеллект: современный подход .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b5cf3fecb26f7bfa0097e1b0831c85e7__1720910580
URL1:https://arc.ask3.ru/arc/aa/b5/e7/b5cf3fecb26f7bfa0097e1b0831c85e7.html
Заголовок, (Title) документа по адресу, URL1:
Iterative deepening depth-first search - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)