私は、各サブツリーに対して2つのケースがあると考えています。ルートは独立セットにあり、ルートはセットに含まれていません。ツリー内の独立した集合の数を見つけるための再帰アルゴリズムを書くにはどうすればよいですか?木はn-aryです。アルゴリズム:ツリー内の独立した集合の数を見つける方法は?
https://en.wikipedia.org/wiki/Independent_set_(graph_theory)
これは、これまで私の解決策ですが、それは正しくありません。変数parentIncludedは、現在のサブツリーの親がすでに独立セットに含まれている場合はtrueになります。したがって、現在のサブツリーのルートを独立セットに追加することはできません。 parentIncludedがfalseの場合、現在のサブツリーのルートを独立したセットに追加できます。 parentIncludedがfalseの場合は2つの場合があります。最初のケース:セットにルートを追加します。 2番目のケース:ルートを追加しないでください。
public static int numberOfIndependentSets(Binary root) {
if (root == null) {
return 1;
}
return numberOfIndependentSets(root, false) + 1;
}
private static int numberOfIndependentSets(Binary current, boolean parentIncluded) {
if (current.left == null && current.right == null) {
if (parentIncluded) {
return 0;
} else {
return 1;
}
}
int total = 0;
if (parentIncluded) {
int left = numberOfIndependentSets(current.left, false);
int right = numberOfIndependentSets(current.right, false);
total += (left + 1) * (right + 1) - 1;
} else {
// include current node
int left = numberOfIndependentSets(current.left, true);
int right = numberOfIndependentSets(current.right, true);
total = (left+1) *(right +1);
// not include current node
left = numberOfIndependentSets(current.left, false);
right = numberOfIndependentSets(current.right, false);
total += (left+1) * (right+1) -1;
}
return total;
}
@GordonLinoff独立したセットの定義については、このWikiページを参照してください。 https://en.wikipedia.org/wiki/Independent_set_(graph_theory) – jas7
各サブツリーには2つ以上のケースがあります。例えば。 'a-> b-> c-> d'という名前のツリーを、ルートとして' a'を考えてみましょう。 'a ':' {a、c}'と '{a、d} 'を含む2つの独立したセットがあります。 – Paul
純粋なグラフ理論では、木は根を持たない。それらは単なるacyclc接続のグラフです。ノードをルートとして指定することは答えを変更することはないので、ルートが存在すると仮定すると、役割を果たすと思います。 –