• 검색 결과가 없습니다.

Topological Sort

N/A
N/A
Protected

Academic year: 2022

Share "Topological Sort"

Copied!
90
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Kyunghan Lee

Networked Computing Lab (NXC Lab)

Department of Electrical and Computer Engineering Seoul National University

https://nxc.snu.ac.kr

(2)

□ In this topic, we will discuss:

§ Motivations

§ Review the definition of a directed acyclic graph (DAG)

§ Describe a topological sort and applications

§ Kahn’s algorithm

(3)

□ Given a set of tasks with dependencies,

is there an order in which we can complete the tasks?

□ Dependencies form a partial ordering

§ A partial ordering on a finite number of objects can

be represented as a directed acyclic graph (DAG)

(4)

□ Cycles in dependencies can cause issues...

http://xkcd.com/754/

(5)

Claim:

In a DAG, given two different vertices v j and v k ,

there cannot both be a path from v j to v k and a path from v k to v j

□ Proof by contradiction:

Assume otherwise; thus there exists two paths:

(v j , v 1,1 , v 1,2 , v 1,3 , … , v k ) (v k , v 2,1 , v 2,2 , v 2,3 , … , v j ) From this, we can construct the path

(v j , v 1,1 , v 1,2 , v 1,3 , … , v k , v 2,1 , v 2,2 , v 2,3 , … , v j )

This path is a cycle, but it is assumed a DAG

(6)

□ A topological sorting of the vertices in a DAG is an ordering

v 1 , v 2 , v 3 , …, v |V|

such that v j should appear before v k

if there is a path from v j to v k

(7)

□ Given this DAG, a topological sort is

H, C, I, D, J, A, F, B, G, K, E, L

(8)

□ For example, there are paths from H, C, I, D, and J to F, so all these must come before F in a topological sort

H , C , I , D , J ,A, F , B, G, K, E, L

(9)

□ Consider the course instructor getting ready for a dinner out

□ He must wear the following:

§ jacket, shirt, briefs, socks, tie, etc.

□ There are certain constraints:

§ the pants really should go on after the briefs,

§ socks are put on before shoes

(10)

□ The following is a task graph for getting dressed:

□ One topological sort is:

§ briefs, pants, wallet, keys, belt, socks, shoes, shirt, tie, jacket, iPod, watch

□ A more reasonable topological sort is:

(11)

□ C++ header and source files have #include statements

§ A change to an included file requires a recompilation of the current file

§ On a large project, it is desirable to recompile only those source files that depended on those files which changed

§ For large software projects, full compilations may take hours

(12)

□ The following is a DAG

representing a number of tasks

§ The green arrows represent dependencies

§ The numbering indicates a

topological sort of the tasks

(13)

□ Idea:

§ Given a DAG V, make a copy W and iterate:

• Find a vertex v in W with in-degree zero

• Let v be the next vertex in the topological sort

• Continue iterating with the vertex-induced sub-graph W \ {v}

(14)

On this graph, iterate the following |V | = 12 times

§ Choose a vertex v that has in-degree zero

§ Let v be the next vertex in our topological sort

§ Remove v and all edges connected to it

(15)

□ Let’s step through this algorithm with this example

§ Which task can we start with?

§ Of Tasks C or H, choose Task C

(16)

□ Having completed Task C, which vertices have in- degree zero?

C

(17)

□ Only Task H can be completed, so we choose it

C

(18)

□ Having removed H, what is next?

C, H

(19)

□ Both Tasks D and I have in-degree zero

§ Let us choose Task D

C, H

(20)

□ We remove Task D, and now?

C, H , D

(21)

□ Both Tasks A and I have in-degree zero

§ Let’s choose Task A

C, H , D

(22)

□ Having removed A, what now?

C, H , D, A

(23)

□ Both Tasks B and I have in-degree zero

§ Choose Task B

C, H , D, A

(24)

□ Removing Task B, we note that Task E still has an in- degree of two

§ Next?

C, H , D, A , B

(25)

□ As only Task I has in-degree zero, we choose it

C, H , D, A , B

(26)

□ Having completed Task I, what now?

C, H , D, A , B, I

(27)

□ Only Task J has in-degree zero: choose it

C, H , D, A , B, I

(28)

□ Having completed Task J, what now?

C, H , D, A , B, I, J

(29)

□ Only Task F can be completed, so choose it

C, H , D, A , B, I, J

(30)

□ What choices do we have now?

C, H , D, A , B, I, J, F

(31)

□ We can perform Tasks G or K

§ Choose Task G

C, H , D, A , B, I, J, F

(32)

□ Having removed Task G from the graph, what next?

C, H , D, A , B, I, J, F, G

(33)

□ Choosing between Tasks E and K, choose Task E

C, H , D, A , B, I, J, F, G

(34)

□ At this point, Task K is the only one that can be run

C, H , D, A , B, I, J, F, G, E

(35)

□ And now that both Tasks G and K are complete, we can complete Task L

C, H , D, A , B, I, J, F, G, E, K

(36)

□ There are no more vertices left

C, H , D, A , B, I, J, F, G, E, K, L

(37)

