ternery search tree требует O (log (n) + k) сравнения, где n - количество строк, а k - длина строки для поиска, а для дерева двоичного поиска требуется log (n) сравнения, тогда почему TST быстрее, чем BST ?Что происходит быстрее, тройное дерево поиска или двоичное дерево поиска?
ответ
Поскольку в тройном случае это войти (п), где в двоичном случае это войти (п).
Тройные деревья поиска специально предназначены для хранения строк, поэтому в нашем анализе необходимо учитывать, что каждый сохраненный элемент представляет собой строку с некоторой длиной. Предположим, что длина самой длинной строки в структуре данных равна L и что n целых строк.
Вы правы, что дерево двоичного поиска производит только сравнения O (log n) при выполнении поиска. Однако, поскольку элементы, хранящиеся в дереве, представляют собой все строки, для каждого из этих сравнений требуется время O (L) для завершения. Следовательно, фактическое время выполнения поиска с двоичным деревом поиска в этом случае будет O (L log n), так как существует сравнение O (log n), сравнивающее время O (L) каждого.
Теперь рассмотрим тройное дерево поиска. При стандартной реализации TST для каждого символа входной строки для поиска вверх мы делаем поиск BST, чтобы найти дерево, с которого можно спуститься. Это занимает время O (log n), и мы делаем это L раз для общей продолжительности выполнения O (L log n), сопоставляя время поиска BST. Тем не менее, вы можете на самом деле улучшить это, заменив стандартные BST в тройном дереве поиска на weight-balanced trees, вес которого определяется количеством строк в каждом поддереве, более тщательный анализ может быть использован, чтобы показать, что общая продолжительность выполнения для lookup будет O (L + log n), что значительно быстрее, чем стандартный поиск BST.
Надеюсь, это поможет!
- 1. Двоичное дерево/двоичное дерево поиска
- 2. Двоичное дерево поиска поиска
- 3. Двоичное дерево поиска поиска:
- 4. Двоичное дерево в двоичное дерево поиска (BST)
- 5. Тройное дерево поиска - Итеративный обход
- 6. Проверка орфографии: Тройное дерево поиска
- 7. Двоичное дерево поиска (функция поиска)
- 8. Двоичное дерево поиска слева.
- 9. Двоичное дерево поиска Пояснение
- 10. Двоичное дерево поиска строк
- 11. Двоичное дерево поиска - отсортировано?
- 12. Двоичное дерево поиска? Алгоритм
- 13. Двоичное дерево поиска
- 14. Двоичное дерево поиска - Вставить
- 15. двоичное дерево поиска bst
- 16. Двоичное дерево поиска toString
- 17. Двоичное дерево поиска Haskell
- 18. Двоичное дерево поиска?
- 19. C++ двоичное дерево поиска
- 20. Двоичное дерево поиска: Вставка
- 21. python двоичное дерево поиска
- 22. Двоичное дерево поиска - вставка
- 23. Двоичное дерево поиска, высота
- 24. Двоичное дерево поиска C++
- 25. Сбалансированное двоичное дерево поиска
- 26. Почему двоичное дерево поиска?
- 27. Двоичное дерево поиска delete
- 28. Двоичное дерево поиска Удалить
- 29. Двоичное дерево поиска - PrintInOrder();
- 30. Двоичное дерево поиска C++
-1, извините. Тройное дерево поиска не находит элемент в log₃ (* n *) времени. log₃ (* n *) время - это то, что вы получили бы, если бы у вас было какое-то гипотетическое троичное дерево, где у каждого из трех детей была одна треть потомков; но в * [тройном дереве поиска] (http://en.wikipedia.org/wiki/Ternary_search_tree) * средний ребенок обычно имеет лишь очень небольшую долю потомков. – ruakh