GraphX Advent Calendar Day15
最短経路探索
1 4
1
• この例だと、頂点1から頂点3へのルートは3つあ
るが、最短は1→2→3の距離2。
2
5
3
GraphX Advent Calendar Day15
最短経路探索
1 4
2
• 各頂点にリストを持たせる
• リストの1行目として自分のIDとその距離0を持つ
2 5
3
事前準備
{(1,0)} {(4,0)}
{(2,0)}
{(3,0)}
{(5,0)}
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)}
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)}
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)}
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)}
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)}
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)}
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)}

GraphX Advent Calendar Day15

  • 1.
    GraphX Advent CalendarDay15 最短経路探索 1 4 1 • この例だと、頂点1から頂点3へのルートは3つあ るが、最短は1→2→3の距離2。 2 5 3
  • 2.
    GraphX Advent CalendarDay15 最短経路探索 1 4 2 • 各頂点にリストを持たせる • リストの1行目として自分のIDとその距離0を持つ 2 5 3 事前準備 {(1,0)} {(4,0)} {(2,0)} {(3,0)} {(5,0)}
  • 3.
    GraphX Advent CalendarDay15 最短経路探索 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 CalendarDay15 最短経路探索 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 CalendarDay15 最短経路探索 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 CalendarDay15 最短経路探索 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 CalendarDay15 最短経路探索 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 CalendarDay15 最短経路探索 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 CalendarDay15 最短経路探索 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)}