質問

各ノードに座っている整数を持つバイナリツリーを与えられているとします。私は根からのあらゆる経路からすべての可能な製品へのすべての経路を省略して、省略されたすべての製品を除外する効率的な方法を探しています。私は部門のない解決策を探しています(すなわち整数はゼロになることができます)。

これについて行く1つの方法は 私はルートから始まるすべての可能な部分的な製品を計算することができます。つまり、各ノードは、このノードのルートアップから一意のパスの積を格納します(ただし、その特定の値に格納されている整数を除く)。次に、各リーフノードに対して、整数の整数を乗算するルートノードへのパスを入れることができます。積にノードを蓄積する前に特定のノードで、積に保存されている接頭辞製品に搭載することができます。

これらの経路が多くのノードを共有する可能性があるため、葉から根への各経路を訪れる際には、たくさんの冗長乗算をしているように感じます。これを行うためのより速い方法はありますか?

役に立ちましたか?

解決

1つの簡単な方法:内部ノード $ x $ の場合、 $ p(x)$ ルートから $ x $ から整数の整数の積を表し、 $ q(x)$ < / SPAN>ルートから $ x $ のパス上の整数の1つの積として得られる整数のセットを表します。さて、ツリーをrootから葉まで降下させ、 $ p(x)$ 、および $ Q(x)各ノード $ x $ の$ $ p(x)、q(x)$ を計算することができます $ p(w)、q(w) $ w $ は、 $ x $ の親です。

漸近的な最悪の走行時間は $ O(n ^ 2)$ になります。 $ \ theta(n ^ 2)$ が出力する必要があるさまざまな商品、どんな正しいアルゴリズムでもよいため、アルゴリズムは良くなっていません。少なくとも $ \ theta(n ^ 2)$

の間で最悪の走行時間が必要になる必要があります。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top