Как двоичное дерево тратит память при хранении в виде узлов и ссылок? - PullRequest
0 голосов
/ 02 марта 2019

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

В нем говорится, что:

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

... Этот метод хранения двоичных деревьев тратит впустую немало памяти, так как указатели будутноль (или указание на дозорного) более половины времени ...

Может кто-то продемонстрировать или объяснить, почему это происходит?

https://en.wikipedia.org/wiki/Binary_tree#Methods_for_storing_binary_trees

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Типичное двоичное представление дерева состоит из данных, связанных с узлом, и двух указателей на левое и правое поддерево соответственно.

Я думаю, что с представлением легко понять, что каждый узел тратит два указателя.Следовательно, каждое дерево из n узлов тратит на хранение всего 2 x n указателей (для указателей).

Теперь, за исключением корня, у n-1 узлов есть родительский элемент (то есть дуга или ребро).Таким образом, вы действительно используете n-1 указатели 2n, которые у вас есть (как объяснено в предыдущем абзаце).

При этом из в общей сложности 2n указателей вы всегда используете n-1.Остальные 2n - (n-1) = n+1 всегда установлены на null.Таким образом, независимо от топологии дерева, вы всегда тратите больше места на хранение указателей null, чем на хранение дуг дерева.

0 голосов
/ 02 марта 2019

Представьте себе полное двоичное дерево высотой 3. В нем 7 узлов.У 4 из них нет детей.4/7> 1 / 2.

...