Предположим, что у меня есть дерево объектов, каждое из которых имеет строковое представление. Я хочу создать дайджест SHA1 на всем дереве.Как создать дайджест SHA1 на дереве объектов?
Самый простой способ - это рекурсивно переходить через каждый узел дерева. Для каждого узла я бы объединил (как простые строки) SHA1 дайджесты всех дочерних элементов, добавив строковое представление данного узла в эту конкатенированную строку и сделав на нем SHA1. Это будет дайджест SHA1 данного узла.
Вопрос в том, будет ли этот дайджест быть таким же «хорошим», как если бы я связал строковое представление дочерних узлов, а не дайджестов дочерних узлов?
Благодаря
Глядя на ответ Дэвида Гранта и ваш, интересно, достаточно ли использовать символ запретного разделителя, чтобы устранить неоднозначность между различными древовидными структурами. Я не думаю, что так будет. Что делать, если было 2 (или более) запрещенных символа, и они были использованы для кодирования счетчика, когда узел посещается в обход? –
Nevermind, моя схема тоже не сработает.Проблема, которую я имею в виду, например, дерево с тремя узлами, каждое из которых содержит букву «A», но одно дерево является совершенным двоичным, а другое вырождено левым. Вы хотите, чтобы у них были разные хэши, нет? –
@GregS Я думаю, что вы правы, позвольте мне изменить. – bmargulies