뒤집을 수있는 방법으로 digraph를 무 방향 그래프로 변환


10

가역적 인 방법으로 digraph (지향 그래프)를 방향이없는 그래프로 변환하는 알고리즘을 찾고 있습니다. 즉, 방향이없는 그래프가 주어지면 digraph를 재구성 할 수 있어야합니다. 나는 이것이 더 많은 정점을 가진 무 방향 그래프를 희생시킬 것이지만 나는 신경 쓰지 않는다는 것을 이해합니다.

이것을하는 방법을 알고 있거나 참조를 제안 할 수 있습니까? 미리 감사드립니다.


업데이트 : 아래 AdrianN의 답변에 관해서. 좋은 출발점이 될 수 있지만 현재의 형태로는 효과가 없다고 생각합니다. 내가 생각하지 않는 이유는 다음과 같습니다. 여기에 이미지 설명을 입력하십시오


DW의 의견 후 업데이트 : 그래프의 정점이 레이블이없는 것으로 간주합니다. 솔루션에 정점에 레이블을 지정하는 경우 (AdrianN과 마찬가지로) 레이블링 방법에 관계없이 동일한 (동형) 무 방향 그래프를 제공해야합니다. 레이블이있는 정점이있는 그래프에 대한 "동형"의 정의는 두 그래프와 관련된 레이블의 순열이 있지만 레이블이없는 그래프에 대한 정확한 정의는 확실하지 않습니다.


1
이 질문이 너무 광범위하다고 생각합니다. 당신의 제약은 무엇입니까?
adrianN

나는 지금 어떤 제약을 생각할 수 없다. 나는 방향 그래프의 정보를 뒤집을 수없는 한 방향이없는 것으로 인코딩하는 방법이 있다고 생각합니다. 내가 생각하고있는 것은 가장 단순한 유형의 무 방향 그래프 인 것 같습니다. 따라서 정점이나 가장자리에 색상을 사용하지 않는 솔루션을 찾고 있습니다.
Heterotic

질문에 "같은 그래프"가 무엇을 의미하는지 지정해야한다고 생각합니다. 꼭짓점에 레이블이 있거나 정점에 레이블이 없음을 의미합니까? 당신이 그 의미합니까 모두 동일, 또는 두 개의 그래프는 동형 것을? 후자를 의미하는 것 같습니다. 이것이 응용 프로그램의 요구 사항입니까? 레이블을 유지할 수 있으면 문제가 더 쉬워지고 AdrianN의 답변이 작동합니다 (가장자리 가 가장자리 와 같지 않기 때문에 ). (V,E)(3,4)(1,2)
DW

2
제발 통합 문제로 업데이트를. 어느 시점에서나 SE 게시물은 기록에 대해 궁금하지 않고 위에서 아래로 읽을 수 있어야합니다. 그것은 별도로 보관됩니다.
Raphael

답변:


6

각 지정 모서리 에 대해 새 꼭지점 하고 를 모서리 , , , , , .e=(x,y)v1e,,v5eexv1ev1ev2ev1ev3ev3ev4ev4ev5ev3ey

디코딩하기 위해, 이웃이 차수 2를 갖는 모든 리프 (degree-1 vertex)는 어떤 에지에 대해 이어야한다.  ; 그 이웃은  그리고 다른 이웃  이며  .  은 3도이고 잎과 인접한 고유 한 이웃을 가지고 있습니다. 이웃은  이고 잎은  ( 에 두 개의 잎이있는 이웃이 있으면 임의로 선택) ). 다른 이웃 있다  와 다른 이웃 이고  . 지정된 가장자리를 복원v5ee=(x,y)v4ev4ev3ev3ev1ev2ev1ev2ev1exv3ey(x,y) 정점 .v1e,,v5e


7

David Richerby의 답변 (허용됨)이 좋습니다.

나는 간단한 예제 digraph에 대한 그의 지시를 따르고 그것이 누군가를 돕기를 바랍니다.

digraph a <-> b, c-> a, b-> c

(David의 답변에 대한 의견으로 이것을 게시했지만 필요한 평판 점수는 없습니다.)


1
그래픽 표현은 원래 답변보다 크게 개선되었습니다. 댓글이 아닌 답변으로 게시 해 주셔서 감사합니다.
OrangeSherbet

1
나는 수학 논문에서 공식적인 설명이나 공식을 볼 때 항상 압도 감을 느낍니다. 나는 단지 그 불안을 극복하고 각 문장을 천천히 쳐다 봐야합니다. 그런 다음 이해하기 위해 이와 같은 예제를 씁니다. 결국 나는 항상 그것이 얼마나 긴지에 대해 어리 석고, 그것을 이해하는 데 얼마나 많은 노력을 기울 였는지에 대해 겁이 난다. 내가 때때로 다른 행성에서 온 것 같습니다. 더 빨리 이해할 수있게되어 기쁩니다. 당신이 그것을 본 후에는 쉽습니다.
William

2

유 방향 그래프를 변환하려면 D 무 방향 그래프로 G 하나는 다음을 수행합니다.

  1. 노드 수 D
  2. 무 방향 그래프 2 개 생성 G, G 와 동일한 정점에서D
  3. 모든 에지 , 의 로 에지를 추가 경우 , 다른 행의 에지를 추가uvDGu<vG
  4. G는 와 의 분리 된 결합이다GG

