Есть O (LOGN) всегда дерево?

голоса
6

Мы всегда видим операции на (двоичный поиск) дерево O (LOGN) в худшем случае время работы из-за высоты дерева LogN. Интересно, если бы мы сказали, что алгоритм работает время как функция LOGN, например, т + NlogN, мы можем заключить, что должно включать в (дополненный) дерево?

EDIT: Благодаря вашим комментариям, я теперь понимаю, разделяй и властвуй бинарное дерево настолько похожи визуально / концептуально. Я никогда не сделал связь между ними. Но я думаю, что для случая, когда O (LOGN) не разделяй властвуй алго, который включает в себя дерево, которое не имеет свойство BST / AVL / красно-черного дерева.

Это дизъюнктная структура данных, множество операций с помощью функции поиска / Union, время выполнения которой O (N + MlogN), с N является # элементов и M числа операций Find.

Пожалуйста, дайте мне знать, если я пропускаю STH, но я не могу видеть, как разделяй властвуй вступает в игру здесь. Я вижу в этом (непересекающихся множествах) случае, что он имеет дерево без какой-либо собственности BST и бегущего время является функцией LogN. Так что мой вопрос о том, почему / почему я не могу сделать обобщение из этого случая.

Задан 22/02/2010 в 05:25
источник пользователем
На других языках...                            


7 ответов

голоса
7

Нет, вы можете также бинарный поиск отсортированного массива (например). Но не верьте мне на слово http://en.wikipedia.org/wiki/Binary_search_algorithm

Ответил 22/02/2010 в 05:26
источник пользователем

голоса
3

В качестве примера счетчика:

given array 'a' with length 'n'
y = 0
for x = 0 to log(length(a))
    y = y + 1
return y

Время работы составляет O (журнал (п)), но не дерево здесь!

Ответил 22/02/2010 в 05:28
источник пользователем

голоса
0

Алгоритмы , принимающие логарифмическую время являются обычно находятся в операции на бинарных деревьев.

Примеры O (LogN):

  • Нахождение элемента в отсортированном массиве с бинарным поиском или сбалансированным деревом поиска.

  • Посмотрите значение в отсортированный массив ввода по бисекции.

Ответил 22/02/2010 в 05:40
источник пользователем

голоса
7

То , что вы должны точно в обратном направлении. O(lg N)как правило , означает , что какой - то разделяй и властвуй алгоритма, и один распространенный способ реализации разделяй и властвуй является бинарным деревом. В то время как бинарные деревья являются существенным подмножеством всех алгоритмов разделяй и властвуй, то есть подмножество в любом случае.

В некоторых случаях, вы можете преобразовать другие разделяй и властвуй алгоритмы достаточно непосредственно в двоичные деревья (например , комментарии на другой ответ, уже сделал попытку утверждая , что бинарное аналогично). Просто еще очевидный пример, однако, многоходовое дерево (например, B-дерево, B + дерево или B * дерево), в то время , очевидно, дерево столь же явно не бинарное дерево.

Опять же, если вы хотите, чтобы достаточно сильно, вы можете растянуть точку, что многоходовое дерево можно представить как свой род извращенной версии бинарного дерева. Если вы хотите, вы, вероятно, можете растянуть все исключения точки говоря, что все они (по крайней мере, что-то вроде) бинарные дерева. По крайней мере, для меня, однако, все, что делает это сделать «бинарное дерево» синонимом «разделяй и властвуй». Другими словами, все, что вам выполнить это коробление словарь и по существу облитерирующий термин, это и отличный и полезный.

Ответил 22/02/2010 в 06:45
источник пользователем

голоса
2

Ответ : нет. Бинарный поиск в отсортированном массиве O(log(n)).

Ответил 22/02/2010 в 06:48
источник пользователем

голоса
0

Как O (журнал (п)) является лишь верхней границей и все О (1) алгоритмы нравится function (a, b) return a+b;удовлетворяет условие.

Но я должен согласиться все Theta (журнал (п)) алгоритмы своего рода выглядят как алгоритмы дерева или по крайней мере могут быть отведенными к дереву.

Ответил 22/02/2010 в 07:26
источник пользователем

голоса
0

Короткий ответ:

Просто потому, что алгоритм имеет журнал (п) как часть его анализа не означает, что дерево участвует. Например, следующий очень простой алгоритм, который являетсяO(log(n)

for(int i = 1; i < n; i = i * 2)
  print "hello";

Как вы можете видеть, ни одно дерево не участвовал. Джон, также обеспечивает хороший пример того, как бинарный поиск может быть сделано на отсортированном массиве. Они оба принимают O времени (журнал (п)), и есть другие примеры кода, которые могут быть созданы или ссылкой. Так что не делать предположения, основанные на асимптотической сложности времени, посмотрите на код, чтобы знать наверняка.

Больше на деревьях:

Просто потому , что алгоритм включает в себя «деревья» не подразумевает O(logn)либо. Вы должны знать тип дерева и как операция влияет на дерево.

Некоторые примеры:

  • Пример 1)

Вставка или поиск следующих несбалансированное дерево будет O(n).

введите описание изображения здесь

  • Пример 2)

Вставка или поиск следующие сбалансированные деревья будут как за счет O(log(n)).

Balanced Binary Tree:

введите описание изображения здесь

Сбалансированное Дерево степени 3:

введите описание изображения здесь

Дополнительные комментарии

Если деревья вы используете не способ «баланс» , чем есть хороший шанс , что ваши действия будут O(n)время не O(logn). Если вы используете дерева , которые являются самостоятельной балансировкой, а затем вставляет обычно занимает больше времени, так как балансировка дерев обычно происходит во время фазы вставки.

Ответил 27/04/2016 в 00:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more