Я пытаюсь вычислить интервалы в графике, я нашел математическое описание алгоритма на википедии:Interval (теория графов) алгоритм объяснения
http://en.wikipedia.org/wiki/Interval_(graph_theory)
H = { n0 } // Initialize work list
while H is not empty
remove next h from H
create the interval I(h)
I(h) += { h }
while ∃n ∈ { succ(I(h)) — I(h) } such that pred(n) ⊆ I(h)
I(h) += { n }
while ∃n ∈ N such that n ∉ I(h) and // find next headers
∃m ∈ pred(n) such that m ∈ I(h)
H += n
Однако это, вероятно, что код выглядит как не-разработчик, поскольку он выглядит как тарабарщина для меня, что бы это выглядело в коде pesudo? Моя окончательная реализация будет в C++ и применена к структуре данных графика потока управления, которая имеет предшественники и ребра преемника для каждого узла.
Спасибо, я постараюсь осуществить это позже, а затем принять если он works;) – paulm
btw is Set pred (Node n); просто инверсия Set succ (набор интервал)? –
paulm
@paulm 'pred (n)' и 'succ (n)' соответственно возвращают узлы, связанные с краями предшественника/преемника 'n', что-то вроде' Set pred (Node n) {Set retVal = new Set (); for (Edge e: n.predEdges) {retVal.add (e.nodeIn); } return retVal; } '; 'succ (n)' одинаково, за исключением использования 'n.succEdges' и' retVal.add (e.nodeOut) ' –