유클리드 평면 (2D)에 포함 된 그래프의 가장 짧은 비교 차 경로


14

유클리드 평면에 포함 된 그래프의 최단 경로를 찾기 위해 어떤 알고리즘을 사용합니까?

예를 들어 아래 그래프에서 로 이동하려고합니다 . 일반적으로 Dijkstra의 알고리즘과 같은 알고리즘은 다음과 같은 시퀀스를 생성합니다.(0,0)(,2)

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

전체 그래프 :

여기에 이미지 설명을 입력하십시오

최단 경로 :

여기에 이미지 설명을 입력하십시오

가장 짧은 비교 차 경로 :

여기에 이미지 설명을 입력하십시오

그러나, 유클리드 평면이 경로 교차 자체는, 그러므로 내가 원하는 이 경우에는, 저에게 짧은 교차하지 않는 순서를 줄 것이다 알고리즘을 :

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

이 경로는 최단 경로보다 길지만 가장 짧은 비교 차 경로입니다.

이를 수행 할 수있는 (효율적인) 알고리즘이 있습니까?

TikZ 소스


2
좋은 문제입니다! (+1). 이 문제가 발생하는 응용 프로그램 또는 컨텍스트에 대해 말할 수 있습니까? 나는 흥미 롭다. (PS는 별도의 참고 사항 :이 수수께끼에서 벗어날 수있는 확실한 방법은 모든 교차점, 즉 한 모서리가 다른 모서리와 교차 할 수있는 모든 점에 대해 새로운 정점을 도입 할 수 있는지 확인하는 것입니다. 그러나 일부 / 많은 응용 프로그램의 경우 불가능할 수도 있습니다.)
DW

2
@DW 이것은 Babibu의 불쾌한 불타는 당나귀 / 조랑말 문제를 재구성하고 있습니다 . 응용 프로그램은 그의 유클리드 TSP 휴리스틱 알고리즘입니다. 그가 그것을 어떻게 사용 하려는지 확실하지 않지만, 그가 이미 다른 여러 곳을 방문했을 때 그가 두 지점 사이의 경로를 찾을 수 있는지 알고 싶어한다고 상상합니다 (Euclidean TSP의 최적 투어는 교차하지 않아야 함). 그리고 네, 새로운 노드를 도입 할 수 있다면 좋을 것입니다. 그러나 문제는 당신이 할 수 없는지에 대한 것입니다.
Realz Slaw

1
경로 존재 문제를 3SAT로 변환 해 보겠습니다. 두 경로를 교차하지 않고 두 신호를 교차하는 방법을 만드는 것이 가장 큰 과제입니다.
John Dvorak

1
네. 나는 이것을 통해 SAT를 해결하는 것을 의미했다.
John Dvorak

답변:


11

심지어 여부를 결정 NP-완료 어떤 경로가 존재한다.

주어진 경로가 주어진 그래프에서 유효한 경로인지 확인할 수 있습니다. 따라서 제한 길이 문제는 NP에 있으며 모든 경로 문제인 하위 집합도 마찬가지입니다.

이제 모든 경로 문제 (및 제한 길이 문제)의 NP 경도를 증명하기 위해 SAT-CNF를이 문제로 줄이십시오.


전역 구조 는 절 조각으로 연결된 와이어 조각 격자입니다. 그래프를 통해 교차하지 않는 경로가있는 경우 논리 수식을 만족할 수 있습니다.

경로의 두 부분을 교차하는 것은 불가능하지만 두 개의 논리 와이어를 교차하는 것이 필요합니다. 오히려 경로 흐름이 엄격하게 지정됩니다. 와이어 포인트는 두 개의 노드로 제공됩니다. 경로가 통과하는 와이어 포인트의 시퀀스는 축소에 의해 강제됩니다. 논리는 선택된 노드로 표시됩니다. 모든 와이어 포인트를 통과하는 한 모든 경로를 선택할 수 있습니다.

이 다이어그램에서 경로는 빨간색 곡선으로 표시되고 논리 흐름은 검은 색 선으로 표시됩니다.

왼쪽의 와이어 그리드, 오른쪽의 절 조각 열.

이제 각 구성 요소를 만들어 봅시다.


배선은 교차점, 분기점 및 수직 와이어의 세 가지 타일을 사용합니다. 가장 어려운 것부터 시작합시다.

교차점 의 기본 개념 은 각 와이어 포인트 쌍에 대한 경로를 준비하고 가능한 경로를 충분히 구부려서 동일한 논리 (호환 가능한 경로)를 인코딩하는 것을 제외한 모든 쌍이 서로 교차하도록하는 것입니다. 물론 우리는 두 개의 평행 한 가장자리가 교차한다고 말할 수는 없지만 여분의 차수 2 노드를 도입하여 두 개의 경로가 교차되도록 할 수 있습니다.

