Я делаю базовую программу в 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 в линейном времени, мои вершины - литеральные, и есть край от не a до b, а от b до a, если у меня есть пункт (a или b) - где a и b также являются литерами - –
Ок. Во всяком случае, я сохранил его ;-) – Lhooq