我正在OCaml中製作一個基本程序,其中使用了圖形。 我定義的曲線爲: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));;
我真的不知道這一點,但在我看來,這是一個度的線性在我這樣做的時候。這意味着如果我的一個頂點連接到每個其他頂點,它將帶我O(n^2)
我是對嗎? 如果我是,我是否有辦法保持這種線性?
我不明白「a」是什麼。只是內容?或者是在圖表中添加一些信息? – Lhooq
是的,我實際上是在線性時間內求解2-CNF-QBF,我的頂點是litterals,並且從a到b有一個邊,並且從b到a,如果我有一個子句(a或b) - 其中a和b也是輸尿管 - –
好的。無論如何,我保留它;-) – Lhooq