Вы не можете убежать из O (n ^ 2), потому что есть некоторый граф с линейным графом с количеством ребер, равным квадрату мощности вершин исходного: подумайте, для Например, в графе с n + 1 вершинами, с одной вершиной, связанной с другими всеми вершинами: вам нужно построить клику с n вершинами, то есть с (n-1) ^ 2 ребрами.
Сложность алгоритма ограничена снизу размером вывода, который он производит.
Это, конечно, не означает, что нам не нужно находить умные алгоритмы. Я думал об этом:
LG(LN,LE) getLinearGraph(G(N,E)) {
LN = EmptySet();
LE = EmptySet();
for (Vertex v : N) {
verticesToAdd = EmptySet()
for (Vertex i : out-degree(v) {
toAdd += textual-rep((v,i));
}
LN += toAdd;
LE += make-clique(toAdd);
}
}