CSCI 210 Data Structures & Algorithms

Download Report

Transcript CSCI 210 Data Structures & Algorithms

CSCE 210 Data Structures and Algorithms

Prof. Amr Goneid AUC

Part 10. Graphs

Prof. Amr Goneid, AUC 1

Graphs

Prof. Amr Goneid, AUC 2

Graphs

 Basic Definitions  Paths and Cycles  Connectivity  Other Properties  Representation  Examples of Graph Algorithms:  Graph Traversal  Shortest Paths  Minimum Cost Spanning Trees Prof. Amr Goneid, AUC 3

1. Basic Definitions

A graph G (V,E)

can be defined as a pair

(V,E)

, where V is a set of vertices, and E is a set of

B A G F E

edges between the vertices

E = {(u,v) | u, v

V}. e.g.

V = {A,B,C,D,E,F,G} C D E = {( A,B),(A,F),(B,C),(C,G),(D,E),(D,G),(E,F),(F,G)}

If no weights are associated with the edges, an edge is either present(“1”) or absent (“0”).

Prof. Amr Goneid, AUC 4

Basic Definitions

 A graph is like a road map. Cities are vertices. Roads from city to city are edges.

 You could consider junctions to be vertices, too. If you don't want to count them as vertices, a road may connect more than two cities. So strictly speaking you have

hyperedges

in a

hypergraph

.

 If you want to allow more than one road between each pair of cities, you have a

multigraph

, instead.

Prof. Amr Goneid, AUC 5

Basic Definitions

Adjacency:

If vertices u,v have an edge

e = (u,v) | u, v

V

then u and v are adjacent.

A weighted graph

has a weight associated with each edge.

B

2 1

A C

5 3

G

4 1

F D

2 2

E Undirected Graph

is a graph in which the adjacency is symmetric, i.e.,

e = (u,v) = (v,u) A Sub-Graph:

has a subset of the vertices and the edges Prof. Amr Goneid, AUC 6

Basic Definitions

Directed Graph:

is a graph in which adjacency is not symmetric, i.e.,

(u,v)

(v,u) B

2 Such graphs are also called

“Digraphs”

1

A C

5 3

G

4 1

F D Directed Weighted Graph:

A directed graph with a weight for each edge. Also called a

network.

2 2

E

Prof. Amr Goneid, AUC 7

2. Paths & Cycles

A F A F B G B G E Path: C C D D

A list of vertices of a graph where each vertex has an edge from it to the next vertex.

Simple Path:

A path that repeats no vertex.

Cycle:

A path that starts and ends at the same vertex and includes other vertices at most once .

E

Prof. Amr Goneid, AUC 8

Directed Acyclic Graph (DAG)

A F B G E C D Directed Acyclic Graph (DAG):

A directed graph with no path that starts and ends at the same vertex Prof. Amr Goneid, AUC 9

Hamiltonian Cycle

A F B G E C D

Icosian Game

Hamiltonian Cycle:

A cycle that includes all other vertices only once, e.g.

{D,B,C,G,A,F,E,D}

Named after Sir

William Rowan Hamilton

(1805 –1865) The

Knight’s Tour

problem is a Hamiltonian cycle problem Prof. Amr Goneid, AUC 10

Hamiltonian Cycle Demo

    A Hamiltonian Cycle is a cycle that visits each node exactly once. Here we show a Hamiltonian cycle on a 5-dimensional hypercube. It starts by completely traversing the 4-dimensional hypercube on the left before reversing the traversal on the right subcube. Hamiltonian cycles on hypercubes provide constructions for Gray codes: orderings of all subsets of

n

items such that neighboring subsets differ in exactly one element. Hamilitonian cycle is an NP-complete problem, so no worst-case efficient algorithm exists to find such a cycle. In practice, we can find Hamiltonian cycles in modest-sized graphs by using backtracking with clever pruning to reduce the search space.

Prof. Amr Goneid, AUC 11

