Мне нужен алгоритм для (эффективного) решения проблемы, которая возникла в некоторых программах для построения диаграмм, которые я пишу.
У меня есть два набора узлов, N и M. Каждый узел n0 в N имеет от 0 до M соединений с уникальным (для n0) узлом в M. Эти наборы узлов должны быть расположены на двух параллельных горизонтальных линиях, с N узлов в линии над М узлами. Соединения будут нарисованы прямыми линиями от N до M.
Что мне нужно сделать, это переставить узлы N и M в пределах их горизонтальных линий, чтобы минимизировать пересечения. Есть ли какой-нибудь способ сделать это более эффективным, чем просто наивно перечислять все возможные меры, а именно O (N! * M!)? (на самом деле, это значительно хуже, так как каждое соединение также должно быть проверено на пересечение).
Ссылки на соответствующую литературу также приветствуются, хотя объяснение того, почему она актуальна, желательно.
Как уже указывалось, в общем случае это можно считать алгоритмом планаризации двудольного графа (множества N и M). Однако эта конкретная проблема значительно более ограничена, чем та (которая, я надеюсь, может сделать ее быстрее), и требуется для получения дополнительной информации (которая может сделать ее медленнее), а именно:
ограничения диаграммы состоят в том, что соединения должны быть нарисованы как прямые линии от N до M. В теории графов это практически означает, что соединения не могут идти за узлы в N или M, только между ними. Таким образом, случай 2x2 с четырьмя соединителями может быть планаризован в общем случае двудольного графа, но не может в случае моей диаграммы.
Дополнительная информация состоит в том, что, если это не может быть планаризовано, мне все еще нужно решение с минимальным пересечением (или близко к нему). Как правило, алгоритмы минимального пересечения значительно отличаются от тех, которые только выравнивают.