Сложность глубины/пространства глубины Первый поиск

Я просмотрел различные другие ответы StackOverflow, и все они отличаются от того, что написал мой лектор на своих слайдах.

Поиск по глубине имеет временную сложность O (b ^ m), где b - максимальный коэффициент ветвления дерева поиска, а m - максимальная глубина пространства состояний. Ужасно, если m намного больше d, но если дерево поиска "кустистое", может быть намного быстрее, чем поиск в ширину.

Он продолжает говорить..

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

Другой ответ о StackOverflow гласит, что это O (n + m).

Ответ 1

Сложность времени: Если вы можете получить доступ к каждому узлу за время O (1), то с коэффициентом ветвления b и максимальной глубиной m общее число узлов в этом дереве будет наихудшим = 1 + b + b 2 +… + b m-1. Использование формулы для суммирования геометрической последовательности (или даже ее самостоятельного решения) говорит о том, что эта сумма равна = (b m - 1)/(b - 1), в результате чего общее время посещения каждого узла пропорционально b m, Следовательно, сложность = O (b m).

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

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


Сложность пространства: Длина самого длинного пути = м. Для каждого узла вы должны хранить его братьев и сестер, чтобы, когда вы посетили все дочерние узлы и вернулись к родительскому узлу, вы могли знать, какой из братьев и сестер будет изучен следующим. Для m узлов по пути вы должны будете сохранить b узлов дополнительно для каждого из m узлов. Вот как вы получаете O (BM) пространство сложности.

Ответ 2

Сложность O(n + m), где n - количество узлов в вашем дереве, а m - количество ребер.

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

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

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

Ответ 3

Я полагаю, что эта сложность времени/пространства DFS изучается на классе AI, но не на классе алгоритма.

Дерево поиска DFS имеет несколько иное значение:

A node - это структура данных бухгалтерии, используемая для представления поиска дерево. Состояние соответствует конфигурации мира.... Кроме того, два разных узла могут содержать одно и то же мировое состояние, если это состояние создается через два разных пути поиска.

Цитата из книги "Искусственный интеллект - современный подход"

Таким образом, сложность времени/пространства здесь сосредоточена на посещении узлов и проверяет, является ли это состоянием цели. @displayName уже дает очень четкое объяснение.

В то время как O (m + n) находится в классе алгоритмов, фокус - это сам алгоритм, когда мы храним график как список смежности и как мы обнаруживаем узлы.