私は配列を持っていて、インデックスiからjまでのすべての要素の合計を見つけるようなクエリに答える必要があります。ノードiからjへのパスに対してこのようなクエリに答えるのと同じように、 iからjまで存在する唯一の経路)。ツリー上のパスでクエリに答えるには?
LCA私はそれを線形配列に分解してセグメントツリーを使用する範囲最小クエリを使用して検索する方法を知っていますが、サムクエリに対しては変更できません。それ、どうやったら出来るの?
私は配列を持っていて、インデックスiからjまでのすべての要素の合計を見つけるようなクエリに答える必要があります。ノードiからjへのパスに対してこのようなクエリに答えるのと同じように、 iからjまで存在する唯一の経路)。ツリー上のパスでクエリに答えるには?
LCA私はそれを線形配列に分解してセグメントツリーを使用する範囲最小クエリを使用して検索する方法を知っていますが、サムクエリに対しては変更できません。それ、どうやったら出来るの?
これは処理の要件によって異なります。複雑さの制限がありますか、または昼食時に作業可能で保守可能なコードを持つことが目標ですか?
それは後者だ場合は、シンプルなアプローチを取る:
このアルゴリズムは、第1期のデータ構造の学生が容易に理解できます。 LCAの一貫性チェックでは、O(log(n)^ 2) - 悪くはないが、LCAの線形事前作業と一定時間問合せリターンの最適化はできません。
あなたが速いアルゴリズムが必要な場合は、その後、私は、各ノードはまた、その先祖の各部分和のハッシュされたリスト(例えばPython辞書)を計算するようにあなたはLCA事前作業アルゴリズムを強化することを示唆しています。これを済ませれば、LCAの一定時間計算と各部分合計の一定時間ルックアップが得られます。
あなたは何を試してみましたか?コードを貼り付けて、私のコードやロジックを簡単にデバッグすることができますか?私はすべてのコードを私に与えたくありません。かなり簡単です.. – zenwraight
@zenwraight今は論理がありません、それは私が質問で尋ねたものです。私は線形配列ではなくツリー上で距離合計クエリを求めています。 – anker
ああ、それでは、ツリー上でdfsまたはbfsを実行してから、値を配列に保存してから、合計範囲のクエリを計算する必要があるかもしれません。 – zenwraight