Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )

68 views

Published on

PGX Prim's Algorithm

Published in: Software
  • Be the first to comment

  • Be the first to like this

PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )

  1. 1. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential PGX ユーザー勉強会 #14 LT Built-in アルゴリズム (Prim's Algorithm) 2019/11/08
  2. 2. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 1 自己紹介 – 名前: 田上 悠樹 – 職業: ITエンジニア – 所属: UL Systems – 活動: PGX ユーザーグループ でのLTなど
  3. 3. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 2 PGX Built-in Algorithms – 30以上のグラフ分析用アルゴリズムを備えている Path分析, Centralities分析, Community分析 等がPGXに組み込まれており、利用可能 – Built-in アルゴリズム 一覧 [https://docs.oracle.com/cd/E56133_01/latest/reference/analytics/builtins.html ] 本日は、Prim’s Algorithmをご紹介  Cycle Detection Algorithms  Degree Centrality and variants  Degree Distribution and variants  Dijkstra's Algorithm and variants  Bidirectional Dijkstra's Algorithm (and variants)  Eccentricity Algorithms  Eigenvector Centrality  Fattest-Path  Filtered BFS  Hyperlink-Induced Topic Search  Infomap  K-Core  Label Propagation  Local Clustering Coefficient  Matrix Factorization (Gradient Descent)  PageRank and variants  Partition Conductance  Partition Modularity  Prim  Random Walk with Restart  Reachability  SALSA and variants  SSSP (Bellman Ford) and variants  SSSP (Hop Distance) and variants  Strongly Connected Components  Topological Ordering Algorithms  Triangle Counting  Vertex Betweenness Centrality and variants  Weakly Connected Components  Whom To Follow
  4. 4. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 3 Prim’s Algorithm 概要 – Summary: 無向かつ多重辺のない連結グラフにおいて、辺の重みを用いて最小全域木を導出する アルゴリズム。辺の重みに最小化したいプロパティ(距離や金額など)を設定する。 “ This implementation of Prim's algorithm works on undirected graphs that are connected and have no multi-edges (i.e. more than one edge connecting the same pair of vertices). The algorithm computes the minimum spanning tree (MST) of the graph using the weights associated to each edge. “ https://docs.oracle.com/cd/E56133_01/latest/reference/analytics/algorithms/prim.html 左のグラフが与えられたときに、全頂点を繋げる辺の重みの総和が最小の木(右のグラフ)を導出する。 もとのグラフ 最小全域木
  5. 5. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 4 Prim’s Algorithm のStep – Step: 最初にランダムに頂点を1つ選び、それを1頂点のみからなる木 ( Vnew, Enew )とみたてる。 その木(1頂点)から延びる 重みが最小の辺とその片端点を木に加える。 同様に、その木に未だ含まれていない頂点との間を結ぶ重み最小の辺とその片端点を木に加える。 これを繰り返し、全頂点が木に含まれたら終了。その木 ( Vnew, Enew )が最小全域木となる。 入力: 重み付きグラフ(頂点集合 V、辺集合 E) 出力: Vnew と Enew が最小全域木を表している。 Vnew = {x} ここで x は V の元であり、任意のノード(出発点) Enew = {} while (Vnew ≠ V) Vnew に含まれる頂点 u と 含まれない頂点 v を結ぶ重みが最小の辺 (u, v) を E から選択 (同じ重みの辺が複数あるときは、どちらを選んでも良い) v を Vnew に加える (u, v) を Enew に加える “引用 Wikipedia: https://ja.wikipedia.org/wiki/プリム法”
  6. 6. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 5 Prim’s Algorithm のStep Vnew: [4] Enew: [ ] Vnew: [4, 3, 1, 7] Enew: [E4-3, E3-1, E1-7] 橙 – 青の間で最も 短い 4-3 を選択 Start Finish Vnew: [4, 3] Enew: [E4-3 ] Vnew: [4, 3, 1] Enew: [E4-3, E3-1 ]橙 – 青の間で最も 短い 3-1 を選択 橙 – 青の間で最も 短い 1-7 を選択 4 8 6 3 1 2 5 7 4 8 6 3 1 2 5 7 4 8 6 3 1 2 5 7 4 8 6 3 1 2 5 7 4 8 6 3 1 2 5 7 以上の操作を全頂点を 覆うまで繰り返す 任意の起点として 4 を選択 (※ 重みは単純に平面上の距離)
  7. 7. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 6 (参考) Green-Marl Code: Prim’s Algorithm 最初に、起点となるノードをランダムに選択 全頂点が、最小全域木の素になる集合に含まれるまで実行 最後に、最小全域木の重みの総和を返却 マップQ から重み最小の辺をピック ※ 左記コード: https://docs.oracle.com/cd/E56133_01/latest/reference/analytics/algorithms/prim.html 起点ノード周辺(2hop先まで…!?)の辺とその重みを集めて、マップ構造 Q に格納。 key: 辺, value: 辺の重み 上でピックした辺が、最小全域木の素になる集合に含まれる頂点と、 まだ含まれていない頂点を結ぶ辺だったら、最小全域木の辺として採択。 新しい辺を採択したことに付随して、 最小全域木の素に新たに加わった頂点を起点に、 その周辺の辺を再採集して、Q に新たに格納する。 最小全域木に加入済みか否かのマーキング (processed, in_mst) を初期化
  8. 8. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 7 Demo (Prim‘s Algorithm 環状のグラフへ適用 ) – 環状(正16角形上)に頂点を配置したグラフ 重みとしては、単純に2点間の距離(平面上の距離)を設定。 もとのグラフ 最小全域木
  9. 9. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 8 Demo (Prim‘s Algorithm 環状 + 中心点のグラフへ適用 ) – 環状(正16角形上)と 中央 に頂点を配置したグラフ もとのグラフ 最小全域木 2 から 5 の頂点に関しては、都度 中央から木を伸ばすより、中央から 1本伸ばしてあとは1個隣り同士を結んだ方が最小。 6 から 12 に関しても、都度 中央から木を伸ばすより、1本延ばして あとは 1個隣り または 2個隣り同士を結んだ方が最小。 13 から 1 に関しては、3個隣り以上の相手しかいないので、都度 中央から木を伸ばしたほうが最小。
  10. 10. ULS Copyright © 2011-2019 UL Systems, Inc. All rights reserved. Proprietary & Confidential 9 まとめ – 本日は Built-in アルゴリズムの Prim's Algorithms を紹介した  メモ:  Prim’s Algorithms: 多重辺のない無向グラフにおいて、最小全域木 ( Minimum Spanning Tree )を導出するアルゴリズム。 (仮に多重辺だったとしても、多重辺の average や min を重みと解釈すれば、帰着できそう ? )  最小全域木を求めるアルゴリズム自体は、Prim法以外にもいくつか存在する。  Primのアルゴリズムの過程は、 Dijkstraの最短経路を求める過程と似た雰囲気。  辺の重みを何にするかは、問題設定次第。物理的な長さ、重量、金額 など 最小化 したいプロパティを重みとすることで、それに応じた最小全域木が求まる。

×