以下の概念図は、デモンストレーションのためだけのものです。ツリー内の共通のサブツリーを見つける
Abc Foo
\ / \
\ / Foo2
Bar \
/ \ Foo3
Bar2 Bar3 \
/ \ Foo4
X Y
上記のツリーには、一意の「パス」、Foo-> Bar-> Bar2-> Xがあります。このパスは、Abc-> Bar-> Bar2-> Xとは異なります。明らかに、この情報は上記の表現では失われますが、私はすべての個別のパスが保存されていると考えます。
ただし、「Bar-> Bar2-> X」のパスの一部を共有します。
私が探したり実装しようとしているアルゴリズムの目的は、この情報を集約して個々のパスを保存できないようにすることです。しかしもっと重要なのは、私はこれらの共通の道をすべて見つけようとしており、それらに重みを与えています。たとえば、上記の場合、「Bar-> Bar2-> X」に関する情報を集約し、2回起こったと言います。明らかに私はそれがすべての場合に作用するように要求しています。
そして、究極のアイデアは、「私にすべての異なる経路をFooから見せてください」という質問をすばやく聞くことができるようにすることです。この例では、Foo-> Bar-> Bar2-> Xの1つしかありません。 Foo→Bar→Bar2→Y、Foo→Bar→Bar3は存在しません。このダイアグラムは表示用です。
アイデア?
http://stackoverflow.com/questions/1685239 http://stackoverflow.com/questions/6673994 –
あなたは「ツリー」について話していますが、それらのエッジは実際に指揮されていますか?ツリー全体がどのように格納されていますか? –