Преобразование орграфа в неориентированный граф обратимым способом


10

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

Кто-нибудь знает, как это сделать или может предложить какие-либо ссылки? Заранее спасибо.


Обновление: Относительно ответа AdrianN ниже. Это может быть хорошей отправной точкой, но я не думаю, что это работает в нынешнем виде. Вот изображение того, почему я думаю, что это не так: введите описание изображения здесь


Обновление после комментария DW: я считаю вершины графиков немаркированными. Если решение включает в себя маркировку вершин (как это делает AdrianN), то оно должно давать один и тот же (изоморфный) неориентированный граф независимо от того, как выполняется маркировка. Мое определение «изоморфного» для графов с помеченными вершинами состоит в том, что существует перестановка маркировки, которая связывает два графа, но я не уверен в точном определении для немаркированных графов ...


1
Я думаю, что этот вопрос слишком широк. Каковы ваши ограничения?
adrianN

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

Я думаю, что вы должны указать в вопросе, что вы подразумеваете под "тот же график". Вы имеете в виду, что вершины помечены или вершины немаркированы? Вы имеете в виду, что одинаково для обоих или что два графика изоморфны? Похоже, вы имеете в виду последнее. Вы уверены, что это требование в вашем приложении? Если вам разрешено сохранять метки, проблема становится легче, и ответ AdrianN работает (потому что край не совпадает с краем ). (V,E)(3,4)(1,2)
DW

2
Пожалуйста, включите ваши обновления в вопрос. В любой момент времени сообщения SE должны читаться сверху вниз, не задумываясь об истории; это архивируется отдельно.
Рафаэль

Ответы:


6

Для каждого направленного ребра добавьте новые вершины и замените ребрами , , , , , .v е 1 , ... , v е 5 е х V е 1 v е 1 v еe=(x,y)v1e,,v5eexv1ev1ev2ev1ev3ev3ev4ev4ev5ev3ey

Для декодирования каждый лист (вершина степени 1), сосед которого имеет степень 2, должен быть  для некоторого ребра ; его сосед  а другой сосед  -  .  есть уникальный сосед, имеющий как степень 3, так и смежный с листом: сосед -  а его лист -  (если у есть два соседа листа, выберите один из них произвольно, чтобы он был ). Другой сосед - это  а другой сосед - это v5ev e 4 v e 4 v e 3 v e 3 v e 1 v e 2 v e 1 v e 2 v e 1 x v e 3 ye=(x,y)v4ev4ev3ev3ev1ev2ev1ev2ev1exv3ey, Восстановите направленное ребро и удалите вершины v e 1 , , v e 5 .(x,y)v1e,,v5e


7

Ответ Дэвида Ричерби (который был принят) хорош.

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

орграф a <-> b, c -> a, b -> c

(Я бы опубликовал это как комментарий к ответу Дэвида, но у меня нет необходимых очков репутации.)


1
Графическое представление - огромное улучшение по сравнению с оригинальным ответом. Спасибо за публикацию в качестве ответа, а не комментария.
OrangeSherbet

1
Я всегда чувствую себя подавленным, когда я смотрю на формальное объяснение или формулу в математической статье. Мне просто нужно преодолеть это беспокойство и медленно смотреть на каждое предложение - искать вещи, которые мне незнакомы, когда я иду вперед. Затем я набрасываю пример, подобный этому, чтобы убедиться, что я понимаю. К концу я всегда удивлялся, насколько все это было просто, и был напуган тем, как много усилий мне потребовалось, чтобы понять это. Иногда кажется, что я с другой планеты. Рад, что я мог помочь вам понять это быстрее. Как только вы это видите, это легко.
Уильям

2

Чтобы преобразовать ориентированный граф в неориентированный граф G, нужно сделать следующее:DG

  1. Нумерация узлов D
  2. Создайте два неориентированных графа , G в той же вершине, что и DGGD
  3. Для каждого ребра , v в D добавьте ребро в G ′, если u < v , иначе добавьте ребро в G uvDGu<vG
  4. G является непересекающимся объединением и G GG

Делая несвязанный союз, нужно позаботиться о том, чтобы сделать его обратимым.

пример


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

Я добавил картинку, чтобы было понятнее.
adrianN

-1

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


гзнак равно(В,Е)(В×{0,1},{(U,0,v,1)|(U,v)Е})г'ггг'

-1

Вот удар в этом:

Замените информацию о направлении дополнительными вершинами в неориентированном графе. Другими словами, используйте дополнительные вершины в неориентированном графе для «кодирования» информации о направлении. Например, для каждой направленной вершины, имеющей хотя бы одно ребро, добавьте количество неориентированных вершин, равное 1 + количество «входящих» ребер. Вершины с нулевыми ребрами остаются без изменений.

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

Я думаю, что сложная часть похожа на игру тральщика :-) Выясните, где бомбам (входящим ребрам) дают количество смежных бомб для каждого квадрата (вершины).


xx

Под «направленной вершиной» я подразумеваю вершину в ориентированном графе (в отличие от эквивалентного неориентированного графа). Вы можете отличить «реальные» ребра от ребер «кодирования степени», потому что только вершины «кодирования степени» имеют одно ребро. Это было причиной "1 +" в моем описании. Я поверил твоему слову о минусовке "Хитрая часть". Я не знаю, что это точно эквивалентно тральщику, но я могу поверить, что я, возможно, только пнул ведро в будущее :-)
Аарон

Кроме того, я не совсем понял ваше решение, когда впервые прочитал его, но теперь я вижу, как оно работает. Умная!
Аарон

xx

(x,y)(x0,x),(x,y),(y,y0)(y,y1)xy(x,y)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.