topological sort 예제

다음은 위상 정렬의 구현입니다. 연결이 끊어진 그래프의 경우 Depth First Traversal 코드를 참조하고 아래에 제공된 두 번째 코드와 아래 코드간의 차이점을 확인하십시오. 응용 프로그램: 토폴로지 정렬은 주로 작업 간에 지정된 종속성에서 작업을 예약하는 데 사용됩니다. 컴퓨터 과학에서 이러한 유형의 응용 프로그램은 명령 스케줄링, 스프레드시트에서 수식 값을 다시 계산할 때 수식 셀 평가 순서, 논리 합성, makefiles에서 수행할 컴파일 작업의 순서 결정, 데이터 에서 발생합니다. 직렬화하고 링커의 기호 종속성을 해결합니다[2]. 위의 이미지와 같이 위상차의 순서는 7 6 6 5 4 3 2 1 0입니다. 그래프에 하나 이상의 위상차 정렬이 있을 수 있습니다. 위의 예에서와 같이 7 5 6 4 2 3 1 0도 위상 차이다. 위상 분류 대 깊이 첫 번째 순회(DFS): DFS에서는 정점을 인쇄한 다음 인접한 정점에 대해 DFS를 재귀적으로 호출합니다. 토폴로지 정렬에서는 인접한 정점 앞에 정점을 인쇄해야 합니다. 예를 들어 지정된 그래프에서 정점 `5`는 정점 `0` 앞에 인쇄되어야 하지만 DFS와 달리 정점 `4`도 정점 `0` 앞에 인쇄되어야 합니다.

따라서 토폴로지 정렬은 DFS와 다릅니다. 예를 들어 표시된 그래프의 DFS는 “5 2 3 1 0 4″이지만 위상 분류 토폴로지 정렬이 아닙니다: 방향그래프의 위상 정렬 또는 위상 순서는 정점의 모든 방향 가장자리 uv에 대해 정점 v로 정렬되도록 정점의 선형 순서입니다. , u는 순서에 V 앞에 온다. 위상 순서는 그래프에 지향된 사이클이 없는 경우, 즉 지시된 비순환 그래프(DAG)인 경우에만 가능합니다. 출처: wiki Le`ts는 그래프에서 위상 분류를 찾는 방법을 알아봅합니다. 그래서 기본적으로 우리는 모든 정점 $$v_i$$에 대 한 정점의 순열을 찾으려면, 모든 정점 $$v_j$$ 가장자리 가 나오고 쪽으로 지시 하는 $$v_i$$전에 온다 $$v_i$. 우리는 우리의 위상 정렬을 나타내는 배열 $$T$$를 유지 합니다. 따라서 $ $N $ $ 정점을 갖는 그래프의 경우 $ $in _degree[$$$의 크기 $$N$$$를 가지고 있으며, 그 $$i^{th}$$$ 요소는 이미 $$T$$$에 삽입되지 않은 정점의 수를 알려주며, 그로부터 의지는 $$i$$에 있습니다. 우리는 배열 $$T$$$에 정점 $$v_i$$를 더해 드리며, 이렇게 하면 $$in $v_i$$$에서 $$v_j$$$$$$$$$$$$$$$$$$$의 값을 감소시킬 것입니다. 이렇게 하면 $$v_j$$를 향한 가장자리가 있는 하나의 정점을 삽입했습니다. 따라서 언제든지 $$in_degree[$$$$$$$$]의 값인 정점만 삽입할 수 있습니다. BFS 통과를 사용하는 알고리즘은 다음과 같습니다 : 방향 변세포 그래프의 정점의 위상 정렬은 정점의 순서입니다 $$v_1, v_2, …

이러한 방식으로 v_n$$는 정점 $$v_j$$$를 향한 가장자리가 있는 경우 $$v_i$$에서 $$v_i$$를 $v 앞에 옵니다.