Hamiltonian Cycle Demo

http://www.cs.sunysb.edu/~skiena/comb inatorica/animations/ham.html

Hamiltonian Cycle Demo

Prof. Amr Goneid, AUC 12

Euler Circuit

Leonhard Euler Konigsberg Bridges (1736) (not Eulerian) Euler Circuit:

A cycle that includes every edge once.

Used in bioinformatics to reconstruct the DNA sequence from its fragments Prof. Amr Goneid, AUC 13

Euler Circuit Demo

  An Euler circuit in a graph is a traversal of all the edges of the graph that visits each edge exactly once before returning home. A graph has an Euler circuit if and only if all its vertices are that of even degrees. It is amusing to watch as the Euler circuit finds a way back home to a seemingly blocked off start vertex. We are allowed (indeed required) to visit vertices multiple times in an Eulerian cycle, but not edges. Prof. Amr Goneid, AUC 14

Euler Circuit Demo

http://www.cs.sunysb.edu/~skiena/combin atorica/animations/euler.html

Euler Circuit Demo

Prof. Amr Goneid, AUC 15

3. Connectivity

A F A F B G E B G E C D C D Connected Graph:

An undirected graph with a path from every vertex to every other vertex

A Disconnected Graph

may have several connected components

Tree:

A connected Acyclic graph Prof. Amr Goneid, AUC 16

Connected Components Demo

 What happens when you start with an empty graph and add random edges between vertices?  As you add more and more edges, the number of connected components in the graph can be expected to drop, until finally the graph is connected.  An important result from the theory of random graphs states that such graphs very quickly develop a single ``giant'' component which eventually absorbs all the vertices. Prof. Amr Goneid, AUC 17

Connected Components Demo

http://www.cs.sunysb.edu/~skiena/combin atorica/animations/concomp.html

Randomly Connected Graph Demo

Prof. Amr Goneid, AUC 18

Connectivity

A F B G E C D B A F E C D Articulation Vertex:

if removed with all of its edges will cause a connected graph to be disconnected, e.g., G and D are articulation vertices Prof. Amr Goneid, AUC 19

Connectivity

Degree Of a vertex

, the number of edges connected to it.

B A G F E Degree Of a graph

, the maximum degree of any vertex

C D

(e.g. B has degree 2, graph has degree 3).

In a connected graph the

sum of the degrees is twice the number of edges, i.e

i V

  1

d i

 2

E

Prof. Amr Goneid, AUC 20

Connectivity

A F B G E C D In-Degree/Out-Degree:

the number of edges coming into/emerging from a vertex in a connected graph (e.g.

G has in-degree 3 and out-degree 1). Prof. Amr Goneid, AUC 21

Connectivity

Complete Graph:

There is an edge between every vertex and every other vertex. In this case, the number of edges is

B A C

maximum:

E

max 

V

(

V

 1 ) 2 Notice that the minimum number of edges for a connected graph ( a tree in this case) is (V-1)

D

Prof. Amr Goneid, AUC 22

Density (of edges)

Density of a Graph: Dense Graph:

D

V

( 2

E V

1 )

Number of edges is close to E max So, E =  (V 2 ) and D is close to 1 = V(V-1)/2.

Sparse Graph:

Number of edges is close to E min = (V-1). So, E = O(V) Prof. Amr Goneid, AUC 23

4. Other Properties

A D A B C B Planar Graph:

A graph that can be drawn in the plain without edges crossing Non-Planar

C

Prof. Amr Goneid, AUC

D

24

Other Properties

Graph Coloring:

To assign color (or any distinctive mark) to vertices such that no two adjacent vertices have the same color.

The minimum number of colors needed is called the

Chromatic Order

of the graph  (G).

For a complete graph,  (G) = V.

1 2 4 3

Prof. Amr Goneid, AUC 25

Other Properties

An Application: Find the number of exam slots for 5 courses. If a single student attends two courses, an edge exists between them.