분리 된 연합을 수행 할 때 가역적 인 결합을 유지하도록주의를 기울여야합니다.

예


이것은 좋은 시도이며 대답을 염두에두고 있었지만 그 역수가 고유하지 않기 때문에 작동하지 않습니다. 예를 들어, 그래프 O <-> OOO는 그래프 OO OO OO OO로 변환되지만이 후자는 또한 지시 된 그래프 O-> O O-> OOO에서 나올 수 있으므로 프로세스를 되돌릴 수 없습니다.
Heterotic

사진을 더 선명하게하기 위해 추가했습니다.
adrianN

-1

아이덴티티 기능은 어떻습니까? 즉, 모든 digraph는 동일한 크기의 파티션을 가진 방향이없는 이분 그래프로 볼 수 있으며 그 반대도 마찬가지입니다.


나는 그래프 와 함께 그래프 를 코딩한다고 가정합니다. . 경우는, 양방향 가장자리에 대처하고 수 없기 때문에 그 일을하지 않는 모든 가장자리 반전의 결과 다음 와 동형 인코딩을 가지고 있지만 자신 반드시 동형 수 없습니다. G=(V,E)(V×{0,1},{(u,0,v,1)(u,v)E})GGGG
David Richerby

-1

이것에 대한 찔림은 다음과 같습니다.

방향이없는 그래프에서 방향 정보를 추가 정점으로 바꿉니다. 즉, 방향이 지정되지 않은 그래프의 추가 정점을 사용하여 방향 정보를 "인코딩"합니다. 예를 들어, 하나 이상의 모서리가있는 각 지정 꼭지점에 대해 1 + "들어오는"모서리 개수와 같은 여러 개의 지정되지 않은 꼭지점을 추가합니다. 가장자리가 0 인 정점은 변경되지 않습니다.

역방향을 수행하려면 가장자리가 0 이상인 각 정점에 대해 정점을 만듭니다. 가장자리가 정확히 하나 인 정점은 "방향 인코딩"정점입니다. 다른 다중 모서리 정점을 연결하는 각 모서리는 유 방향 그래프의 연결입니다. 이제 알고리즘을 설명 할 수없는 까다로운 부분이 있습니다 (하지만 존재한다고 생각합니다). 각 정점에 대해 들어오는 화살표의 수만 주어진 화살표의 방향을 추론해야합니다.

까다로운 부분은 지뢰 찾기와 같은 것이라고 생각합니다. :-) 폭탄 (들어오는 가장자리)에 각 사각형 (정점)에 인접한 폭탄의 수가 주어진 곳을 찾으십시오.


"지향 정점"이란 무엇입니까? 어쨌든, 이것은 독창적으로 디코딩 할 수 없습니다. 꼭짓점 에 다른 정도의 꼭짓점과 함께 여러 개의 정도 -1 꼭짓점이 연결되어 있다고 가정합니다 . 얼마나 많은 것들이 1 도의 정점에서 들어오는 가장자리를 나타내고 얼마나 많은 사람들이 정도를 코딩하고 있는지 알 수 있습니까? 어쨌든 지뢰 찾기는 NP-hard이며, 솔루션이 항상 독특하지는 않으며 사각형이 멋진 격자에 반드시 배열되어 있지 않아도 해결 될 수 있는지 확실하지 않습니다. xx
David Richerby

"지향 된 정점"이란 지시 된 그래프의 정점을 의미합니다 (동일한 비 지향적 그래프와 반대). "도 인코딩"정점에만 단일 가장자리가 있으므로 "실제"가장자리와 "도 인코딩"가장자리를 구분할 수 있습니다. 그것이 제 설명에서 "1 +"의 이유였습니다. 지뢰 찾기의 "까다로운 부분"에 대해 말씀 드리겠습니다. 나는 그것이 지뢰 찾기와 정확히 동일하다는 것을 모르지만, 나는 아마도 길을 따라 양동이를 걷어 차 있다고 믿을 수 있습니다 :-)
Aaron

또한 처음 읽을 때 솔루션을 이해하지 못했지만 지금 어떻게 작동하는지 알 수 있습니다. 영리한!
Aaron

하자 들어오는 가장자리 정확히 나가는 에지가없는 원래의 그래프의 정점 수. 코딩 된 그래프에서 는 정점으로 표시되며 정확히 하나의 모서리가 나옵니다. 정도 1 정점의 종류와 정도를 코딩하는 정도 1 정점의 종류를 어떻게 구별합니까? xx
David Richerby

지금은 "minesweeper-moot"라고 생각하지만 내 생각은 지시 가장자리 를 가져 와서 및 로 변환하는 것이 었습니다. . 따라서 는 1이 아닌 2 개의 모서리를 갖습니다. 모서리가 1 개인 정점은 차수 코딩입니다. 는 1도를 나타내는 2 개의 정도 코딩 정점을 가지고 있습니다.이 간단한 예에서, 우리는 2 개의 정점이 있다는 것을 알고 있기 때문에 디코딩이 쉽고, 각각 0과 1의 정도를 가지므로(x,y)(x0,x),(x,y),(y,y0)(y,y1)xy(x,y)
Aaron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.