For faster navigation, this Iframe is preloading the Wikiwand page for Рекурсивный поиск по первому наилучшему совпадению.

Рекурсивный поиск по первому наилучшему совпадению

Материал из Википедии — свободной энциклопедии

РППНС
Алгоритмы поиска на графах
Назван в честь Поиск по первому наилучшему совпадению
Автор Richard E. Korf[вд]
Структура данных граф
Худшее время

Рекурсивный Поиск по Первому Наилучшему Совпадению (РППНС) (англ. Recursive Best-First Search — RBFS) — это простой рекурсивный алгоритм, в котором делаются попытки имитировать работу стандартного поиска по первому лучшему совпадению, но с использованием только линейного пространства.

Общие положения

[править | править код]

Пример реализации алгоритма на псевдокоде

[править | править код]
function Recursive-Best-First-Search(problem) returns решение result
  или индикатор неудачи failure
    RBFS(problem, Make-Node(Initial-State[problem] ) , ∞)

function RBFS(problem, node, f_limit) returns решение result
  или индикатор неудачи failure и новый предел f-стоимости f_limit
    if Goal-Test[problem](State[node]) then return узел node
    successors ← Expand(node, problem)
    if множество узлов-преемников successors пустое
      then return failure, ∞
    for each s in successors do
       f[s] ← max(g(s)+h(s) , f[node] )
repeat
      best ← узел с наименьшим f-значением во множестве successors
      if f[best] > f_limit then return failure, f[best]
      alternative ← второе после наименьшего f-значение во множестве successors
      result, f[best] ← RBFS(problem, best, min{f_limit, alternative))
      if result ≠ failure then return result

Он имеет структуру, аналогичную структуре рекурсивного поиска в глубину, но вместо бесконечного прохождения вниз по текущему пути данный алгоритм контролирует f-значение лучшего альтернативного пути, доступного с любого предка текущего узла. Если текущий узел превышает заданный предел, то текущий этап рекурсии прекращается и рекурсия продолжается по альтернативному пути. После прекращения данного этапа рекурсии в алгоритме РППНС происходит замена f-значения каждого узла вдоль данного пути наилучшим f-значением его дочернего узла. Благодаря этому в алгоритме РППНС запоминается f-значение лучшего листового узла с забытого поддерева и поэтому в некоторый следующий момент времени может быть принято решение о том, стоит ли снова разворачивать это поддерево[1].

Преимущества и недостатки

[править | править код]

Алгоритм РППНС немного более эффективный по сравнению с IDA*, но всё ещё страдает от недостатка, связанного со слишком частым повторным формированием узлов[2]. Такие изменения решения происходят в связи с тем, что при каждом развёртывании текущего наилучшего пути велика вероятность того, что его f-значение увеличится, поскольку функция h обычно становится менее оптимистичной по мере того, как происходит развёртывание узлов, более близких к цели. После того как возникает такая ситуация, особенно в больших пространствах поиска, путь, который был вторым после лучшего, может сам стать лучшим путём, поэтому в алгоритме поиска приходится выполнять возвращения, чтобы пройти по нему. Каждое изменение решения соответствует одной итерации алгоритма IDA* и может потребовать много повторных развёртываний забытых узлов для воспроизведения лучшего пути и развёртывания пути ещё на один узел.

Как и алгоритм поиска A*, РППНС является оптимальным алгоритмом, если эвристическая функция h(n) допустима. Его пространственная сложность равна 0(bd), но охарактеризовать временную сложность довольно трудно: она зависит и от точности эвристической функции, и от того, насколько часто происходила смена лучшего пути по мере развёртывания узлов. И алгоритм IDA*, и алгоритм РППНС склонны к потенциальному экспоненциальному увеличению сложности, связанной с поиском в графах, поскольку эти алгоритмы не позволяют определять наличие повторяющихся состояний, отличных от тех, которые находятся в текущем пути. Поэтому данные алгоритмы способны многократно исследовать одно и то же состояние.

Алгоритмы IDA* и РППНС страдают от того недостатка, что в них используется слишком мало памяти. Между итерациями алгоритм IDA* сохраняет только единственное число — текущий предел f-стоимости. Алгоритм РППНС сохраняет в памяти больше информации, но количество используемой в нём памяти измеряется лишь значением 0(bd): даже если бы было доступно больше памяти, алгоритм РППНС не способен ею воспользоваться.

Примечания

[править | править код]
  1. Раздел Применение не написан до конца в статье оригинала, поэтому пока нет смысла вносить его в эту статью.
  2. Здесь должен быть фрагмент

    В примере, приведённом на рис. 1, 2 и 3, алгоритм РППНС сначала следует по пути через узел RimnicuVilcea, затем «меняет решение» и пытается пройти через узел Fagaras, после этого снова возвращается к отвергнутому ранее решению,

    но он ссылается на недописанный раздел Применение в статье оригинала.

Литература

[править | править код]
{{bottomLinkPreText}} {{bottomLinkText}}
Рекурсивный поиск по первому наилучшему совпадению
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?