Чому вважається, що DFS має просторову складність ?


11

Відповідно до цих приміток , вважається , що DFS має просторову складність , де - коефіцієнт розгалуження дерева, а - максимальна довжина будь-якого шляху в просторі стану.O(bm)bm

Те саме сказано на цій сторінці у Вікікнижці про неінформований пошук .

Тепер "інфобокс" статті Вікіпедії про DFS представляє наступне для складності простору алгоритму:

O(|V|) , якщо весь графік проходить без повторень, найдовша шукана довжина шляху для неявних графіків без усунення повторюваних вузлівO()

що більше схоже на те, що я вважав, складність простору DFS, тобто , де - максимальна довжина, досягнута алгоритмом.O(m)m

Чому я думаю, що це так?

Ну, в основному нам не потрібно зберігати будь-які інші вузли, крім вузлів шляху, який ми зараз дивимося, тому немає сенсу множуватись на в аналізі, наданому як Wikibook, так і замітками, про які я вам передав до.b

Крім того, згідно з цією статтею на IDA * по Річард Корф , простір складність DFS є , де вважається «глибина зрізу».O(d)d

Отже, у чому полягає правильна космічна складність DFS?

Я думаю, це може залежати від реалізації, тому я би вдячний поясненню складності простору для різних відомих реалізацій.


DFS is considered to […] of the treeне кожен графік, пройдений глибиною спочатку - це дерево .
сіра борода

Існує різниця між словами "це тут реалізація DFS коштувала X" та "DFS може бути реалізовано так, що воно коштувало X". Так здається, сперечаються про різні твердження другого роду, які зовсім не повинні бути суперечливими. (Зауважте, що взагалі немає суперечності, оскільки , якщо означає взагалі щось.)O(bm)O(m)O(bm)
Рафаель

@greybeard Чи можете ви навести приклад, коли обхід першого графіка на графіку не призведе до дерева?
nbro

example where a depth-first traversal on a graph would not result in a treeне даючи йому занадто багато думок: розбирати. (Зачекайте: що ви маєте на увазі: result in a treeПитання про пошук /
пересування

1
@greybeard Відповідно до всіх визначень, які я до цього часу знайшов. Знайдіть мені визначення, де він переглядає вузли, то ми можемо про це обговорити.
nbro

Відповіді:


7

Це залежить від того, що саме ви називаєте DFS. Розглянемо для прикладу алгоритм DFS-ітератив, описаний у Вікіпедії , і припустимо, що ви запускаєте його на дереві, щоб вам не довелося відслідковувати, які вузли ви вже відвідали. Припустимо, ви запустите його на повному дереві -ary глибиною . Ми можемо ідентифікувати вузли на їхньому дереві зі словами понад довжиною не більше . Алгоритм працює наступним чином:bm[b]m

  1. Почніть з кореня. Натисніть до стеку (у зворотному порядку).1,2,,b

  2. Поп і натисніть до стеку.111,12,,1b

  3. Поп і натисніть до стеку.11111,112,,11b

  4. Поп і натисніть до стеку.1m11m,1m12,,1m1b

У цей момент стек містить

1m,1m12,,1m1b,,112,,11b,12,,1b,2,,b,

для загальної кількості вузлів. Ви можете перевірити, що це пінта в той час, коли розмір стека максимізований.(b1)m+1


2
Пінта вчасно тримає лікаря подалі.
сіра борода

3

Тут слід зробити два моменти:

  1. Якщо ви вводите в стек всіх нащадків поточного вузла, тоді ефективно, складність простору дорівнює де - коефіцієнт розгалуження, а - максимальна довжина. Відповідь Юваля Філімуса справді стосується цієї справи. Однак зауважте, що загалом набагато значно більший за . Більше того, у багатьох областях, таких як головоломка розсувної плитки, верхній межами обмежена постійною (у цьому конкретному випадку 4), і тому ми можемо з упевненістю сказати, що DFS має складність простору, яка становить .O(bd)bddbbO(d)

  2. Однак, правда, це не завжди так. Наприклад, у головоломці «Млинець» коефіцієнт розгалуження зростає з довжиною оптимального рішення, і вони мають однакові значення. Все-таки складність простору дорівнює . Щоб побачити це, просто налаштуйте процедуру розширення будь-якого вузла: Замість того, щоб вставляти всіх нащадків поточного вузла (як запропонував Юваль Філіус), вставляйте їх у порядку. Ви спочатку генеруєте першого нащадка і одразу після того, як ви продовжуєтесь в глибині першого порядку --- фактично, вам не потрібні всі інші нащадки в цей моментO(d). Якщо ви коли-небудь повернетесь до цього вузла, його нащадок буде видалено зі стека. Далі, генеруйте другого нащадка і продовжуйте знову в глибині першого порядку. Якщо ви повернетесь до цього вузла, тоді генеруйте третій і так далі, поки не буде більше нащадків. Якщо ви будете продовжувати цей шлях, у вашому стеку будуть лише вузли, незалежно від коефіцієнта розгалуження, .db

Підсумовуючи, я ніколи не сказав, що DFS має просторову складність, яка є і, натомість, я стверджую, що її просторова складність є .O(bd)O(d)

Сподіваюся, це допомагає,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.