Я работаю над редактором диаграмм. Диаграммы отображают 2D фигуры ( узлы ), связанные с соединителями ( ребрами ).
Я хотел бы добавить операцию, которая, учитывая выбор узлов, «распутывает» их: она перемещает их, чтобы уменьшить количество пересекающихся ребер, если это возможно (и это нормально, если ребра должны быть нарисованы с точками изгиба) ,
Поэтому мне нужен алгоритм графа, который, учитывая ( топологическое ) вложение графа и подмножество его узлов, изменяет вложение (его топологию ) только на этих узлах, чтобы минимизировать количество пересекающихся ребер.
Читая о графиках вершин и просматривая Cabello и Mohar (2013) , я полагаю, что эта проблема является NP-сложной. Поэтому я буду доволен параметризованным алгоритмом (например, по количеству пересекающихся ребер), который имеет известную полиномиальную временную сложность для любого заданного значения параметра. Это кажется возможным, но мне нелегко придумать такой алгоритм самостоятельно.
Вопросов:
- Где мне искать такой алгоритм?
- Это существует?
- В существующем программном обеспечении?
- Есть ли значительный практический опыт такой операции? (То, что хорошо выглядит в теории, может быть не очень хорошо на практике, или наоборот.)
(Я не уверен, где лучше задать этот вопрос: здесь, в StackOverflow или MathOverflow?)