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本のエッジはこんな具合になっている。
図(グラフ)に表すとこうなる(エッジには向きがあるので有向グラフとなる)。
上のテーブルにある最短距離の計算結果をグラフ上で確認してみたが、確かに合っているようだ。