GraphX Advent Calendar Day15
- 2. GraphX Advent Calendar Day15
最短経路探索
1 4
2
• 各頂点にリストを持たせる
• リストの1行目として自分のIDとその距離0を持つ
2 5
3
事前準備
{(1,0)} {(4,0)}
{(2,0)}
{(3,0)}
{(5,0)}
- 3. GraphX Advent Calendar Day15
最短経路探索
1 4
3
• 自分が持つリストを接続先頂点に送信する
2 5
3
Iteration1
{(1,0)} {(4,0)}
{(2,0)}
{(3,0)}
{(5,0)}
{(1,0)}
{(2,0)}
{(5,0)}
{(4,0)}
{(4,0)}
- 4. GraphX Advent Calendar Day15
最短経路探索
1 4
4
• 受信したリストの距離を1加算しつつ、そのリスト
を自分のリストにマージする
2 5
3
Iteration1
{(1,0)} {(4,0),(1,1)}
{(2,0),(1,1),(4,1)}
{(3,0),(2,1),(5,1)}
{(5,0),(4,1)}
- 5. GraphX Advent Calendar Day15
最短経路探索
1 4
5
• 自分が持つリストを接続先頂点に送る。
(前のIterationでメッセージを受信した頂点だけが
送信 = Pregel の仕様)
2 5
3
Iteration2
{(1,0)} {(4,0),(1,1)}
{(2,0),(1,1),(4,1)}
{(3,0),(2,1),(5,1)}
{(5,0),(4,1)}
{(2,0),(1,1),(4,1)}
{(4,0),(1,1)}
{(4,0),(1,1)}
{(5,0),(4,1)}
- 6. GraphX Advent Calendar Day15
最短経路探索
1 4
6
• 受信したリストの距離を1加算しつつ、そのリストを自分の
リストにマージする
• 既にリストにその頂点がある場合は短い方の距離を選択する
2 5
3
Iteration2
{(1,0)} {(4,0),(1,1)}
{(2,0),(1,1),(4,1)}
{(3,0),(1,2),(2,1),(4,2),(5,1)}
{(5,0),(4,1),(1,2)}
- 7. GraphX Advent Calendar Day15
最短経路探索
1 4
7
• 自分のリストを接続先頂点に送信する
2 5
3
Iteration3
{(1,0)} {(4,0),(1,1)}
{(2,0),(1,1),(4,1)}
{(3,0),(1,2),(2,1),(4,2),(5,1)}
{(5,0),(4,1),(1,2)}
{(2,0),(1,1),(4,1)} {(5,0),(4,1),(1,2)}
- 8. GraphX Advent Calendar Day15
最短経路探索
1 4
8
• 受信したリストの距離を1加算しつつ、そのリストを自分の
リストにマージする
• 既にリストにその頂点がある場合は短い方の距離を選択する
2 5
3
Iteration3
{(1,0)} {(4,0),(1,1)}
{(2,0),(1,1),(4,1)}
{(3,0),(1,2),(2,1),(4,2),(5,1)}
{(5,0),(4,1),(1,2)}
- 9. GraphX Advent Calendar Day15
最短経路探索
1 4
9
• 頂点3から見た、頂点1との距離が2になっている
ことを確認
2 5
3
結果
{(1,0)} {(4,0),(1,1)}
{(2,0),(1,1),(4,1)}
{(3,0),(1,2),(2,1),(4,2),(5,1)}
{(5,0),(4,1),(1,2)}