□ Thus, one possible topological sort would be:

C, H, D, A, B, I, J, F, G, E, K, L

(38)

□ Note that topological sorts need not be unique:

C, H, D, A, B, I, J, F, G, E, K, L

H, I, J, C, D, F, G, K, L, A, B, E

(39)

□ Kahn’s algorithm solves the topological sort problem

□ Step #1: Preparing In-degree array

§ Construct an array, maintaining the in-degrees of each vertex

§ Requires Q(|V |) memory

A 1

B 1

C 0

D 2

E 4

F 2

G 1

H 0

I 1

J 1

(40)

□ Step #2: Enumerating in-degree array

§ #2-A. Prepare an empty queue

§ #2-B. Enqueue all the vertices with the in-degree of zero

§ #2-C. While the queue is not empty

• Dequeue a vertex

• Add this vertex to the sequence of topological sort

• Decrement the in-degree of all its neighboring vertices

• Enqueue the neighboring vertices with the in-degree of zero

(41)

□ With the previous example, we initialize:

§ The array of in-degrees

§ The queue

A 1

B 1

C 0

D 2

E 4

F 2

G 1

H 0

I 1

J 1

(42)

□ Stepping through the table, push all source vertices into the queue

A 1

B 1

C 0

D 2

E 4

F 2

G 1

H 0

I 1

J 1

(43)

□ Stepping through the table, push all source vertices into the queue

A 1

B 1

C 0

D 2

E 4

F 2

G 1

H 0

I 1

J 1

(44)

□ Pop the front of the queue

A 1

B 1

C 0

D 2

E 4

F 2

G 1

H 0

I 1

J 1

(45)

□ Pop the front of the queue

§ C has one neighbor: D

A 1

B 1

C 0

D 2

E 4

F 2

G 1

H 0

I 1

J 1

(46)

□ Pop the front of the queue

§ C has one neighbor: D

§ Decrement its in-degree

A 1

B 1

C 0

D 1

E 4

F 2

G 1

H 0

I 1

J 1

(47)

□ Pop the front of the queue

A 1

B 1

C 0

D 1

E 4

F 2

G 1

H 0

I 1

J 1

(48)

□ Pop the front of the queue

§ H has two neighbors: D and I

A 1

B 1

C 0

D 1

E 4

F 2

G 1

H 0

I 1

J 1

(49)

□ Pop the front of the queue

§ H has two neighbors: D and I

§ Decrement their in-degrees

A 1

B 1

C 0

D 0

E 4

F 2

G 1

H 0

I 0

J 1

(50)

□ Pop the front of the queue

§ H has two neighbors: D and I

§ Decrement their in-degrees

• Both are decremented to zero, so push them onto the queue

A 1

B 1

C 0

D 0

E 4

F 2

G 1

H 0

I 0

J 1

(51)

□ Pop the front of the queue

§ H has two neighbors: D and I

§ Decrement their in-degrees

• Both are decremented to zero, so push them onto the queue

A 1

B 1

C 0

D 0

E 4

F 2

G 1

H 0

I 0

J 1

(52)

□ Pop the front of the queue

A 1

B 1

C 0

D 0

E 4

F 2

G 1

H 0

I 0

J 1

(53)

□ Pop the front of the queue

§ D has three neighbors: A, E and F

A 1

B 1

C 0

D 0

E 4

F 2

G 1

H 0

I 0

J 1

(54)

□ Pop the front of the queue

§ D has three neighbors: A, E and F

§ Decrement their in-degrees

A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 1

(55)

□ Pop the front of the queue

§ D has three neighbors: A, E and F

§ Decrement their in-degrees

• A is decremented to zero, so push it onto the queue A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 1

(56)

□ Pop the front of the queue

A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 1

(57)

□ Pop the front of the queue

§ I has one neighbor: J

A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 1

(58)

□ Pop the front of the queue

§ I has one neighbor: J

§ Decrement its in-degree

A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(59)

□ Pop the front of the queue

§ I has one neighbor: J

§ Decrement its in-degree

• J is decremented to zero, so push it onto the queue A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(60)

□ Pop the front of the queue

A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(61)

□ Pop the front of the queue

§ A has one neighbor: B

A 0

B 1

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(62)

□ Pop the front of the queue

§ A has one neighbor: B

§ Decrement its in-degree

A 0

B 0

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(63)

□ Pop the front of the queue

§ A has one neighbor: B

§ Decrement its in-degree

• B is decremented to zero, so push it onto the queue A 0

B 0

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(64)

□ Pop the front of the queue

A 0

B 0

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(65)

□ Pop the front of the queue

§ J has one neighbor: F

A 0

B 0

C 0

D 0

E 3

F 1

G 1

H 0

I 0

J 0

(66)

□ Pop the front of the queue

§ J has one neighbor: F

§ Decrement its in-degree

A 0

B 0

C 0

D 0

E 3

F 0

G 1

H 0

I 0

J 0

(67)

□ Pop the front of the queue

§ J has one neighbor: F

§ Decrement its in-degree

• F is decremented to zero, so push it onto the queue A 0

B 0

C 0

D 0

E 3

F 0

G 1

H 0

I 0

