Як зменшити кількість ребер, що перетинаються на діаграмі?


10

Я працюю над редактором діаграм. Діаграми відображають 2D фігури ( вузли ), з'єднані з роз'ємами ( ребрами ).

Я хотів би додати операцію, яка, з огляду на вибір вузлів, "роз'єднує" їх: вона розміщує їх, щоб зменшити кількість ребер, що перетинаються, якщо це можливо (і це нормально, якщо краї повинні бути намальовані точками згину) .

Отже, я хочу алгоритм графіків, який, з огляду на ( топологічне ) вбудовування графіка та підмножину його вузлів, модифікує вбудовування (його топологію ) лише на ті вузли, щоб мінімізувати кількість ребер перетину.

Читаючи про графіки вершин і переглядаючи Кабелло та Мохар (2013) , я вважаю, що ця проблема є важкою для NP. Тож я буду задоволений параметризованим алгоритмом (наприклад, щодо кількості країв перетину), який має відому, многочленну, часову складність для будь-якого значення параметра. Це здається здійсненним, але мені непросто самостійно придумати такий алгоритм.

Запитання:

  • Де я шукаю такий алгоритм?
  • Чи існує?
  • У існуючому програмному забезпеченні?
  • Чи є якийсь значний практичний досвід проведення такої операції? (Теоретично те, що виглядає добре, може бути не таким хорошим на практиці, або навпаки.)

(Я не впевнений, де найкраще задати це питання: тут, на StackOverflow або MathOverflow?)


1
Я б припустив, що питання може бути краще підходить для StackOverflow, але я помітив, що на подібні запитання там є незадовільні відповіді. Я буду відповідати на відповідь, яка повинна допомогти вам у теоретичному відношенні, але, можливо, найкраще ваше питання перенести туди.
mdxn

Тут проводиться дуже поглиблена робота: žalng.tuwien.ac.at
cd/ebner/

Дякую! Мало того, але це, очевидно, дуже читабельна презентація проблеми та огляд деяких відомих підходів.
reinierpost

Відповіді:


9

Як ви помітили, обчислення абсолютного мінімального числа перетину - NP-жорсткий. Процес малювання графіків повинен бути як мінімум таким же важким.

Проблема, поставлена ​​у питанні, насправді є більш важкою та більшою мірою, ніж вище. Ви розглядаєте вузли графіків певного розміру та форми, одночасно обмежуючи розмір (площу) результату. Крім того, бажане ще не визначене поняття естетики. Очевидно, ми хочемо для цього евристики, яка не використовує абсолютного мінімуму в загальному випадку. Кількість вузлів, що зустрічаються в такій програмі, в середньому, ймовірно, не величезна. Нанесення графіка на графіку мінімального перетину краю може бути можливим для невеликих розмірів.

Ресурси:
Вас можуть зацікавити такі ресурси, зокрема перший:

Інших ресурсів теж багато. Вони повинні допомогти вам почати роботу.

Додаткові думки та спостереження:

Ось ідея обійти проблеми, що стосуються форми та розміру вузлів. Враховуючи графік (нескінченно малі вузли), розгорніть кожен вузол, "відштовхуючи" або згинаючи краї в бік шляху (наприклад, використовуючи сплайни, застосовуючи обмеження на близькість). Це потрібно зробити з іншими ребрами і вузлами, які перешкоджають цьому, що може запустити ланцюгову реакцію. Подивіться, як можна ефективно розрахувати рівновагу (наприклад, молекулярні структури). Якщо ви не можете отримати форму вузла до потрібного розміру, то масштабуйте всю діаграму.

Користувач може насолоджуватися результатами рандомізованого алгоритму. Вони могли використовувати вашу функцію кілька разів, поки не отримали щось, що їм сподобалось. Уникайте надмірних обчислень у цьому випадку (не потрібно повторно обчислювати номер перетину).


Я додав топологічне до свого питання спеціально, щоб уникнути обговорення естетики. Це важливо, але я не думаю, що вони сильно впливають на основну проблему - я думаю, що з ними можна вирішити окремий крок, після коригування топології вузлів (тобто, які вузли оточені, якими іншими вузлами).
reinierpost

Я вперше застосував Graphviz понад 15 років тому; Я використовую його приблизно раз на тиждень для всіх видів графіків. Я не надто вражений її результатами, і я розумію, що важко зробити набагато краще.
reinierpost

Я часто відвідую graphviz.org і прочитав деякі статті, на які вони посилаються. Але я ще не зустріла відповіді на це конкретне запитання, і це не в моєму описі роботи, щоб ознайомитись з літературою. Ось чому я прошу тут.
reinierpost

Дякую за посилання - зауважую, що це все ще актуальні дослідження .
reinierpost

Перше, що я спробую, це тривіальний (і тому не обов'язково корисний) алгоритм, орієнтовно заснований на ідеї пані Шаббер. Знову дякую.
reinierpost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.