DFT에서 크로스 에지와 포워드 에지의 차이점


11

깊이 우선 트리에는 트리를 정의하는 에지 (즉, 순회에 사용 된 에지)가 있습니다.

다른 노드 중 일부를 연결하는 남은 가장자리가 있습니다. 교차 가장자리와 앞으로 가장자리의 차이점은 무엇입니까?

위키 백과에서 :

이 스패닝 트리를 기반으로 원래 그래프의 가장자리를 세 가지 클래스로 나눌 수 있습니다. 앞 가장자리는 나무의 노드에서 그 자손 중 하나를 가리키고 뒤쪽 가장자리는 노드에서 조상 중 하나를 가리 킵니다. 그리고 가장자리를 교차하지 않습니다. 때로는 스패닝 트리 자체에 속하는 트리 에지가 전방 에지와 별도로 분류되는 경우가 있습니다. 원래 그래프가 방향이 지정되지 않은 경우 모든 모서리는 나무 모서리 또는 뒤쪽 모서리입니다.

한 노드에서 다른 노드를 가리키는 순회에 사용되지 않는 에지가 상위-하위 관계를 설정하지 않습니까?


관련 : cs.stackexchange.com/questions/99988/… 직접 그래프의 경우 깊이 우선 검색시 십자형 모서리 대신 앞쪽 모서리를 만드는 알고리즘을 설정하려고합니다.
pfalcon

답변:


23

Wikipedia는 다음과 같은 답변을 제공합니다.

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

이 그림에는 모든 유형의 가장자리가 나타납니다. 이 그래프에서 DFS를 추적하고 (노드가 숫자 순으로 탐색 됨) 직관이 실패한 곳을 확인하십시오.


이것은 다이어그램을 설명합니다 :-

정방향 에지 : (u, v), 여기서 v는 u의 자손이지만 트리 가장자리는 아닙니다. 이것은 DFS 트리의 자손에 정점을 연결하는 비 트리 가장자리입니다.

교차 모서리 : 다른 모서리 동일한 깊이 우선 트리 또는 다른 깊이 우선 트리에서 정점 사이를 이동할 수 있습니다. (레이맨)
그래프 G의 다른 모서리입니다. 두 개의 다른 DFS- 트리에있는 정점 또는 같은 DFS- 트리에있는 두 개의 정점을 연결합니다. 둘 중 어느 것도 다른 쪽의 조상이 아닙니다.


6이 먼저 통과하는 것이 왜 불가능하지 않습니까 (오른쪽부터)? 그런 일이 있었다면 2-> 3 에지는 무엇이라고 불렸을까요?
soandos

@ soandos, 알고리즘을 추적하는 데 시간이 걸릴 것을 제안합니다. Wikipedian이 실수하지 않았다고 가정하면 이미지는이 그래프에서 선의의 DFS를 설명하므로 알고리즘을이 추적에 맞추는 방법이 있습니다. 가장자리 유형은 Wikipedia에 명확하게 설명되어 있으며이 예제를 참조 할 수도 있습니다.
Yuval Filmus

이것이 DFS를 수행하는 유효한 방법이라는 것을 알고 있습니다. 나는 그것이 다른 방법으로 이루어 졌는지 단순히 묻고 있습니다.
soandos

그러면 결과가 달라집니다. 죄송합니다. 직접 해결해야합니다.
Yuval Filmus

2
@soandos 일반적으로 여러 DFS 탐색이있을 수 있습니다. 여기에 사용 된 개념은 주어진 순회와 관련이 있으며 여러 순회에 대해 다릅니다.
Raphael

9

방향이 지정되지 않은 그래프에서 DFS 순회는 정점에서 발생하는 모든 모서리가 탐색되므로 교차 모서리를 떠나지 않습니다.

그러나 유향 그래프에서 해당 정점이 현재 정점의 조상 또는 후손이 아닌 이전에 발견 된 정점으로 이어지는 모서리를 가로 질러 올 수 있습니다. 이러한 모서리를 교차 모서리라고합니다.


Aporov, 답변 주셔서 감사합니다. Wikipedia에 다이어그램으로 표시된 것처럼 DFS에서 정점 6에 도달하면 6에서 가로 지르는 3 개의 모서리가있는 것 같습니다.이 시점에서 정점 6은 "현재"입니다. 결국 당신은 가장자리를 정점 3으로 가로 지르려고합니다. 그럼에도 불구하고 3은 이미 3을 방문했지만 6에서 3까지의 가장자리가 있기 때문에 3은 "현재"정점 6의 후손입니다. 교차 모서리의 정의. 명확하지 않은 정의에 더 많은 것이 있어야합니다.

실제로 DFS에는 후면 모서리에 대한 트리 모서리 만 포함됩니다 (Intro to Algorithms Thm. 22.10).
jrhee17

2

DFS 순회에서 모든 자식이 완료되면 노드가 완료됩니다. 순회 중 각 노드의 발견 및 완료 시간을 표시하면 시작 및 종료 시간을 비교하여 노드가 하위 항목인지 확인할 수 있습니다. 실제로 모든 DFS 통과는 다음 규칙에 따라 가장자리를 분할합니다.

d [node]를 노드의 발견 시간으로, f [node]를 종료 시간으로 설정하십시오.

괄호 정리 모든 u, v에 대해 정확히 다음 중 하나를 보유합니다.
1. d [u] <f [u] <d [v] <f [v] 또는 d [v] <f [v] <d [u ] <f [u] 및 u 및 v 중 어느 것도 다른 쪽의 후손이 아닙니다.

  1. d [u] <d [v] <f [v] <f [u]이고 v는 u의 자손입니다.

  2. d [v] <d [u] <f [u] <f [v]이고 u는 v의 자손입니다.

따라서 d [u] <d [v] <f [u] <f [v]는 발생할 수 없습니다.
괄호와 같이 : () [], ([]) 및 [()]는 정상이지만 ([)] 및 [(])는 올바르지 않습니다.

예를 들어 모서리가있는 그래프를 고려하십시오 .A-
> B
A-> C
B-> C

방문 순서를 노드 레이블 문자열로 표시하십시오. 여기서 "ABCCBA"는 ((()))와 유사한 A-> B-> C (완료) B (완료) A (완료)를 의미합니다.

따라서 "ACCBBA"는 "(() ())"의 모델이 될 수 있습니다.

예 :
"CCABBA": CC가 A의 내부에 있지 않기 때문에 A-> C는 교차 모서리입니다.
"ABCCBA": 그런 다음 A-> C는 전방 모서리 (간접 하위)입니다.
"ACCBBA": 그런 다음 A-> C는 나무 가장자리 (직접 자손)입니다.

출처 :
CLRS :
https://mitpress.mit.edu/books/introduction-algorithms
Lecure Notes http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/depthSearch.htm

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.