Nodeオブジェクトで表される巡回グラフのような構造があります。Nodeは、スカラー値 (葉) または n>=1 Nodes (内部ノード)のリストです。
循環参照が発生する可能性があるため、すべての子ノードの HashCode() を結合する再帰 HashCode() 関数を単純に使用することはできません。無限再帰になってしまいます。
HashCode() の部分は、フラグを立てて既にアクセスしたノードを無視することで少なくとも実行できるように見えますが、Equals() の機能する効率的なアルゴリズムを考えるのに苦労しています。
驚いたことに、これに関する有用な情報は見つかりませんでしたが、多くの賢明な人々がこれらの問題を解決するための良い方法を考えたことは確かです...そうですか?
例 (python):
A = [ 1, 2, None ]; A[2] = A
B = [ 1, 2, None ]; B[2] = B
A は B と同じです。これは、まったく同じグラフを表すためです。
ところで。この質問は特定の言語を対象としているわけではありませんが、Java で説明されているNodeオブジェクトに hashCode() と equals() を実装することは、実用的な良い例です。