CS Econ EE Math Phys

Slot 1 (red) Courses CS 2 (Green) 3 (Blue) EE, Econ, Phys Math Prof. Amr Goneid, AUC 26

5. Representation

Adjacency Matrix:

 V x V Matrix a(i,j)  a(i,j) = 1 if vertices (i) and (j) are adjacent, zero otherwise. Usually self loops are not allowed so that a(i,i) = 0.

 For undirected graphs, a(i,j) = a(j,i) A B C D  For weighted graphs, a(i,j) = w ij A 0 1 1 0

A D

B 1 0 1 0

B C

C 1 1 0 1 D 0 0 1 0 Prof. Amr Goneid, AUC 27

Representation

The adjacency matrix is appropriate for dense graphs but not compact for sparse graphs.

e.g., for a lattice graph, the degree of a vertex is 4, so that E = 4V.

Number of “1’s” to total matrix size is approximately 2 E / V 2 = 8 / V. For V >> 8, the matrix is dominated by zeros.

Prof. Amr Goneid, AUC 28

Representation

Adjacency List:

An array of vertices with pointers to linked lists of adjacent nodes, e.g., A B C D

B A A C C C B B D A

The size is O(E + V) so it is compact for sparse graphs.

C

Prof. Amr Goneid, AUC

D

29

6. Examples of Graph Algorithms

 Examples of Graph Algorithms:  Graph Traversal  Shortest Paths  Minimum Cost Spanning Trees Prof. Amr Goneid, AUC 30

6.1 Graph Traversal

Depth-First Search (DFS)

 Visits every node in the graph by following node connections in depth.

 Recursive algorithm.

 An Array

val[v]

records the order in which vertices are visited. Initialized to “unseen”.

 Any edge to a vertex that has not been seen is followed via the recursive call.

Prof. Amr Goneid, AUC 31

Algorithm

// Assume order = 0 initially void DFS() { int k; int unseen = -2; // Initialize all to unseen for (k = 1; k <= v; k++) val[k] = unseen; // Follow Nodes in Depth for (k = 1; k <= v; k++) if (val[k] == unseen) visit(k); }

Prof. Amr Goneid, AUC 32

Algorithm (continued)

void visit(int k) { int t; val[k] = ++order; for (t = 1; t <= v; t++) if (a[k][t] != 0) if (val[t] == unseen) visit(t); }

Prof. Amr Goneid, AUC 33

Example

start A B C D E F A B C D E F G 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 G 1 0 0 0 1 0 0

B D VAL[K]

A B C D E F G 1 Prof. Amr Goneid, AUC 1

A C F E G

34

Example

1

A

A B C D E F A B C D E F G 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 G 1 0 0 0 1 0 0 2

B C F D VAL[K]

A B C D E F G 1 2 Prof. Amr Goneid, AUC

E G

35

Example

A B C D E F A B C D E F G 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 G 1 0 0 0 1 0 0 2

B

3

C D

1

A F E G VAL[K]

A B C D E F G 1 2 3 Prof. Amr Goneid, AUC 36

Example

1

A

A B C D E F A B C D E F G 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 G 1 0 0 0 1 0 0 2

B

3

C

4

F D E G VAL[K]

A B C D E F G 1 2 3 4 Prof. Amr Goneid, AUC 37

Example

1

A

A B C D E F A B C D E F G 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 G 1 0 0 0 1 0 0 2

B

3

C

4

F

5

D E G VAL[K]

A B C D E F G 1 2 3 5 4 Prof. Amr Goneid, AUC 38

Example

1

A

A B C D E F A B C D E F G 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 G 1 0 0 0 1 0 0 2

B

3

C

4

F

5

D G E

6

VAL[K]

A B C D E F G 1 2 3 5 6 4 Prof. Amr Goneid, AUC 39

Example

1

A

A B C D E F A B C D E F G 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 G 1 0 0 0 1 0 0 2

B

3

C

4

F

5

