Вам предоставляется число, которое является корнем двоичного дерева поиска. Затем вам предоставляется массив из N элементов, которые вы должны вставить в двоичное дерево поиска. Сложность времени равна N^2, если массив находится в отсортированном порядке. Мне нужно получить одну и ту же структуру дерева в гораздо большей сложности (скажем, NlogN). Я много пробовал, но не смог его решить. Может ли кто-нибудь помочь?Создание двоичного дерева поиска с лучшей сложностью
ответ
Если вы ищете слово в словаре, вы открываете словарь примерно наполовину и смотрите на страницу. Затем вы узнаете, находится ли поисковое слово в первой или второй половине словаря. Повторите, исключая половину оставшихся слов на каждом проходе, и вы скоро сузите его до одного слова. 4 миллиарда словарей слова возьмут около 32 проходов.
Двоичное дерево поиска использует тот же принцип. Кроме того, вы также можете вставить. Вставка - это O (log N), если дерево не вырождается. Чтобы предотвратить вырождение дерева, вы используете систему «красных» и «черных» узлов (цвета просто обычные), и вы не разрешаете длинные прогоны любого цвета. Полное объяснение в моей книге, основные алгоритмы
http://www.lulu.com/spotlight/bgy1mm
Реализация здесь
https://github.com/MalcolmMcLean/babyxrc/blob/master/src/rbtree.c https://github.com/MalcolmMcLean/babyxrc/blob/master/src/rbtree.h
Но вам потребуется какое-то объяснение, если вы хотите узнать о красных черных деревьев от него.
Я предполагаю, что все числа различны (если это не так, вы можете использовать пару (число, индекс)).
Предположим, что мы хотим вставить, мы хотим вставить элемент X
. Если это самый маленький/самый большой элемент до сих пор, он ясно, где он идет.
Let's a = max y: y in tree and y < X
и . Я утверждаю, что:
Один из них является предком другого.
Либо
a
не имеет детей (b
не имеет детей).
Доказательство:
Пусть это не так. Пусть
l = lca(a, b)
. Так какa
находится в левом поддереве иb
находится в правом поддереве,a < l < b
. Противоречие.Позвольте
a
быть предкомb
. Еслиb
имеет левого ребенкаc
. Чемa < c < b
. Противоречие (другой случай обрабатывается аналогичным образом).
Таким образом, решение выглядит следующим образом:
Пусть это держать набор элементов, которые уже находятся в дереве (я имею в виду эффективный набор с работы LOWER_BOUND как
std::set
в C++ илиTreeSet
в Ява).Давайте найдем
a
иb
, как описано выше при каждом введении (вO(log N)
время, используя операцию lower_bound установочных наборов). Именно у одного из них нет соответствующего ребенка. Вот где новый элемент.
Общая вычислительная проницаемость O(N log N)
.
спасибо за ответ. Хотя я не совсем понял это, я буду работать над этим в выходные и вернуться. Благодарю. –
- 1. создание двоичного дерева поиска
- 2. Создание дерева двоичного поиска
- 3. Создание doubleTree() двоичного дерева поиска?
- 4. Создание простого двоичного дерева поиска
- 5. Создание сбалансированного дерева двоичного поиска
- 6. Создание двоичного дерева двоичного поиска в Java
- 7. Создание дерева AVL из дерева двоичного поиска
- 8. Создание двоичного дерева поиска с наименьшей глубиной
- 9. Создание двоичного дерева поиска вызывает исключение
- 10. создание двоичного дерева поиска, не обновляющего указатель
- 11. Создание нового узла для двоичного дерева поиска
- 12. Удаление двоичного дерева дерева поиска
- 13. Создание двоичного дерева поиска для кода Морзе
- 14. Вывод двоичного дерева дерева поиска
- 15. Как вы можете рассчитать глубину двоичного дерева с меньшей сложностью?
- 16. Дерево поиска с использованием двоичного дерева с использованием двоичного дерева
- 17. Сложность поиска двоичного дерева
- 18. Глубина дерева двоичного поиска
- 19. Вероятность двоичного дерева поиска
- 20. Алгоритм поиска двоичного дерева
- 21. Изучение дерева двоичного поиска
- 22. Прохождение двоичного дерева поиска
- 23. Изменение двоичного дерева поиска
- 24. Очистка дерева двоичного поиска
- 25. Балансировка двоичного дерева поиска
- 26. Вращение дерева двоичного поиска
- 27. Вставка двоичного дерева поиска
- 28. индексация двоичного дерева поиска
- 29. Схема двоичного поиска дерева
- 30. Реализация двоичного дерева поиска
Вы даже попробовали поиск? GIVEN «Отсортированный список до bst» Google дает много результатов, например. http://www.geeksforgeeks.org/sorted-linked-list-to-balanced-bst/ – Gene
@ Укажите, что вы указали, чтобы отсортировать связанный список с сбалансированным bst, что не является моим вопросом. –
@ HansSolo: вам нужно создать тот же самый компоновщик ссылок, который будет создан по наивному алгоритму, или вам просто нужно создать действующий BST? Если вам просто нужно создать действующий BST, алгоритмы для создания сбалансированного BST должны работать нормально. – user2357112