トポロジカル・ソート(それが目的ではないとき)

学生向け

トポロジカル・ソートを簡単に行う方法を教えてください

と訊かれました。Knuth の2.2.3を読んで実装すれば勉強になります。結果がほしいだけなら、すでに実装されているものを使いましょう。たとえば、Mathematicaなら次のようになります

必要なライブラリの読み込み

<< DiscreteMath`GraphPlot`
<< DiscreteMath`Combinatorica`

グラフを生成

g = FromOrderedPairs@{
  {9, 2}, {3, 7}, {7, 5}, {5, 8}, {8, 6},
  {4, 6}, {1, 3}, {7, 4}, {9, 5}, {2, 8}};

そして、トポロジカル・ソート

TopologicalSort@g

{1, 9, 3, 2, 7, 4, 5, 8, 6}

これだけです

せっかくなので、グラフを図示しておきましょう。そもそも、絵を描いておかないと何をやっているのかわからないでしょうし(ここでは、$TextStyle = {FontFamily -> "Helvetica", FontSize -> 18};でフォントを設定しています)

GraphPlot[g,
    "VertexStyleFunction" -> (Text[#, #] &),
    "EdgeStyleFunction" -> Automatic];

Knuthが、「興味深いプロジェクトとして、読者に残しておこう」と言う(主記憶に入らないような)大きなネットワークについては、また別の機会に書きましょう

トラックバック(0)

このブログ記事を参照しているブログ一覧: トポロジカル・ソート(それが目的ではないとき)

このブログ記事に対するトラックバックURL: http://www.unfindable.net/~yabuki/mt/mt-tb.cgi/811

コメントする


画像の中に見える文字を入力してください。

portrait

 

Translation

著書

schedule

 

2010年7月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

関連商品(Amazon)

関連サイト(Google)

アーカイブ

twitter

  •