Я пытаюсь создать дерево из источника, который обеспечивает: 2 узла, которые будут добавлены к дереву, и узел, который должен добавить эти 2 новостных узла. Чтобы найти, где этот узел находится в дереве, я использовал обход ордера, который принимает O (n). Поэтому, если в дереве было добавлено n количество узлов, будет создано все дерево O (n^2). Мое ограничение состоит в том, что для создания дерева требуется только O (n).Сложность времени создания двоичного дерева
ответ
Вы можете хранить ссылки на каждый узел дерева в HashMap [1], чтобы получить доступ к каждому узлу вместо O(log(n))
, который является типичным для деревьев. Это позволило бы построить дерево в O(n)
времени, потому что этот HashMap позволяет вам перейти непосредственно к узлу вместо того, чтобы пересекать его из корневого узла дерева.
[1] Ключ был бы тем, что использует источник для однозначной идентификации узлов (я предполагаю, что это целое число или строка). Значение будет ссылкой на узел в дереве. Обратите внимание, что реализация дерева должна сделать все ее узлы общедоступными, поэтому вам, вероятно, потребуется написать дерево самостоятельно или найти подходящую библиотеку (деревья JDK, такие как TreeMap, сохраняют свою внутреннюю структуру конфиденциальной, поэтому они не будут ее обрезать).
, в то время как это решит вопрос, возникает другой вопрос: почему бы просто не хранить данные в HashMap в точке и полностью отказаться от дерева. – twain249
twain249: True. Если это домашнее задание, я сомневаюсь, что есть какая-то настоящая причина использовать дерево, кроме того, что говорится в задании. :) Одна из реалистичных (но редких) причин, по которой я мог бы придумать, - это то, что системе необходимо быстро восстановить свое состояние из файла после перезапуска (таким образом, время запуска O (n)), и при нормальной работе система имеет строгий худший случай (таким образом, амортизационная карта хэш-карты O (1) неприемлема, но требуется предсказуемое значение O (log (n)) дерева). –
Слова ** O (1) амортизированное время с учетом совершенной хэш-функции ** или 'O (1) average' должны появляться более в основном в этом ответе :-) –
Поиск уровня узла в двоичном дереве равен O(log(n))
, потому что дерево имеет log(n)
уровней (каждый уровень занимает в два раза больше уровня выше). Поэтому для создания/вставки n
элементов в двоичное дерево это O(nlog(n))
.
для сложности двоичного дерева поиска будет O (nlogn), когда элементы не отсортированы и отсортированы, это займет O (n^2). Это связано с тем, что для вставки одного элемента в отсортированный список в BST O (n) время берется так для n элементов O (n^2) и для сбалансированного или почти сбалансированного дерева двоичного поиска максимальное время для вставки logn так для n элементов это nlogn
- 1. Сложность времени пересечения дерева дерева InOrder двоичного дерева O (n)?
- 2. Сложность времени прохождения порядка двоичного дерева
- 3. Сложность поиска двоичного дерева
- 4. Общая сложность преобразования двоичного дерева
- 5. Асимптотическая сложность построения двоичного дерева
- 6. Временная сложность двоичного дерева поиска Метод вставки
- 7. временная сложность двоичного дерева для преобразования DLL
- 8. Space/Временная сложность двоичного дерева равенства
- 9. Сложность времени приращения двоичного счетчика?
- 10. Сложность Построение двоичного дерева из массива
- 11. GATE 2008: временная сложность дерева двоичного поиска
- 12. Амортизированная сложность сбалансированного дерева двоичного поиска
- 13. время сложность сбалансированного двоичного кода дерева
- 14. Эффективность времени обхода двоичного дерева
- 15. Сложность времени создания минимального остовного дерева, если известно количество ребер
- 16. Сложность времени в BST
- 17. Сложность времени создания пузыря сортировки
- 18. Сложность времени выполнения двоичного поиска массива
- 19. Можем ли мы сократить временную сложность для построения двоичного дерева?
- 20. Временная сложность построения двоичного дерева от обхода порядка и предзаказов
- 21. Что такое временная сложность рекурсивного обхода порядка двоичного дерева
- 22. Альтернативный метод для создания двоичного дерева?
- 23. Способ создания словаря двоичного дерева в java
- 24. Вход для создания сбалансированного дерева двоичного поиска
- 25. Загрузить из CSV для создания двоичного дерева
- 26. Балансировка двоичного дерева (AVL)
- 27. Сложность времени вставки дерева RB внутри петли
- 28. Сложность времени makeEmpty() дерева splay сверху вниз
- 29. Перемещение двоичного дерева двоичного дерева Java рекурсивно
- 30. Вопросы двоичного дерева
Я действительно не вижу, как можно добавить n узлов в двоичное дерево один за другим меньше, чем 'O (n log n)'. Кажется, что что-то не хватает в вашем описании. Также я предполагаю, что это домашняя работа, поэтому вы должны добавить правильные метки. – Voo
Зачем вам нужен обход, чтобы найти нужное место в дереве? Узлы должны быть расположены таким образом, чтобы вы могли найти данный узел в среднем времени O (log (n)). Если у вас нет такой договоренности, возможно, двоичное дерево не является правильной структурой для ваших данных. – Gigatron