У меня есть циклическая графоподобная структура, представленная Node объектами.
Узел - это либо скалярное значение (лист), либо список из n> = 1 Узлов (внутренний узел).
Из-за возможных циклических ссылок я не могу просто использовать рекурсивную функцию HashCode (), которая объединяет HashCode () всех дочерних узлов: это может привести к бесконечной рекурсии.
Хотя часть HashCode (), по крайней мере, кажется выполнимой, помечая и игнорируя уже посещенные узлы, у меня возникают некоторые проблемы с продуманным и эффективным алгоритмом для Equals ().
К моему удивлению, я не нашел никакой полезной информации об этом, но я уверен, что многие умные люди думали о хороших способах решения этих проблем ... верно?
Пример (python):
A = [ 1, 2, None ]; A[2] = A
B = [ 1, 2, None ]; B[2] = B
A равно B, потому что оно представляет точно такой же график.
КСТАТИ. Этот вопрос не нацелен на какой-либо конкретный язык, но реализация hashCode () и equals () для описанного объекта Node в Java была бы хорошим практическим примером.