Your SlideShare is downloading. ×
0
Boost.Graph
入門

H.22/09/11
Egtra
Boost.勉強会 #2
自己紹介

• Egtra / 一戸優介
• Twitter: @egtra
お

• <boost/graph/adjacency_list.hpp>
    以外も少し使ったよ

• Variadic Templates使っていないよ
グラフ

• 「頂点」(vertex) と「辺」(edge)
 からなるデータ構造
グラフでないもの

• 配列・線形リンクリスト
  –
    直線(一次元)




 • 木(ツリー)
有向グラフ・無向グラフ

• 辺に向きがあるかないか
頂点と辺の操作 その1

• 変数を作る
  –
    adjacency_list<> g;
• 頂点の追加
  –
      auto u = add_vertex(g);
  –
      auto v = add_vertex(g...
頂点と辺の操作 その2

• 辺の削除
  –
    remove_edge(edge, g);
  –
    または remove_edge(u, v, g);
• 頂点の削除
  –
      remove_vertex(v, g);...
中をたどる

• auto t = vertices(g);
• BOOST_FOREACH(auto e, t)
 {
     std::cout << e << std::endl;
  }
• eはu, vと同じ型
 –
     さら...
Rangeです

• これもコンパイル・実行可能。
• std::for_each(
    boost::begin(t),
    boost::end(t),
    ……);
• t | pstade::oven::……
さらにRange (1)

• 接する頂点
• auto t = adjacent_vertices(v, g)

     v
さらにRange (2)

• 接する辺
• auto t = adjacent_edges(v, g)


        v
頂点と辺の型
• 頂点
  –
    adjacency_list<>::vertex_descriptor
  –
    またはgraph_traits<adjacency_list<>>
         ::vertex_descri...
その他読み取り関数
• 辺→両端の頂点  : source, target
• 両端の頂点→辺  : edge, edge_range
• インデックス→頂点 : vertex


• 頂点の数 : num_vertices
• 辺の数  : ...
adjacency_list (1)

• ずばり「グラフ型」(の1つ)
• Boost.Graphを使い始める最大の難関
• テンプレート引数が多い
  –
      adjacency_list<OutEdgeList, VertexLi...
adjacency_list (2)
• OutEdgeList, VertexList
  –
    頂点と辺にどんなコンテナを使うか
  –
    挿入・削除・参照などの時間が変化
  –
    削除時に記述子が無効になるか否かが変化...
扱わなかったもの

• 以下、Boost.Graphに入門したら
  きっと使う機会が出てくるでしょう
• プロパティマップ
• アルゴリズム
 –
     breadth_frst_search
 –
     depth_frst_sea...
おさらい: グラフへの操作

• 参照
  –
    辺・頂点の数
  –
    すべての辺・頂点
  –
    ある頂点から伸びる辺
  –
    ある辺に接する頂点(2つ)
• 変更
 –
     頂点を加える・取り除く
 –
 ...
JR最長片道切符

• とにかく遠回りして一番長い距離の
 切符(のルート)を求める
 –


 –
     JR路線網→グラフ!
 –


 –
     路線網をBoost.Graphで表現
 –
     →総当たりする
力尽きたよ……

• 北海道の路線を打ち込んだところで
 ギブアップ
ついでなんで運賃を
なぜBoost.Graph?

• イテレータでのアクセスがある
  –
    辺・頂点
  –
    一部はpair<iter, iter>
     – Rangeだ!



• malloc/for→STL(コンテナ/アルゴリズム)
...
Boost.Graph入門
Upcoming SlideShare
Loading in...5
×

Boost.Graph入門

3,757

Published on

Boost.勉強会 #2のときに使用したスライドです。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,757
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Boost.Graph入門"

  1. 1. Boost.Graph 入門 H.22/09/11 Egtra Boost.勉強会 #2
  2. 2. 自己紹介 • Egtra / 一戸優介 • Twitter: @egtra
  3. 3. お • <boost/graph/adjacency_list.hpp> 以外も少し使ったよ • Variadic Templates使っていないよ
  4. 4. グラフ • 「頂点」(vertex) と「辺」(edge) からなるデータ構造
  5. 5. グラフでないもの • 配列・線形リンクリスト – 直線(一次元) • 木(ツリー)
  6. 6. 有向グラフ・無向グラフ • 辺に向きがあるかないか
  7. 7. 頂点と辺の操作 その1 • 変数を作る – adjacency_list<> g; • 頂点の追加 – auto u = add_vertex(g); – auto v = add_vertex(g); • 辺の追加 – auto result = add_edge(u, v, g); – auto edge = result.frst;
  8. 8. 頂点と辺の操作 その2 • 辺の削除 – remove_edge(edge, g); – または remove_edge(u, v, g); • 頂点の削除 – remove_vertex(v, g); • すべて削除 – g.clear();
  9. 9. 中をたどる • auto t = vertices(g); • BOOST_FOREACH(auto e, t) { std::cout << e << std::endl; } • eはu, vと同じ型 – さらに、この例では整数型(必ずではな い)
  10. 10. Rangeです • これもコンパイル・実行可能。 • std::for_each( boost::begin(t), boost::end(t), ……); • t | pstade::oven::……
  11. 11. さらにRange (1) • 接する頂点 • auto t = adjacent_vertices(v, g) v
  12. 12. さらにRange (2) • 接する辺 • auto t = adjacent_edges(v, g) v
  13. 13. 頂点と辺の型 • 頂点 – adjacency_list<>::vertex_descriptor – またはgraph_traits<adjacency_list<>> ::vertex_descriptor • 辺 – adjacency_list<>::edge_descriptor – またはgraph_traits<adjacency_list<>> ::edge_descriptor
  14. 14. その他読み取り関数 • 辺→両端の頂点 : source, target • 両端の頂点→辺 : edge, edge_range • インデックス→頂点 : vertex • 頂点の数 : num_vertices • 辺の数 : num_edges • すべての辺 : edges
  15. 15. adjacency_list (1) • ずばり「グラフ型」(の1つ) • Boost.Graphを使い始める最大の難関 • テンプレート引数が多い – adjacency_list<OutEdgeList, VertexList, Directed, Vertex Properties, EdgeProperties, GraphProperties, EdgeList> – ドキュメント見る気がなくなる
  16. 16. adjacency_list (2) • OutEdgeList, VertexList – 頂点と辺にどんなコンテナを使うか – 挿入・削除・参照などの時間が変化 – 削除時に記述子が無効になるか否かが変化 • Directed – 有向グラフか無向グラフか • 残りのテンプレート引数 – 入門の入門では扱いません
  17. 17. 扱わなかったもの • 以下、Boost.Graphに入門したら きっと使う機会が出てくるでしょう • プロパティマップ • アルゴリズム – breadth_frst_search – depth_frst_search – Etc…… • Graphviz形式入出力
  18. 18. おさらい: グラフへの操作 • 参照 – 辺・頂点の数 – すべての辺・頂点 – ある頂点から伸びる辺 – ある辺に接する頂点(2つ) • 変更 – 頂点を加える・取り除く – 辺を加える・取り除く
  19. 19. JR最長片道切符 • とにかく遠回りして一番長い距離の 切符(のルート)を求める – – JR路線網→グラフ! – – 路線網をBoost.Graphで表現 – →総当たりする
  20. 20. 力尽きたよ…… • 北海道の路線を打ち込んだところで ギブアップ
  21. 21. ついでなんで運賃を
  22. 22. なぜBoost.Graph? • イテレータでのアクセスがある – 辺・頂点 – 一部はpair<iter, iter> – Rangeだ! • malloc/for→STL(コンテナ/アルゴリズム) – のような
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×