一つの正確なアルゴリズムは、このよう葉から
スタートで、(実際にはすべてがK1ている)、各段階で、この葉の親を見つけ、それぞれのステップで、新しいツリーにマージ互いに素グラフを作成しますノードx
がr
の既知の子であり、ノードの次数がj = r+1
である場合、x
の子ノードに存在しないノードは、現在のノードの親ノードであり、この場合、ノードx
はnice
であり、そうでなければ、この場合、ノードx
はbad
となります。
nice
ノードを関連する親ノードに接続します。それぞれのステップでは、各ステップでも少なくとも1つの素敵なノードがあります(リーフから開始するため)sum of {degree of parent nice nodes}
がわかります。アルゴリズムはO(n)それは完全に行われますが、削除すべきノードを見つけるために、実際には各ステップで二重点リスト(サブツリーリスト)のサイズを確認する必要があります。これは構築中のO(1)で行うことができます。リストのサイズがn/2以上であれば、関連するniceノードを選択します。 (実際には、この条件を満たす最小限のリストで素敵なノードを見つける)。
明らかに、ツリーを良い方法で分割することができれば(各部分には最大でn/2ノードあります)、このアルゴリズムで行うことができますが、そうでない場合は実際には2つに分割できませんまたはn/2より小さいサイズの部分)、これは良い近似を与えます。また、あなたが見ることができるように、入力ツリーには仮定がありません。
注:1つのノードを削除することで、n/2より小さいサイズのいくつかの部分に分割することは不可能なようなツリーを持つことはできません。
「H」を削除すると、9個のサブツリーが得られます。 – Shahbaz
はいここではわかりませんが、私は多くのサブツリーを得ることができますが、私はグラフの半分よりも大きくしたいわけではありません。 – Listing
さらにもう1つ、「ツリーをできるだけ均等に分割する」を計算可能な値にするにはどうすればよいですか? – Shahbaz