質問

を探してい単純なアルゴリズムをserialize"を指向グラフで表示します。特にがんセットのファイルの相互依存関係を、実行順序とを見つけていきたいのが正しい順序でコンパイルす。知っていなければならないということをコンパイラですべての時間が私のgoogle-fuは弱い動きとなっています。何'に'アルゴリズムです。

役に立ちましたか?

解決

トポロジカルソー (Wikipediaより):

グラフ理論、位相、振り分け トポロジカル秩序の監督 非グラフ(DAG)は、線形 ご注文のノードはそれぞれ ノードに対してすべてのノードにする このウエッジ.毎DAGは 一つ以上のトポロジカルひとつに違いありません。

擬似コード:

L ← Empty list where we put the sorted elements
Q ← Set of all nodes with no incoming edges
while Q is non-empty do
    remove a node n from Q
    insert n into L
    for each node m with an edge e from n to m do
        remove edge e from the graph
        if m has no other incoming edges then
            insert m into Q
if graph has edges then
    output error message (graph has a cycle)
else 
    output message (proposed topologically sorted order: L)

他のヒント

を参考にして設定ツールを必要とすることで歩くツリーを、深さ優先の方が予約なら、世界最大のオンラインの葉で処理します(例えばコンパイル)を削除してからグラフ(マークとして処理され、処理ノードのすべての葉として処理する光景が見られる。

どこの結果、この単純なスタックに基づく歩きているものと考えられる。

場合、グラフサイクルが含まれ、どのように存在する可執行命令のためのファイル?そういうものでやってみようとした場合、グラフサイクルが含まれ、そして解決し、この 報告されて正常に上記のアルゴリズムです。

私たちはかなりナイーブ再帰的アルゴリズム(擬似コード):

Map<Object, List<Object>> source; // map of each object to its dependency list
List<Object> dest; // destination list

function resolve(a):
    if (dest.contains(a)) return;
    foreach (b in source[a]):
        resolve(b);
    dest.add(a);

foreach (a in source):
    resolve(a);

最大の問題はないとしている能力を検出状依存関係で対応できるように無限再帰(スタックオーバーフロー;-p).みがいきいフリップの再帰的アルゴリズムにinterativeつマニュアルスタック、手動でチェックのスタックを繰り返します。

誰もいいですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top