Разница между деревьями и деревьями? - PullRequest
47 голосов
/ 19 января 2011

Я удаленно помню, что при попытках не сохраняются все данные на узел, только суффикс к родительскому узлу.

Где деревья хранят целые данные, но организуются только на основе префикса.

Так что попытки становятся меньше, что позволяет, например, очень хорошо сжимать словари.

Разве это единственная разница?

Из реальных приложений я помню, что попытки выполняются быстрее в запросах диапазона. Есть даже специальные поля solr / lucene trie для ускорения запросов диапазона. Но как это так?

В чем заключается реальная разница, и каковы преимущества и недостатки попыток и деревьев?

Ответы [ 3 ]

59 голосов
/ 19 января 2011

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

Каждый вид дерева имеет свое назначение, структуру и поведение. Например, двоичное дерево хранит коллекцию сопоставимых элементов (например, чисел). Поэтому его можно использовать для хранения набора чисел или для индексации других данных, которые могут быть представлены числами (например, объекты, которые можно хэшировать). Его структура отсортирована, поэтому его можно быстро найти, чтобы найти один элемент. Другие древовидные структуры, такие как сбалансированное дерево, в принципе похожи.

A trie представляет последовательность в своей структуре. Он сильно отличается тем, что хранит последовательности значений, а не отдельные значения. Каждый уровень рекурсии говорит: «Какова ценность элемента I списка ввода». Это отличается от двоичного дерева, которое сравнивает одно искомое значение с каждым узлом.

4 голосов
/ 05 апреля 2017

A двоичное дерево или bst обычно используется для хранения числовых значений. Временная сложность в bst составляет O (log (n)) для вставки, удаления и поиска. Каждый узел в двоичном дереве имеет не более 2 дочерних узлов.

Trie : Каждый узел Trie состоит из нескольких ветвей. Каждая ветвь представляет возможный символ ключей. Нам нужно пометить последний узел каждого ключа как листовой узел. Значение поля трехэлементного узла будет использоваться для различения узла как конечного узла (существуют другие варианты использования поля значения)

Чтобы узнать о попытках, обратитесь к этому руководству по topcoder. https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/

2 голосов
/ 10 сентября 2018

Только что получил некоторые сведения из этого разговора , даже через дерево Radix, используемое в ядре Linux, немного отличается от того, что в Википедии.

Деревья хранят только ключи, онине сохраняйте значение, связанное с ключами.

...