ツリー内の任意の2つのノード間のパスを計算したい(Javaで実装されている)。 文献にはどのような解決策がありますか?ツリー内の2つのノード間のパスの長さを調べる方法は?
答えて
10(root)
/\
8 11
/\ \
7 9 15
距離(7、9)=
2我々は計算することができ、距離(ルート、7)= 2、及び計算距離(ルート:
はこのようなものであるべき、9)= 2、LCA(7,9)= 8。LCAは「最も低い共通祖先」を表します。したがって、distance(7, 9) = distance(root, 7) + distance(root, 9) - 2*distance(root, LCA) = 2 + 2 - 2*1 = 2
これでメソッドを見ることができます。あなたの本当の問題は、距離(ルート、anyNode)の計算方法です。これは一般的な質問です。私はあなたがすぐに任意のノードへの距離を見つける方法を見つけることができると仮定します。
入力がdist(11,15)の場合はどうなりますか?私の木は任意でバイナリではないので、結果は1になります。しかし、dist(root、11)= 1 + dist(root、15)= 2 -2 * dist(root、lca)= 0 ... so 3。これはもちろん間違っています。どのようにこの問題に対処するには?あるいは、この場合のlcaは11そのものでしょうか? – user840718
はい! dist(root、11)+ dist(root、15) - 2 * LCA(root、LCA)= 1 + 2 - 2 * 1 = 1 LCAは11です。その「最も低い共通祖先」を見つけようとするときは、常にルートから始めます。したがって、node11のパスは10-11であり、node15のパスは10-11-15なので、LCAは11です。 –
共通の祖先を使用して、ツリー内の2つのノード間の距離を計算できます。
Dist(n1, n2) = Dist(root, n1) + Dist(root, n2) - 2*Dist(root, lca)
そして最も共通の祖先を見つける方法は、ルートからn1とn2のそれぞれのパスを比較することです。共有パス上の最後のノードはLCAです。 –
- 1. ノードwがツリー内のノードuとノードvの間のパスにあるかどうかを調べる方法は?
- 2. ツリー内の子ノードへのパスを計算する方法は?
- 3. ツリー内の子ノードの最大数を調べる
- 4. 2つのノードが同じツリー/グラフの一部であるかどうかを調べる方法は?
- 5. ツリー内のノードのすべての親ノードを見つける
- 6. 2つのタイムスタンプの間の日と分を調べる方法
- 7. 2つのノード間のすべてのパスのCypher
- 8. ツリー内の2つのランダムなノード間の距離を決定する
- 9. ジェネリックロガー関数のchar *の長さを調べる方法は?
- 10. Rの文字列の長さを調べる方法は?
- 11. 週2日の間の日数を調べる方法は?
- 12. ツリー内の各ノードへのパスを再帰的に構築する方法 - JavaScript?
- 13. 各ノードのBST内の最長パス
- 14. これら2つのダブルリンクリストアルゴリズムの空間と時間の複雑さを調べる方法は?
- 15. グラフ内の2つのノード間の距離を維持する方法は? C++
- 16. postgres関数のvarcharパラメータの長さを調べる方法
- 17. 2つの画像のメトリクス値を調べる方法は?
- 18. 「ツリー内の最長パス」を見つけるには、次の方法が正しいですか?
- 19. N個のノードを持つグラフの長さ2の最大パス数
- 20. OWLオントロジ内の2つのノード間のすべてのパスを検索するクエリ
- 21. 単一ツリー内のノードからのパスを再編成する
- 22. Rの2つのデータフレームの間で変更される行の数を調べる方法は?
- 23. Neo4j:パス内のノードからノードを追加する方法は?
- 24. 文字列の長さを調べる方法
- 25. JSONオブジェクトの長さを調べる方法
- 26. Neo4j最大の長さを指定しないで2つのノード間の単純なパス
- 27. 基底のプロパティパスを知らないで、Dbpediaグラフネットワークの2つのノード間のパス長を見つけよう
- 28. ディクテーションでツリーの最初のノードを見つける方法は?
- 29. 2つの頂点の間の最長のパス
- 30. ツリー内のノード数を計算する方法は?
これは、データ構造、コード内のツリーの表現方法によって異なります。 –