2012-03-25 2 views
1

정말 약간의 안내가 필요합니다 :방향 별 그래프에서 모든 호를 순서대로 정렬하는 방식으로 정점에 삽입하는 모든 호가 앞으로 오게해야합니다 이 꼭지점에서아크 별 Topological 정렬

답변

3

위상 정렬에서 아무 것도 변경할 필요가 없습니다. 단지 그것을 사용할 수 있고 후 처리 할 수 ​​있습니다.

의사 코드

높은 수준 :

  1. 실행 위상 종류, 그것은 arr [명령 반복]의 각 정점 v에 대한 l
  2. 하자, 결과 배열이 arr
  3. 가 비어 가장자리 목록을 작성하자 :
    3.1. 각 (v,u)E :
    3.1.1. 반환 (v,u) to l
  4. l

를 추가이 방법의 장점은 그것을 그냥 사후 처리가 원하는 결과를 얻기 위해 수정하지 않고, 위상 일종의 블랙 박스를 사용할 수있다.

정확성 [증거의 스케치] :
이후 (v,u) 각 에지 - u은 위상 일종의 v 후, 당신이 그것을 인쇄 할 때, 그것은 v을 통해 이루어집니다, 당신은 어떤 정점을 인쇄하기 전에 따라서 (v,u)가 인쇄되어 나타납니다 u에 첨부

복잡성 :
O(|V|+|E|) 위상 정렬 후 처리 [순회 모든 꼭지점 모든 가장자리]의 O(|V|+|E|).

+0

예, big-O은 동일하지만 작업량의 두 배를해야합니다. – tchap

+0

@OndrejKupka : 실제로 상수는 토폴로지 정렬을 수정하는 것보다 높을 것입니다 [캐시 성능으로 인해 두 배가되지는 않지만] ** topological sort를 캡슐화하는 이점을 위해서. [이것은 매우 중요한 측면입니다!]. 실제 응용 프로그램에서 *이 부분이 핫스팟 *임을 알게되면 동의 한 것으로 다시 작성하고 싶을 것입니다. – amit

+0

예, 아무 것도없이 많은 코드를 복사하는 것은 실제적이지 않습니다. – tchap

0

"전통적"위상 정렬은 정점을 정렬하는 반면,이 정렬은 정점을 정렬합니다. 그렇지 않으면 원칙은 동일합니다 ...

+0

내가 알고 있지만 토폴로지 정렬 알고리즘을 볼 때 나는 아크를 위해 어떻게 바뀔 수 있는지 알려주지 않는다 ... 당신이 나를 위해 그것을 풀어주기를 원하지 않지만 약간의 안내를 부탁한다. – Nusha

+0

위키 페이지로 이동 당신이 통과 한 페이지, opcode 섹션. 'n을 L에 삽입 '하고'그래프에서 가장자리 e 제거 '라고하는 단계에서'가장자리 e를 L에 삽입'합니다. 이렇게하면 정점 대신 호를 기억하게됩니다. – tchap