最小費用流問題を扱うライブラリです。
graph = MinCostFlow.new(10)
n頂点0辺のグラフを作ります。
頂点の番号は、0-based indexです。
graph.add_edge(0, 1, 5)
頂点from
から頂点to
への最大容量cap
, 流量0
の辺を追加します。
返り値は、0-based indexで何番目に追加された辺かを返します。
(1) graph.flow(0, 3)
(2) graph.flow(0, 3, flow_limit)
内部はほぼslope
メソッドで、slop
メソッドの返り値の最後の要素を取得しているだけ。制約・計算量はslope
メソッドと同じ。
エイリアス flow
, min_cost_max_flow
graph.slop(0, 3)
計算量 O(F(n + m) log n)
※ Fは流量、mは辺数
エイリアス slope
, min_cost_slope
graph.get_edge(i)
graph.edge(i)
graph[i]
辺の状態を返します。
制約 0 ≦ i < m
計算量 O(1)
graph.edges
全ての辺の情報を含む配列を返します。
計算量 O(m)
※m
は辺数です。
- 当ライブラリ
- 本家ライブラリ
本家ライブラリの最小費用流の方のメソッド名が長いので、エイリアスを持たせています。
本家ライブラリの最大流の方のメソッド名は短いので、不思議です。
特に検証してないので、何の数値がいいのか検証したいです。
Integer
クラスでも良いような気がしました。
Structを使った方がコードがスリムになって上級者ぽくもあり見栄えは良いです。
しかし、計測した結果、Strucだと遅かったので使用していません。