2011-02-10 2 views
19

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

+3

Это линейное искусство программирования Vol 1 страница 326 – new299

+0

Это искусство программирования Кнута? Я пытаюсь найти это, чтобы дать другу хороший пример того, что для n-арного дерева он линейный. – Nicholas

+0

yes Knuth's «Искусство компьютерного программирования» – new299

ответ

20

Это зависит от того, какой обход вы выполняете, и алгоритм, но обычно это будет O (n), где n - общее количество узлов в дереве. Каноническая рекурсивная реализация первого обхода глубины будет потреблять память (в стеке) в порядке самого глубокого уровня, который на сбалансированном дереве будет log (n).

+0

Это правда о n-арном дереве? У меня есть структура данных, которая является деревом max-depth 4 и пересекает его, мой друг использует 3 для циклов, и говорит, что его алгоритм работает в 'O (n^3)' время, но я считаю, что он работает в ' n' time, 'n' - общее число узлов в дереве – Nicholas

+4

@Nocholas, вы правы и ваш друг ошибается. Оно включено). – Uri

1

Не так ли будет n для дерева с n узлов?

Вы посещаете каждый древо один раз, не так ли? Поэтому я бы сказал, что он линейный.

+0

Я предполагаю, что это должно быть дерево с «n узлами», а не «n листьев». – aamadmi

+0

Вы правы, неверно terminoligy :) – Nanne

+0

@Nanne С правильным алгоритмом это действительно линейная сложность во времени (посещение каждого узла один раз), но это может все еще не иметь линейной сложности в пространстве. Подобно использованию стека. – Tim

Смежные вопросы