Boost Graph Library Challenge and To-Do Items
- Dynamic Graph Algorithms や A Software Library of Dynamic Graph Algorithms で述べられているような動的グラフアルゴリズム。
- 先送りにしていた項目についてコード / ドキュメントを洗練し、公式レビューを通過する。
先送りにされたものとしては:
- container_traits.hpp (これは Matt Austernがこのトピックで行っている作業を含むことになるだろう)
- キュートヒープ : queue.hpp,
mutable_queue.hpp, fibonacci_heap.hpp.
どうにかして Dietmer のヒープとキューの実装をマージする。
- disjoint_sets
- 平面グラフアルゴリズム集の構築。
- そのグラフは平面か?
- "Walk around the block" および同種の開ないし閉近傍遷移(traversal)。
辺の遷移(traversal)には適切な終端および側面(以下を参照)を解決する必要があり、辺だけで済む話ではない。
- 与えられた点に対して、最も近い頂点、辺、限界ポリゴンを求める。繰り返すが、辺は左右の側面を持っているように見える。
- 与えられた線分に対して、交差する頂点、辺、限界ポリゴンを求める。
- 与えられたポリゴンに対して、交差する ... を求める。
- 様々な最小範囲矩形(minimum bounding rectangle)およびクリッピング問題。
- 平面グラフの平面埋め込みの構築(Construct a planar embedding of a planar graph)。
- グラフの平衡分離点(balanced separator)の求める。
- ユーザ定義比較オブジェクトに従って出辺が順序づけられるように adjacency_list を修正。
- Floyd-Warshall アルゴリズム。
- Qhull アルゴリズムを Boost Graph Library を用いて書き直す。
(これは非常に困難な挑戦である)。
あるいは、より御しやすい挑戦として、 Qhull のインターフェイスを BGL で書く。
Qhull は凸開包、 Delaunay 三角分割、 Vornoi ダイアグラム、
そしてに点に関する踊り場交差(halfspace intersection about poin)を求める。
Qhull は2次元、3次元、4次元、さらにそれ以上の次元で動作する。
Qhull は衝突検出、アニメーション、プレートテクトニクス、3Dモデリング、ロボットの動作プランニング、
あるいはその他の
応用 に用いられている。
現状では、これを C++ プログラムから用いるのは容易ではない。
- 現在の visitor でのアプローチに替わるアルゴリズムオブジェクトの使い方を探求する。
- まだ visitor を持っていないアルゴリズムを分析し、それらに
visitor インターフェイスを用意する。
- すべての頂点プロパティテンプレート引数が kind=vertex_property_tag を、またすべての辺プロパティテンプレート引数が kind=edge_property_tag を持つことを確実なものとするために、 adjacency_list クラスにチェック機能を追加する。
- graph_utility.hpp の出力関数がストリームを使うように整理し、すべてのユーティリティ関数を
文書化する。
乱数の類を boost random number generator に置き換える。
- test/graph.cpp のテストを適切なコンセプトに合わせてモジュール化する。
あらゆる BGL コンセプトに対するランタイムテストが確実に存在するようにする。
- BGL アルゴリズムに対するテストを書く。現在のところプログラム例が sanity check と
して用いられているが、それらは実テストを構成しているわけではない。
- Knuth の Stanford GraphBase からのプログラム例を BGL を用いて書き上げる。
examples/miles_span.cpp はその手始めである。
- グラフのサブグラフビューをサポートするクラスを作成する。サブグラフとは、ちょうどグラフと同じような
振る舞いをするが、元のグラフと頂点、辺プロパティを共有するものである。
おそらくサブグラフのサブグラフなどでさえサポートすることになるだろう。
Japanese Translation Copyright © 2003 Kent.N
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。
このドキュメントの対象: Boost Version 1.29.0
最新版ドキュメント (英語)