Вход: связанный неориентированный граф G
с n
вершинами.
Выход: линейное упорядочение вершин 0, 1, ..., n - 1
, которое минимизирует
sum(j - i for i in range(n) for j in range(n) if i < j and (i, j) in G)
.
n
может составлять около 1000000, а число ребер будет постоянным фактором, большим, чем n
, около 5000000. В чуть более общей задаче ребра могут иметь небольшие положительные целые веса. Точное решение является предпочтительным, но не обязательным.
Одним из подходов может быть вариант пузырьковой сортировки, который меняет местами элементы, если это приведет к уменьшению суммы. Но я не уверен, что этот алгоритм застрянет в локальном минимуме.