D G

7

E

6

VAL[K]

A B C D E F G 1 2 3 5 6 4 7 Prof. Amr Goneid, AUC 40

Exercises

 Show how DFS can be used to determine the number of connected components in a graph.

 Explore the non-recursive version of the DFS using a stack. What will happen if you use a queue instead of the stack?

Prof. Amr Goneid, AUC 41

Non-Recursive DFS

// Assume unseen = -2 and hold = -1 // Val[ ] is set to “unseen” initially , order = 0 Stact S; // A stack of integers void DFS(int k) { int t; S.push(k); while (! S.stackIsEmpty()) { S.pop(k); val[k] = ++order; for (t = v; t >= 1; t--) // Scan from right to left if (a[k][t] != 0) if (val[t] == unseen) { S.push(t); val[t] = hold;} } }

Prof. Amr Goneid, AUC 42

Breadth-First Search (BFS)

// Replacing the stack by a queue, gives the BFS algorithm Queuet Q; // A queue of integers void BFS(int k) { int t; Q.enqueue(k); while (! Q.queueIsEmpty()) { Q.dequeue(k); val[k] = ++order; for (t = 1; t <= v; t++) // Scan from left to right if (a[k][t] != 0) if (val[t] == unseen) { Q.enqueue(t); val[t] = hold;} } }

Prof. Amr Goneid, AUC 43

Example BFS

1

A

2

B

3

C

4

F

5

G

6

D E

7 A B C D E F G 1 5 3 6 7 4 5 Prof. Amr Goneid, AUC 44

DFS and BFS of a Tree

For a tree structure:

DFS is equivalent to

Pre-order

traversal

BFS is equivalent to

Level-order

traversal

DFS Demo BFS Demo

Prof. Amr Goneid, AUC 45

Graph Traversal Demos

http://www.cs.sunysb.edu/~skiena/combi natorica/animations/search.html

http://www.cosc.canterbury.ac.nz/people/ mukundan/dsal/GraphAppl.html

Prof. Amr Goneid, AUC 46

Exercise

Model the shown maze as a graph.

 Show how DFS can be used to find the exit.

in out

Prof. Amr Goneid, AUC 47

8. A Simple Graph Class

    To represent a weighted undirected graph with a maximum of V max vertices and E max numbered 0,1,...V-1.

= V max (V max -1)/2 edges. The verices are The graph is assumed to be on a text file in the form of an adjacency matrix. The weights on the edges are assumed to be positive integers with zero weight indicating the absence of an edge.

When loaded from the text file, the weights are stored in a 2-D array (AdjMatrix) representing the adjacency matrix. Another array (edges) stores the non-zero edges in the graph.

An edge (u,v,w) existing between nodes (u) and (v) with weight (w) is modeled as a class (Edge). Prof. Amr Goneid, AUC 48

Edge Class

// File: Edge.h

// Definition of Edge class #ifndef EDGE_H #define EDGE_H typedef int weightType; // weights are positive integers class Edge { public: int u,v; weightType w; bool operator < (const Edge &e) { return (w < e.w); } bool operator <= (const Edge &e) { return (w <= e.w); } }; // end of class Edge declaration #endif // EDGE_H

Prof. Amr Goneid, AUC 49

Graph Class

// File: Graphs.h

// Graph library header file #ifndef GRAPHS_H #define GRAPHS_H #include #include "Edge.h" using namespace std; const int Vmax = 50; const int Emax = Vmax*(Vmax-1)/2; // Maximum number of vertices // Maximum number of edges

Prof. Amr Goneid, AUC 50

Graph Class