J 0

(68)

□ Pop the front of the queue

A 0

B 0

C 0

D 0

E 3

F 0

G 1

H 0

I 0

J 0

(69)

□ Pop the front of the queue

§ B has one neighbor: E

A 0

B 0

C 0

D 0

E 3

F 0

G 1

H 0

I 0

J 0

(70)

□ Pop the front of the queue

§ B has one neighbor: E

§ Decrement its in-degree

A 0

B 0

C 0

D 0

E 2

F 0

G 1

H 0

I 0

J 0

(71)

□ Pop the front of the queue

A 0

B 0

C 0

D 0

E 2

F 0

G 1

H 0

I 0

J 0

(72)

□ Pop the front of the queue

§ F has three neighbors: E, G and K

A 0

B 0

C 0

D 0

E 2

F 0

G 1

H 0

I 0

J 0

(73)

□ Pop the front of the queue

§ F has three neighbors: E, G and K

§ Decrement their in-degrees

A 0

B 0

C 0

D 0

E 1

F 0

G 0

H 0

I 0

J 0

(74)

□ Pop the front of the queue

§ F has three neighbors: E, G and K

§ Decrement their in-degrees

• G and K are decremented to zero,

so push them onto the queue

A 0

B 0

C 0

D 0

E 1

F 0

G 0

H 0

I 0

J 0

(75)

□ Pop the front of the queue

A 0

B 0

C 0

D 0

E 1

F 0

G 0

H 0

I 0

J 0

(76)

□ Pop the front of the queue

§ G has two neighbors: E and L

A 0

B 0

C 0

D 0

E 1

F 0

G 0

H 0

I 0

J 0

(77)

□ Pop the front of the queue

§ G has two neighbors: E and L

§ Decrement their in-degrees

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(78)

□ Pop the front of the queue

§ G has two neighbors: E and L

§ Decrement their in-degrees

• E is decremented to zero, so push it onto the queue A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(79)

□ Pop the front of the queue

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(80)

□ Pop the front of the queue

§ K has one neighbors: L

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(81)

□ Pop the front of the queue

§ K has one neighbors: L

§ Decrement its in-degree

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(82)

□ Pop the front of the queue

§ K has one neighbors: L

§ Decrement its in-degree

• L is decremented to zero, so push it onto the queue A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(83)

□ Pop the front of the queue

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(84)

□ Pop the front of the queue

§ E has no neighbors—it is a sink

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(85)

□ Pop the front of the queue

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(86)

□ Pop the front of the queue

§ L has no neighbors—it is also a sink

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(87)

□ The queue is empty, so we are done

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(88)

□ The array stores the topological sorting

A 0

B 0

C 0

D 0

E 0

F 0

G 0

H 0

I 0

J 0

(89)

□ Step #1: Preparing the in-degree array

§ Takes Q(|V| + |E|) runtime

• If the DAG was represented as an adjacency list

§ Takes Q(|V| 2 ) runtime

• If the DAG was represented as an adjacency matrix

□ Step #2: Keep enumerating the in-degree array

§ Takes Q(|V| + |E|) runtime

• Queued vertices |V| times and decrementing in-degree |E| times

(90)

□ In this topic, we have discussed topological sorts

§ Sorting of elements in a DAG

§ Kahn’s Algorithm

• A table of in-degrees

• Select that vertex which has current in-degree zero

References

[1] Wikipedia, http://en.wikipedia.org/wiki/Topological_sorting

참조

관련 문서

-Reverse : 등록되어 있는 데이터들의 순서를 역순으로 정렬하고 결과를 List 형식으로 반환 -Sort : 등록되어 있는 데이터들의 순서를 올림순으로 정렬하고 결과를 List

Sesame street film- Louisiana Zydeco music 참조 http://www.youtube.com/watch?v=c_SGKnw611k Cookie and the cupcakes – Mathilda

2. Pulse AUX/ iPod en la unidad o FUNCTION en el control remoto para seleccionar la función iPod. En el modo [iPod], puede utilizar el iPod con la pantalla del iPod

따라서 사용자의 위치를 계산하기 위해서는 사용자의 3차원 위치 좌표 뿐만 아니라 위성 간의 시간 변 수를 포함하여 4개의 연립방정식을 풀어서 좌표로 결정하기

실제 백종원 대표가 체험을 하는 과정에서 문제가 발견될 경우 바로바로 지적을 하고, 그 모습을 식당 사장님들은 본부에서 모니터 화면을 통해 보기 때문에

또한 공공 데이터포털에서 제공하는 다양한 오픈 API 데이터를 이용하여 우리 생활에서 활용할 수 있는 방법을, 디자인 씽킹 과정을 통해 창의적인 설계를 할

하늘에 떠 있는 GPS 위성의 신호를 이용하여 현재 사용자 의 위치를 계산해 주는 것이 GPS 위성항법시스템입니다.. 미국, 러시아 GLONASS, 유럽연합의 Galileo, 중국의

- 어떤 시스템을 만들면 자연재해와 같은 위급상황에서 전기에너지를 원활하게 사용할 수 있을지 설계해 보자.. 여러분들은 자연재해로