Вопрос

Я сделал свои исследования так и Google, и не нашел никого, кто решил это раньше, или, по крайней мере, любой, кто написал об этом.

Мой вопрос, учитывая «универсальное» дерево произвольной высоты, с каждым узлом, способным иметь произвольное количество ветвей, есть ли способ однозначно (и эффективно) «отпечатков пальцев» произвольных подтяжных деревьев, начиная с «универсального» дерева дерева root, такое, что дано универсальное дерево и отпечаток пальца дерева, я могу восстановить оригинальное дерево?

Например, у меня есть «универсальное» дерево (прости мои бедные иллюстрации), представляя свою вселенную возможности:

 Root / // |   ...  ooooo (Уровень 1) / |  / |  ...................  (Уровень 2)

и т.п.

У меня также есть дерево, укорененный подметку моей вселенной

 Root / / |   oOOO /

И т.п.

Есть ли путь к «отпечатка пальца» дерева, так что дал этот отпечаток пальца, а универсальное дерево, я мог бы реконструировать?

Я думаю о чем-то вдоль линий хеша, сжатия, или, возможно, функциональной / декларативной конструкции? Big-O анализ (во времени или пространстве) - это плюс.

В качестве нами, вложенное выражение, как: {{(Root)},{(1),(2),(3)},{(2,3),(1),(4,5)}...} Представление фактических узлов, присутствующих на каждом уровне в дереве, вероятно, является действительным, но может ли оно можно сделать более эффективно?

Это было полезно?

Решение

Я бы использовал список списков, где каждый элемент в списке заявляет, сколько у вас детей:

[[2][1,2][0,0,0]]

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top