MySQL5.0.41 でストアド・プロシージャを試す(その3)

さて、昨晩のつづき。ノード数 10、エッジ数 20 でやってみて、手作業でやった結果と比較してみるとしよう。

以下のような SQL を実行する。

TRUNCATE TABLE numSequence; -- numSequence テーブルを空にする

CALL makeNumSeq(10); -- numSequence テーブルに 1〜10 までの連番を書き込む

TRUNCATE TABLE nodes; -- nodes テーブルを空にする

INSERT INTO nodes (id,name) SELECT n AS id,'' AS name FROM numSequence; -- nodes テーブルに id=1〜10 までの値を入れる

TRUNCATE TABLE edges; -- edges テーブルを空にする

INSERT INTO edges (head,tail)
  SELECT a.id AS head,b.id AS tail
  FROM nodes a,nodes b
  WHERE a.id!=b.id
  ORDER BY RAND()
  LIMIT 20; -- 20 個のエッジをランダムに登録する

TRUNCATE TABLE paths; -- paths テーブルを空にする

CALL shortestPath(); -- 各ノード間の最短距離を計算して paths テーブルに書き込む

SELECT * FROM paths ORDER BY startNode,endNode; -- 各ノード間の距離を一覧表にして出力する


結果はこうなった。




今回ランダムに生成された 20本のエッジはこんな具合になっている。



図(グラフ)に表すとこうなる(エッジには向きがあるので有向グラフとなる)。



上のテーブルにある最短距離の計算結果をグラフ上で確認してみたが、確かに合っているようだ。