class Graphs { public: Graphs(); // Constructor ~Graphs(); // Destructor // Map vertex number to a name (character) char Vname(const int s) const; void getGraph(string fname); void dispGraph( ) const; int No_of_Verices( ) const; // Get Graph from text File (fname) // Display Ajacency Matrix // Get number of vertices (V) int No_of_Edges( ) const; void dispEdges( ) const; void DFS( ); // Get Number of Non-zero edges (E) // Display Graph edges // Depth First Search Traversal (DFS)

Prof. Amr Goneid, AUC 51

Graph Class

private: int V, E; // No.of vertices (V) and edges (E) weightType AdjMatrix[Vmax][Vmax]; // Adjacency Matrix Edge edges[Emax]; int order; int val[Vmax]; void getEdges(); // Array of non-zero edges // Order of Visit of a node in the DFS // Array holding order of traversal // Get edges from adjacency matrix void printEdge(Edge e) const; // Output an edge (e) void visit(int k); // Node Visit Function for DFS }; #endif // GRAPHS_H #include "Graphs.cpp"

Prof. Amr Goneid, AUC 52

6.2 Shortest Paths

(General)

In a graph G(V,E), find shortest paths from a single source vertex (S) to all other vertices.

 Edsger Dijkstra published an algorithm to solve this problem in 1959.

Prof. Amr Goneid, AUC 53

Shortest Paths: Dijkstra’s Algorithm

 -

Dijkstra’s Algorithm

Uses three arrays:

Distance[i]:

for V vertices: holds distance from (S) to vertex (i).

Processed[i]:

to flag processed vertices.

Via[i]:

holds index of vertex from which we can directly reach vertex (i).

Prof. Amr Goneid, AUC 54

Initialization

Distance[i]:

= 0 if S = i = W si =  if (S, i) are adjacent otherwise 

Processed[i] =

yes if i = S , No otherwise 

Via[i] =

S if (i , S) are adjacent, 0 otherwise Prof. Amr Goneid, AUC 55

Method

closest to S

not yet processed Already Processed Distance[j] S Distance[i] i z x j Wij y

Prof. Amr Goneid, AUC adjacent to j 56

Dijkstra’s Algorithm

Repeat

  

Find j = index of unprocessed node closest to (S) Mark (j) as now processed For each node (i) not yet processed: if (i) is adjacent to (j) then { new_distance = Distance[j] + W ij if new_distance < Distance[i] then { Distance[i] = new_distance ; Via[i] = j ; } } Until all vertices are processed

Prof. Amr Goneid, AUC 57

Example

Initial Source = A A B

0

yes

0 15

No

A

C

35

No

A

D

No

0

E

20

No

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 58

Example

j = B A B

0

yes

0 15

yes

A

C

35

No

A

D

No

0

E

20

No

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 59

Example

j = B i = D A B

0

yes

0 15

yes

A

C

35

No

A

D

55

No

B

E

20

No

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 60

Example

j = E A B

0

yes

0 15

yes

A

C

35

No

A

D

55

No

B

E

20

yes

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 61

Example

j = E i = C A B

0

yes

0 15

yes

A

C

30

No

E

D

55

No

B

E

20

yes

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 62

Example

j = C A B

0

yes

0 15

yes

A

C D

30

yes

E 55

No

B

E

20

yes

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 63

Example

j = C i = D A B

0

yes

0 15

yes

A

C D

30

yes

E 55

No

B

E

20

yes

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 64

Example

j = D A B

0

yes

0 15

yes

A

C D

30

yes

E 55

yes

B

E

20

yes

A

Dist Processed Via B 40 15 35 A 20 E 10 D 35 C

Prof. Amr Goneid, AUC 65

Example

Final A B

0

yes

0 15

yes

A

C D

30

yes

E 55

yes

B

E

20

yes

A

Dist Processed Via

A →B A→E A→E →C A→B→D

D B 40 15 35 35 A C 20 E 10

Prof. Amr Goneid, AUC 66

How to print the path?

/* The function Vname(k) maps a vertex number to a name (e.g a character A, B,.. etc). Given the via[ ] array resulting from Dijkstra’s algorithm, the following recursive function prints the vertices on the shortest path from source (s) to destination (i).

*/ void Graphs::printPath(int s, int i) const { if (i == s) cout << Vname(s); else { printPath(s,via[i]); cout << Vname(i); } }

Prof. Amr Goneid, AUC 67

Demo

http://www.cs.sunysb.edu/~skiena/com binatorica/animations/dijkstra.html

Shortest Paths Demo1 Shortest Paths Demo2

Prof. Amr Goneid, AUC 68

6.3 Minimum Cost Spanning Trees (a) Spanning Tree

Consider a connected undirected graph G(V,E). A sub-graph S(V,T) is a spanning tree of the graph (G) if: 

V(S) = V(G) and T

E

S is a tree, i.e., S is connected and has no cycles

Prof. Amr Goneid, AUC 69

Spanning Tree

F E A G B S(V,T): V = {A,B,C,D,E,F,G} T = {AB,AF,CD,DE,EF,FG} C Prof. Amr Goneid, AUC D 70

Spanning Tree

F E A G D Notice that: B C |T| = |V| - 1 and adding any edge (u,v)  T will produce a cycle so that S is no longer a spanning tree (e.g. adding (G,D)) Prof. Amr Goneid, AUC 71

One Graph, Several Spanning Trees

Prof. Amr Goneid, AUC 72

Spanning Forest

F E A G D B C For a connected undirected graph G(V,E), a spanning forest is S(V,T) if S has no cycles and T  E. S(V,T) will be composed of trees (V 1 ,T 1 ), (V 2 ,T 2 ), …, (V k ,T k ), k ≤ |V| Prof. Amr Goneid, AUC 73

(b) Minimum Cost Spanning Tree (MST)

Consider houses A..F connected by muddy roads with the distances indicated. We want to pave some roads such that:

We can reach a house from any other house via paved roads.

The cost of paving is minimum.

This problem is an example of finding a Minimum Spanning Tree (MST) B 7 A 6 D 4 3 4 E C 3 4 2 5 G F 9

Prof. Amr Goneid, AUC 74

Minimum Spanning Tree (MST)

Cost:

For a weighted graph, the cost of a spanning tree

A 4 E

is the sum of the weights

7

