私は2本の木を持っています。ツリー ノードは次のように定義されます。
class Node{
String treeId;
String type; //Each node has type which has fixed value. For example, its color: RED, BLANK, GREEN
Set<Node> children;
String ref; //The ref is a string and allowed value are "0", "1",..."10". The value is null if it is not leaf.
};
リーフの場合、子セットは空です。
与えられた 2 つのツリーの同等のサブツリーを識別する方法が既に効率的に実行されているかどうか疑問に思っています。同等のものは次のように定義されます。
1) Both subtree leaves are setsets leaves of original tree.
2) Both subtrees leaves have same ref value.
3) for non-leaves node, the equivalent refers to both node have same type and equivalent children.
ありがとう。この問題に対処するJavaライブラリがあればもっと良いでしょう。
入力は 2 つのツリー ルートである必要があり、出力は同等のサブツリーのルートであるノードです。ツリーの高さは 100 ~ で、500 以上のノードがあります。
私が今やったことは、クラス Node の新しいフィールドを追加したことです。
class Cache{
Map<String, Set<String>> map = new LinkedHashMap<String, Set<Str>>();
}
マップのキーはノード ID で、値はこのノード ID のこのノードが到達できる参照セットです。ノードの初期化時に開始されるキャッシュ。
isEquivalent 比較フェーズ中に、2 つのルートの参照セット間にオーバーラップが存在するかどうかを確認します。存在しない場合は false を返します。
これにより、比較スペースの数を減らすことができると思います。