Перетворення диграфа в непрямий графік зворотним способом


10

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

Хтось знає, як це зробити чи може запропонувати будь-які посилання? Заздалегідь спасибі.


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


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


1
Я думаю, що це питання занадто широке. Які ваші обмеження?
adrianN

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

Я думаю, вам слід вказати у питанні, що ви маєте на увазі під «тим же графіком». Ви маєте на увазі, що вершини мають маркування, або що вершини мають маркування? Ви маєте на увазі, що однаковий для обох, або що два графіки є ізоморфними? Здається, ви маєте на увазі останнє. Ви впевнені, що це вимога у вашій заявці? Якщо вам дозволяється зберігати мітки, проблема стає простішою, і відповідь AdrianN працює (адже край не є таким, як край ). (V,E)(3,4)(1,2)
DW

2
Будь ласка, включіть свої оновлення до питання. У будь-який момент часу посади SE повинні читатись зверху вниз, не замислюючись про історію; що архівується окремо.
Рафаель

Відповіді:


6

Для кожного спрямованого краю додайте нові вершини та замініть ребрами , , , , , .e=(x,y)v1e,,v5eexv1ev1ev2ev1еv3еv3еv4еv4еv5еv3еу

Щоб розшифрувати, кожен аркуш (вершина 1 ступеня), сусід якого має ступінь 2, повинен бути  для деякого краю ; її сусід -  а інший сусід  -  .  має унікального сусіда, який має і ступінь 3, і суміжний з листом: сусід -  а його лист -  (якщо має два сусіди аркуша, виберіть один довільно, щоб бути ). Іншим сусідом є  а іншим сусідом є  . Відновіть спрямований крайv5ее=(х,у)v4еv4еv3еv3еv1еv2еv1еv2еv1ехv3еу(х,у) та видаліть вершини .v1е,,v5е


7

Відповідь Девіда Ріхербі (яку було прийнято) є хорошою.

Я дотримувався його вказівок на простому прикладі диграфа, і сподіваюся, що він комусь допоможе.

диграфграф а <-> b, c -> a, b -> c

(Я б опублікував це як коментар до відповіді Девіда, але у мене немає необхідних балів репутації.)


1
Графічне зображення - це величезне вдосконалення в порівнянні з оригінальною відповіддю. Дякуємо, що опублікували це як відповідь, а не коментар.
OrangeSherbet

1
Я завжди відчуваю себе переповненим, коли дивлюсь формальне пояснення чи формулу в математичному документі. Мені просто доводиться долати цю тривогу і повільно дивитись на кожне речення - шукаючи речі, з якими я не знайомий, коли йду разом. Тоді я накреслю подібний приклад, щоб бути впевненим, що розумію. Зрештою, я завжди ошелешений тим, наскільки просто це було все довгий час, і щось жахало, скільки зусиль знадобилося мені, щоб зрозуміти це. Почувається, що я іноді з іншої планети. Радий, що можу допомогти вам швидше зрозуміти це. Як тільки ви це побачите, це легко.
Вільям

2

Щоб перетворити спрямований графік у непрямий графік виконайте наступне:DG

  1. Пронумеруйте вузлиD
  2. Створіть два ненаправлені графіки , на тій самій вершинній множині, що іGGD
  3. Для кожного краю , в додайте ребро до якщо , інакше додайте ребро доuvDGu<vG
  4. G - це роз'єднане з'єднання іGG

Роблячи роз'єднаний союз, слід подбати про те, щоб зробити його оборотним.

Приклад


Це гарна спроба, і це було так, як я мав на увазі відповідь, але це не спрацьовує, оскільки зворотний не є унікальним. Наприклад, графік O <-> OOO буде перетворений на графік OO OO OO OO, але тоді цей останній також міг би походити з спрямованого графіка O-> O O-> OOO, тому процес не є оборотним.
Гетеротика

Я додав картинку, щоб було зрозуміліше.
adrianN

-1

А як щодо функції ідентичності? Тобто кожен графік може розглядатися як непрямий, двосторонній графік з однаковими за розмірами перегородками та навпаки.


Я припускаю, що ви маєте на увазі кодувати діграф з графіком . Це не працює, тому що він не може впоратися з двоспрямованими ребрами, і якщо є результатом обертання всіх ребер в , то і мають ізоморфні кодування, але не обов'язково є самоморфними. Г=(V,Е)(V×{0,1},{(у,0,v,1)(у,v)Е})Г'ГГГ'
Девід Річербі

-1

Ось такий показник:

Замініть інформацію про напрямок додатковими вершинами у непрямому графіку. Іншими словами, використовуйте додаткові вершини в непрямому графіку, щоб "кодувати" інформацію про напрямок. Наприклад, до кожної спрямованої вершини, що має щонайменше один край, додайте кількість непрямих вершин, рівних 1 + кількості ребер, що надходять. Вершини з нульовими ребрами залишаються незмінними.

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

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


Що таке "спрямована вершина"? У будь-якому випадку, це не однозначно декодируемо. Припустимо вершинухмає купу вершин 1-го ступеня, прикріплених до нього, поряд із купою вершин інших ступенів. Як би ви сказали, скільки з них представляють вхідні ребра з вершин 1-го ступеня і скільки кодують градусну мірух? У будь-якому випадку, вирішувати тральщик непросто, рішення не завжди є унікальним, і не очевидно, що його можна вирішити взагалі, коли квадрати не обов'язково розташовані в хорошій сітці.
Девід Річербі

Під «спрямованою вершиною» я маю на увазі вершину в спрямованому графіку (на відміну від еквівалентного непрямованого графа). Можна відрізнити "реальні" краї від ребер "кодування ступеня", оскільки лише вершини "кодування градусів" мають один край. Це було причиною "1 +" в моєму описі. Я візьму ваше слово про міневерську "хитру частину". Я не знаю, що це рівнозначно тральщику, але я можу повірити, що, можливо, я тільки штовхнув відро по дорозі :-)
Аарон

Крім того, я не зовсім зрозумів ваше рішення, коли я вперше його прочитав, але бачу, як воно працює зараз. Розумний!
Аарон

Дозволяє xбути вершиною в початковому графіку, що не має вхідних ребер і рівно одного вихідного краю. У кодованому графікухпостає як вершина, рівно один край якої виходить з неї. Як ви відрізняєте таку вершину степеня-1 від сорту вершини 1-го ступеня, що кодує ступінь?
Девід Річербі

Я думаю, що зараз "тральщик-суперечок", але моя ідея полягала в тому, щоб взяти напрямок (х,у) і перетворити його в (х0,х),(х,у),(у,у0) і (у,у1). Томух матиме два ребра, а не 1. Будь-яка вершина, яка має лише 1 край, є кодуючою за ступенем. у має дві вершини, що кодують ступінь, що вказує на ступінь 1. У цьому простому прикладі декодування є простим, оскільки ми знаємо, що існує лише дві вершини, і вони мають ступінь 0 і 1 відповідно, таким чином (х,у)
Аарон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.