В чем преимущества хранения всех элементов в листовых узлах?

Я читаю Расширенные структуры данных Питера Брасса.

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

Каковы преимущества второй модели по сравнению с первой?

Ответы

Ответ 1

Одним из больших преимуществ двоичного дерева, в котором данные находятся только в листовых узлах, является то, что вы можете разбивать на основе элементов, которые не находятся в вашем наборе данных.

Например, если у меня есть возможный набор данных, равный 0-1 миллионам, но подавляющее большинство предметов находятся либо в верхнем, либо в нижнем конце, но не в середине, я могу по-прежнему хотеть, чтобы мой первый сопоставил с 500 000 - даже хотя этого номера нет в моем наборе данных. Если бы у каждого node были данные, я бы не смог этого сделать. Хотя в теории, как правило, не требуется теоретически, во многих случаях я столкнулся с тем, что разбиение на основе значения, отличного от моей упрощенной реализации данных.

Ответ 2

Деревья

B + - это пример случая, когда все ключи/значения хранятся в листовых узлах. Основное преимущество здесь состоит в том, что, поскольку все элементы находятся в листовых узлах, листовые узлы могут быть связаны друг с другом, образуя связанный список, который позволяет быстро обходить порядок. Если вы обращаетесь к определенному элементу, вы всегда можете найти следующий элемент в последовательности, не посещая никаких родителей, потому что листовые узлы связаны друг с другом. Файловые системы и системы хранения данных могут использовать эти структуры для поиска диапазона и т.д.

Ответ 3

Предположим, вы строите дерево над некоторыми объектами по некоторым сложным критериям. На пример вычислено из нескольких свойств. Иногда вы не можете изменить этот объект для хранения расчетного значения, и вычисление этого критерия является экспансивным. Таким образом, вы вычисляете этот критерий только один раз и храните объекты в листах на основе результата критериев. Затем, когда ваше дерево завершено, вы можете найти требуемый объект намного быстрее, потому что вам не нужно вычислять критерии для каждого дерева node на вашем пути.

Ответ 4

хорошо сохраняя информационные объекты в узлах, мы говорим в этом случае о trie, полезно для быстрого извлечения информации (быстрее, чем хранение материала в массиве/хэш-таблице, где наихудший случай auf acces - это O (n), в trie это O (m) [m - длина n])

смотрите здесь: https://en.wikipedia.org/wiki/Trie

В дереве поиска это может быть намного сложнее (посмотрите AVL Tree O (log n)), и поэтому может быть медленнее и более полно реализовать.

Какую структуру данных выбрать? Ну, это зависит от того, что вы хотите делать