Tarjan의 강하게 연결된 구성 요소 알고리즘에 대한 좋은 설명은 무엇입니까?


최상 답변

유 방향 그래프에서 강하게 연결된 구성 요소 (SCC)는 다음 중 하나입니다. 주기 또는 개별 정점.

그래프에 DFS를 적용하고 생성 된 DFS 트리의 각 노드에 대해 두 가지 속성을 추적합니다. 1. DFS에서 처음 발견 된 시간 (또는 순서). ( 2. 도달 할 수있는 가장 오래된 조상의 순서 (예 : p2) 처음에는 두 노드 모두 모든 노드에 대해 동일합니다. 첫 번째 속성은 일정하게 유지되지만 두 번째 속성은 재귀 DFS 호출 중에 업데이트 될 수 있으며 조상에 대한 뒤쪽 가장자리를 찾는 데 사용될 수 있습니다. 인접한 모든 정점에 대한 재귀 DFS 호출 후 둘 다 동일한 경우 모든 정점에 대해 1이됩니다. 사이클의 일부가 아닌 개별 정점입니다. OR 2.주기의 일부이므로 모든 하위 항목 (생성 된 DFS 트리에서)이 도달 할 수 있습니다 (조상에게 도달 할 수 없음). 즉,이 노드에서 시작하고 끝낼 수 있습니다. 두 번째 경우 인쇄 할 모든 하위 항목을 추적 할 수 있습니다.

이 애니메이션은 설명을 이해하는 데 도움이됩니다 (첫 번째 정수는 p1, 두 번째는 p2) :

@ File : Tarjan “s Algorithm Animation.gif

자세한 설명 및 C ++ 구현 : Tarjan”s 강력하게 연결된 구성 요소를 찾는 알고리즘-GeeksforGeeks

PS :이 알고리즘은 관절 점, 브리지 및 이중 연결 그래프를 찾는 것과 매우 유사합니다. 따라서 이것을 먼저 배우면 알고리즘에 대한 더 나은 직관을 얻을 수 있습니다. http://www.geeksforgeeks.org/articulation-points-or-cut-vertices-in-a-graph/ http://www.geeksforgeeks.org/bridge-in-a-graph/

Answer

알고리즘은 방향성 그래프를 입력으로 사용하여 그래프의 꼭지점을 그래프의 강하게 연결된 구성 요소로 분할합니다. 그래프의 각 꼭지점은 강하게 연결된 구성 요소 중 정확히 하나에 나타납니다. 방향성주기에 있지 않은 모든 정점은 자체적으로 강하게 연결된 구성 요소를 형성합니다. 예를 들어, 차수 또는 이탈도가 0 인 정점 또는 비순환 그래프의 정점

The 알고리즘의 기본 개념은 다음과 같습니다. 깊이 우선 검색은 임의의 시작 노드에서 시작됩니다 (그리고 후속 깊이 우선 검색은 아직 발견되지 않은 모든 노드에서 수행됩니다). 깊이 우선 검색과 마찬가지로 검색은 그래프의 모든 노드를 정확히 한 번 방문하여 이미 탐색 된 노드를 다시 방문하지 않습니다. 따라서 검색 트리 모음은 그래프의 스패닝 포리스트입니다. 강력하게 연결된 구성 요소는이 포리스트의 특정 하위 트리로 복구됩니다. 이러한 하위 트리의 루트를 강력하게 연결된 구성 요소의 “루트”라고합니다. 강력하게 연결된 구성 요소의 모든 노드는 검색을 통해 발견 된 구성 요소의 첫 번째 노드 인 경우 루트 역할을 할 수 있습니다.

Tarjan의 강력한 연결 구성 요소 알고리즘

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다