 of the edges in that tree.

Minimum Spanning tree: B

A spanning tree of minimum cost

6

 For the shown graph, the

D

minimum cost is 22

3 4 C 3 4 2 5 G F 9

Prof. Amr Goneid, AUC 75

Kruskal’s Algorithm for MST

 The algorithm was written by

Joseph Kruskal

in 1956 

A Greedy Algorithm:

Builds the MST edge by edge into a set of edges (T). At a given stage, chooses an edge that results in minimum increase in the sum of costs included so far in (T). The set (T) might not be a tree at all stages of the algorithm, but it can be completed into a tree iff there are no cycles in (T). Prof. Amr Goneid, AUC 76

Kruskal’s Algorithm for MST

 

Builds up forests

single tree. , then joins them in a

Constraints:

- The graph must be connected.

- Uses exactly V-1 edges.

- Excludes edges that form a cycle.

Prof. Amr Goneid, AUC 77

Abstract Algorithm

-

Form Set E of edges in increasing order of costs.

- Set MST T = empty -Repeat

 

Select an edge (e) from top.

Delete edge from E set.

Add edge (e) to (T) if it does not form a cycle, otherwise, reject.

-Until we have V-1 successful edges.

Prof. Amr Goneid, AUC 78

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

79

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

80

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes yes Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

81

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes yes yes Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

82

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes yes yes NO Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

83

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes yes yes NO yes Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

84

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes yes yes NO yes yes Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

85

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes yes yes NO yes yes No Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

86

Example

6 7 8 1 2 3 4 5

Edge

E

u

A C A C E D B F

v

C E E D G F D 4 5 6 2

w

3 3 4 4

accept

yes yes yes NO yes yes NO yes Prof. Amr Goneid, AUC

7 A 4 E 3 3 4 G 2 9 B 6 D 4 C 5 F

87

How to test for Cycles?

Simple Union- Simple Find

Given a set (1,2,..,n} initially partitioned into n disjoint sets (each element is its own parent): 

Find (i):

return the sub-set that (i) is in (i.e. return the parent set of i).

Union (k,j):

combine the two sub-sets that (j) and (k) are in (make k the child of j) 

Union

builds up a tree, while for the root of the tree.

find

will search  Cost is

O(log n)

Prof. Amr Goneid, AUC 88

How to test for Cycles?

Represent vertices as Disjoint Sets

A B C D E F G 

Initially, each node is its own parent (-1)

A 1 B 2 C 3 D 4 E 5 F 6 G 7 -1 -1 -1 -1 -1 -1 -1

Let the parent set of u be p(u)

Prof. Amr Goneid, AUC 89

How to test for Cycles?

When edge (E,F) is selected, we find that p(E)

p(F). So, we make a union between p(E) and p(F), i.e., p(F) becomes the child of p(E). Same for edge (A,C)

A B C D E F G A 1 B 2 C 3 -1 -1 1 D 4 E 5 F 6 -1 -1 5 G 7 -1

Parent table after selecting (E,F) then (A,C)

Prof. Amr Goneid, AUC 90

How to test for Cycles?

 

When (C,E) is selected, we find that P(C)

P(E). This means that the edge will be accepted.

Select (A,E), Find will give P(A) = P(E) (cycle, reject).

A D E F G B C A 1 B 2 C 3 D 4 E 5 F 6 G 7

Parent table after accepting (E,F) then (A,C), then (C,E), then rejecting (A,E)

-1 -1 1 -1 3 5 -1 Prof. Amr Goneid, AUC 91

How to test for Cycles?

 

When (C,D) is selected, we find that P(C)

the edge will be accepted.

Select (E,G), Find will give P(E)

P(D). This means that P(G) (accept).

A D G E F B C A 1 B 2 C 3 -1 -1 1 D 4 3 E 5 3 F 6 5 G 7 5

Parent table after 5 th accepted edge

Prof. Amr Goneid, AUC 92

How to test for Cycles?

 

When (D,F) is selected, we find that P(D) = P(F). This means that the edge will be rejected.

Select (B,D), Find will give P(B)

P(D) (accept).

A D G E F B C A 1 B 2 -1 4 C 3 1 D 4 3 E 5 3 F 6 5 G 7 5

Parent table after 6 th accepted edge (Final MST)

Prof. Amr Goneid, AUC 93

Kruskal’s Algorithm

1.

2.

3.

4.

5.

6.

7.

8.

9.

Insert edges with weights into a minimum heap Put each vertex in a separate set i = 0 ; While ((i < V-1) && (heap not empty)) { Remove edge (u,v) from heap Find set (j) of connected vertices having (u) Find set (k) of connected vertices having (v) if ( j != k ) { i++; MST [i].u = u; MST [i].v = v; MST [i].w = w; Make a Union between set (j) and set (k); } }

Prof. Amr Goneid, AUC 94

Kruskal’s Algorithm Demo

http://www.cs.sunysb.edu/~skiena/combinatorica/ animations/mst.html

Kruskal's algorithm at work on a graph of distances between 128 North American cities. Almost imperceptively at first, short edges get added all around the continent, slowly building forests until the tree is completed.

MST (Kruskal) Demo1 MST (Kruskal) Demo2

Prof. Amr Goneid, AUC 95

Learn on your own about:

  

Directed Graphs or

Digraphs Edge-List

representation of graphs

Prim’s algorithm

for Minimum Spanning Trees. The algorithm was developed in 1930 by Czech mathematician Vojtěch Jarník and later independently by computer scientist Robert C. Prim in 1957 and rediscovered by Edsger Dijkstra in 1959. Therefore it is also sometimes called the DJP algorithm, the Jarník algorithm, or the Prim– Jarník algorithm.

Prof. Amr Goneid, AUC 96