OCamlでグラフを使用する基本的なプログラムを作っています。 Iのようなグラフを定義:配列内の要素は、頂点、及びリストの要素であるOCaml:配列内のリストに要素を追加する
type 'a graph = ('a * int list) array;;
頂点からエッジです。私は合法的なO(| V | + | E |)のグラフを構築できる必要があります。 私はまず、空のリストを持つ頂点配列を作成しました。さて、私はエッジを追加したいと思います。
私が出てきた唯一の方法はこれです:
let addEdge a b g = g.(a)<-(fst g.(a), b::snd g.(a));;
私はこれについては本当にわからないんだけど、私がこれを行う時点での度で線形であるように思えます。これは、私の頂点の1つが他のすべての頂点に接続されている場合は、O(n^2)になります。
私はそうですか? もし私がそうであれば、とにかくこれを線形に保つ必要がありますか?
私は「a」が何であるのか分かりません。ちょうど内容ですか?それともグラフに情報を追加するのですか? – Lhooq
はい、私は実際に線形時間で2-CNF-QBFを解決しています。私の頂点はlitteralsであり、aからb、bからaへのエッジがあります。ここでaとbはlitteralsです - –
Ok。とにかく、私はそれを保った;-) – Lhooq