경로가 북쪽에서 서쪽으로 그리고 남쪽에서 동쪽으로 오면, 우리는 북쪽에서 각 경로를 동쪽에서 호환되는 경로로 한 줄에 모으십시오 (일부 호환되지 않는 경로는 서로 교차합니다). 쌍의 순서를 반대로하여 각 쌍을 서로 교차시킵니다. 남쪽과 서쪽 끝점으로 경로를 분배하십시오. 이것은 다이어그램으로 가장 잘 설명됩니다. 여기서 각 노드 쌍은 와이어 포인트를 나타냅니다. 동일한 색상 코드를 가진 경로 (같은 논리를 가짐)는 서로 교차하지 않으며 다른 색상 코드가하는 경로는 다음과 같습니다.

위의 그래픽 묘사

분기점수직 와이어 는 동일하게 작동하지만 상관시킬 경로가 더 적습니다.

여기에는 두 쌍의 경로로 충분합니다.  와이어는 기본적으로 분기가 파괴 된 분기점입니다.

¬¬

여기에 이미지 설명을 입력하십시오

판독 와이어를 다른 방식으로 분기하여 AND 및 OR 게이트의 임의 트리를 인코딩하도록이 축소를 일반화 할 수 있습니다. 특히, SAT-CNF 및 SAT-DNF는 전술 한 방식으로 비교 차 경로 문제를 감소시키는 것이 가능하다.


와, 잘 했어. 나는 그것을 아직 검토하지 않았지만 당신이 넣은 작업은 훌륭합니다.
Realz Slaw

좋아, 나는 내 이해를 요약하고 싶다 : 첫 번째 가제트를 사용하면 두 개의 리터럴 경로 쌍을 교차하고 사용 된 경로를 유지할 수 있습니다. 따라서 경로를 배치하기위한 평면성에 대해 걱정할 필요가 없습니다 (PlanarCircuitSat의 xor 가젯이 회로에 사용하는 것처럼). 그런 다음 최종 가제트를 사용하면 임의의 논리 절을 만들 수 있습니다 (더 이상 평면성에 대해 걱정할 필요가 없습니다). 이 올바른지?
Realz Slaw

이것은 올바른 것처럼 보이지만 일반적인 레이아웃을 위해 두 가지를 보장해야합니다 .NIP 경로로 모든 가제트에 전원을 공급할 수 있어야합니다 (항상 가능해야합니다-경로가 중앙에 붙어 있으면 와이어 가제트를 경로의 고독한 끝을 함께 가져 오십시오)와 판독 와이어의 모든 경로가 와이어 내에서 뒤집을 수없는 방식으로 서로 교차하는지 확인하십시오 (참절이 없으면 보장되는 것 같습니다 ( 모든 절이 회로 외부에있는 경우 (같은면에서 시작과 끝이있는 경우).
John Dvorak

판독 와이어의 모든 경로가 서로 쉽게 교차하는지 확인하십시오. 확실하게하려면 n 개의 경로를 분기 한 다음 즉시 모든 경로를 교차하십시오. 그러나 이것이 꼭 필요한 것은 아니라고 생각합니다.
John Dvorak

1
글로벌 구조에는 OpenOffice Draw를 사용하고 나머지는 [yEd] (www.yworks.com/products/yed)를 사용했습니다. 에서 (으로 <sub>)을 수정해야하나요 ?
John Dvorak

-1

이 문제는 Turan 1944에 대한 것으로 보인다. 이것은 이론과 알고리즘, 교차 그래프 수 : Mutzel의 이론과 계산 에 대한 훌륭한 조사처럼 보인다 . wikipedia에 수많은 그래프가 있습니다.


1
어쩌면 이것이 주석으로 더 낫습니까?
Juho

그것은 과학적으로 "어떤 알고리즘을 사용할 것인가"라는 기본 질문에 대답합니다
vzn

1
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
John Dvorak

jan은 stackexchange 메타에서 참조를 인용합니다. 그것이 올바른 생각이지만 과학 / 수학에서의 인용의 역할은 프로그래밍 팁 사이트와는 다릅니다 .... [현재 더 자세한 답변을 위해 심판은 사용할 수 없습니다.]. 어쨌든 그것은 매우 가능성이 있습니다 jans 구성은 유용하고 가치가 있지만, 이미 문헌과 과학에 있으며, 그것을 찾으려는 표준 프로세스 / 모범 사례의 일부입니다 ....
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.