Найкоротший не пересічний шлях для графа, вбудованого в евклідову площину (2D)


14

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

Наприклад, на графіку нижче потрібно перейти від . Зазвичай такий алгоритм, як алгоритм Dijkstra, створив би таку послідовність, як:(0,0)(-3,2)

[(0,0)3(0,3)2(1,2)4(-3,2)]=7+2.

Повний графік:

введіть тут опис зображення

Найкоротший шлях:

введіть тут опис зображення

Найкоротший не пересічний шлях:

введіть тут опис зображення

Однак цей шлях перетинається на евклідовій площині, тому я хочу алгоритм, який дав би мені найкоротшу непересічну послідовність, у цьому випадку:

[(0,0)3(0,3)3(0,6)5(-3,2)]=11.

Цей шлях довший, ніж найкоротший шлях, але це найкоротший непересічний шлях.

Чи існує (ефективний) алгоритм, який може це зробити?

Джерела TikZ


2
Приємна проблема! (+1). Чи можете ви сказати що-небудь про додаток або контекст, де виникає ця проблема? Мене заінтригує (PS Окреме зауваження. Очевидним виходом із цієї загадки є побачити, чи можна ввести нову вершину для кожної точки перетину, тобто кожної точки, де один край може перетинати інший край. Однак я розумію, що для деяких / багатьох застосувань це може бути неможливим.)
DW

2
@DW - це я переформулюючи проблему з ослівкою ослів / поні Бабібу ; додаток - це його евристичний алгоритм Евклідової TSP, я не зовсім впевнений, як він має намір його використовувати, але я думаю, що він хоче знати, чи зможе він знайти шлях між двома пунктами, коли вже відвідав декілька інших (оптимальний тур Євклідової TSP буде бути непересічними). І так, якщо ви можете ввести нові вузли, це було б чудово, але питання полягає в тому, якщо ви не можете (і, звичайно, ви не можете вводити нові міста для Євклідової TSP).
Realz Slaw

1
Дозвольте спробувати перетворити проблему існування шляху в 3SAT. Зробити спосіб перетину двох сигналів, не перетинаючи два контури, видається найбільшою проблемою.
Джон Дворак

1
Так. Я мав на увазі вирішити SAT через це.
Джон Дворак

2
задали подібне запитання щодо точок шляху / циклів та його відношення до TSP , tcs.seн
vzn

Відповіді:


11

Повноцінно вирішити, чи існує якийсь шлях.

Однозначно можна перевірити, чи будь-який даний шлях є дійсним шляхом у даному графіку. Таким чином, проблема обмеженої довжини знаходиться в NP, і так само, як і її підмножина, проблема будь-якого шляху.

Тепер, щоб довести NP-твердість проблеми будь-якого шляху (і, отже, проблеми обмеженої довжини), давайте зведемо SAT-CNF до цієї проблеми:


Глобальна структура - це сітка дротяних шматочків, прилеглих до стовпчиків клавіш. Логічна формула задоволена, якщо існує непересічний шлях через графік.

Перетнути два шматки шляху неможливо, але потрібно перетнути два логічні дроти. Швидше, потік шляху суворо заданий: дротова точка задається двома вузлами. Послідовність точок дроту, через які проходить шлях, вимушена скороченням. Логіка представлена ​​тим, який вузол обраний. Будь-який шлях може бути обраний до тих пір, поки він проходить через усі точки проводів.

На цій діаграмі шлях представлений червоною кривою, а логічний потік представлений чорними проводами:

сітка проводів ліворуч, стовпець клавішних пропозицій справа.

Тепер давайте побудуємо кожен компонент.


Електропроводка використовує три плитки: перехрестя, точку гілки та вертикальний провід. Почнемо з найважчого:

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

Припускаючи, що стежки йдуть з півночі на захід і з півдня на схід, ми можемо: збирати кожну стежу з півночі сумісною стежкою зі сходу по лінії (деякі несумісні шляхи перетинатимуть один одного); схрещувати кожну пару між собою, змінюючи порядок пар; розподілити шляхи до їх південної та західної кінцевих точок. Найкраще це пояснюється діаграмою. Тут кожна пара вузлів являє собою провідну точку. Шляхи з одним і тим же кольоровим кодом (з однаковою логікою) не перетинаються, доріжки іншого кольору кольору:

графічне зображення вищезазначеного

Точка гілки та вертикальний провід працюють однаково, але шляхів для співвідношення є менше:

двох пар шляхів тут достатньо.  Дріт - це, по суті, точка відгалуження, де гілка знищена

¬А¬Б

введіть тут опис зображення

Це узагальнення можна узагальнити для кодування довільного дерева воріт І та АБО, розгалужуючи провід зчитування по-різному. Зокрема, SAT-CNF та SAT-DNF можуть бути зведені до непересічної проблеми шляху таким чином, як описано вище.


Нічого собі, молодець. Я ще цього не переглядав, але робота, яку ви вкладаєте, - дивовижна.
Realz Slaw

Гаразд, я просто хочу підсумувати своє розуміння: використовуючи перший гаджет, можна перетнути будь-які дві пари буквального шляху та підтримувати використовувані шляхи. Тому не потрібно турбуватися про планарність для прокладки контурів (як наприклад, гаджет xor у PlanarCircuitSat для схем). Тоді, використовуючи остаточний гаджет, можна створити довільні логічні пропозиції (більше не потрібно турбуватися про планарність). Це правильно?
Realz Slaw

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

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

1
Я використовував OpenOffice Draw для глобальної структури, а [yEd] (www.yworks.com/products/yed) для решти. Чи слід редагувати це в (з <sub>)?
Джон Дворак

-1

Ця проблема видається Тураном 1944 року. Це виглядає як хороший огляд теорії та алгоритмів, перекресленого числа графіків: теорія та обчислення Мутцеля. wikipedia містить деяку інформацію під перекресленням кількості графіків


1
Може, це краще як коментар?
Джухо

він науково відповідає на основне запитання "який алгоритм ви б використали"
vzn

1
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Джон Дворак

jan цитує реф від мета stackexchange. в той час як це правильна ідея, роль цитат у науці / математиці відрізняється від сайту з порадами програмування .... [правда, в даний момент для мене не доступна відповідь для більш детальної відповіді] .. все одно цілком можливо щось подібне Конструкція дженів, хоча й корисна / варта, є вже в літературі та науці, її частина стандартного процесу / найкращих практик [спроби] знайти її ....
vzn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.