有向グラフ (具体的には制御フロー グラフ) があり、各頂点には一連のプロパティがあります。
V
プロパティ を持つ頂点が与えられた場合、可能なパスに沿ったすべての頂点がプロパティを含むようP
に、頂点への最長パスを見つけるアルゴリズムを見つけたい (または書きたい) と思います。E
all
V
E
P
例 1
次のグラフがあるとします。(アスキーでの描画が下手なのはご容赦ください。)
+----+
+--------+P +--------+
| +----+ |
| V1 |
| |
| |
+--v--+ |
+----+P ++ |
| +-----++ +--v--+
| | +----+P |
| | | +-----+
+--v--+ +--v--+ |
|P +-+ +-+P | |
+-----+ | | +-----+ |
| | |
| | |
+v-v--+ |
V6 |P +---------+ |
+-----+ | |
| |
| |
| |
| |
+-v--v-+
V7 |P |
+---+--+
|
|
+---v--+
V8 |!P |
+------+
から始まり、可能なすべてのパスで常に保持されるV1
最長パスは->です。他のパス、たとえば->は、常に有効であるという点で「有効」ですが、 ->が最も長いことに注意してください。P
V1
V7
V1
V6
P
V1
V7
例 2
P
この例は、が保持されないことを除いて、上記と同じV3
です。
+----+
+--------+P +--------+
| +----+ |
| V1 |
| |
| |
+--v--+ |
+----+P ++ |
| +-----++ +--v--+
| | +----+!P | V3
| | | +-----+
+--v--+ +--v--+ |
|P +-+ +-+P | |
+-----+ | | +-----+ |
| | |
| | |
+v-v--+ |
V6 |P +---------+ |
+-----+ | |
| |
| |
| |
| |
+-v--v-+
V7 |P |
+---+--+
|
|
+---v--+
V8 |!P |
+------+
この場合、 から始まり、すべての可能なパスで常に保持されるV1
最長パスは->です。パス->は有効ではありません。と の間にが保持されないパスがあるためです。P
V1
V6
V1
V7
V1
V7
P
私の状況に関する追加メモ
- グラフは周期的である可能性があります。
- グラフは「小から中」のサイズで、おそらく 1000 個以下の頂点になります。
- 上記の例のように、グラフには必ずしも 1 つのルートと 1 つのリーフがあるとは限りません。
質問
そのようなパスを計算するための標準アルゴリズムはありますか?