私にはフォレスト、つまり有向エッジがあり、サイクルがない(有向または無向)ノードがあります。頂点高さを、入力エッジがない場合は0として定義するか、高さ0の頂点に到達するために逆方向に移動するエッジの最大数を定義します。
また、ノードの平均次数は小さな定数、たとえば2程度であることも知っています。すべての頂点の高さを見つけるには、2つのアルゴリズムを考えることができます。
歩行アルゴリズム
- 入力エッジのない頂点について、とマークします。
- 各頂点について、出て行くエッジをたどり、以前の高さがより小さければ、遭遇した各頂点の高さを更新します。
フロンティアアルゴリズム
- 通過マークのない着信エッジを持つ頂点の、およびフロンティアとしてこれらをマークします。
- すべてのフロンティア頂点について、親がフロンティア以下に子を持っているかどうかを確認します。もしそうであれば、親に加え、その子の中で最大の高さがあることをマークします。親がフロンティアにいるとマークします。
- フロンティアを超えるものがなくなるまで、2を繰り返します。
私の質問:
- この問題に名前はありますか、そして最もよく知られている最速の解決策はありますか?
- 私はすべての頂点から単に上に行くことが最も速い解決策であると考える傾向があります。私は正しいですか?