• Tidak ada hasil yang ditemukan

Graph

N/A
N/A
Protected

Academic year: 2024

Membagikan "Graph"

Copied!
45
0
0

Teks penuh

(1)

Data Structures

Instructor Maher Hadiji [email protected]

2015-2016 Computer Science Department

College of Computer at Al-Lith

Chapter 7: Graph

1

What’s a Graph?

A bunch of vertices connected by edges.

1

2

3 4

vertex

edge

(2)

Basic Concepts

A graph is an ordered pair (V, E).

V is the set of vertices. (You can think of them as integers 1, 2, …, n.)

E is the set of edges. An edge is a pair of vertices: (u, v).

Note: since E is a set, there is at most one edge between two vertices. (Hypergraphs permit multiple edges.)

Edges can be labeled with a weight:

10

Concepts: Directedness

In a directed graph, the edges are “one- way.” So an edge (u, v) means you can go from u to v, but not vice versa.

In an undirected graph, there is no

direction on the edges: you can go either way. (Also, no self-loops.)

a self-loop

(3)

Concepts: Adjacency

Two vertices are adjacent if there is an edge between them.

For a directed graph, u is adjacent to v iff there is an edge (v, u).

u w

v

u is adjacent to v.

v is adjacent to u and w.

w is adjacent to v.

u w

v

u is adjacent to v.

v is adjacent to w.

Concepts: Degree

Undirected graph: The degree of a vertex is the number of edges touching it.

For a directed graph, the in-degree is the number of edges entering the vertex, and the out-degree is the number leaving it. The degree is the in-degree + the out-degree.

degree 4

(4)

Concepts: Path

A path is a sequence of adjacent vertices. The length of a path is the number of edges it

contains, i.e. one less than the number of vertices.

We write u ⇒ v if there is path from u to v.

We say v is reachable from u.

1

2

3 4

Is there a path from 1 to 4?

What is its length?

What about from 4 to 1?

How many paths are there from 2 to 3? From 2 to 2? From 1 to 1?

Concepts: Cycle

A cycle is a path of length at least 1 from a vertex to itself.

A graph with no cycles is acyclic.

A path with no cycles is a simple path.

1

2

3

(5)

Connectivity

Undirected graphs are connected if there is a path between any two vertices

Directed graphs are strongly connected if there is a path from any one vertex to any other

Directed graphs are weakly connected if there is a path between any two vertices, ignoring direction

A complete graph has an edge between every pair of vertices

Concepts: Trees

A free tree is a connected, acyclic, undirected graph.

To get a rooted tree, designate some vertex as the root.

If the graph is disconnected, it’s a forest.

Facts about free trees:

(6)

Graph Size

We describe the time and space

complexity of graph algorithms in terms of the number of vertices, |V|, and the number of edges, |E|.

|E| can range from 0 (a totally

disconnected graph) to |V|2 (a directed graph with every possible edge, including self-loops).

we write Θ(V + E) instead of Θ(|V| + |E|).

Representing Graphs

Adjacency matrix: if there is an edge from vertex i to j, aij = 1; else, aij = 0.

Space: Θ(V2)

Adjacency list: Adj[v]

lists the vertices adjacent to v.

Space: Θ(V+E)

1

2

3 4

0 0 1 0

1 0 0 0

0 1 0 0

1 0 1 0

4 3 2 1

4 3 2 1

2 4

3 4 2 1

2 3 4 Adj:

(7)

Depth-first searching

• A depth-first search (DFS) explores a path all the way to a leaf before

backtracking and exploring another path

• For example, after

searching A, then B, then D, the search backtracks and tries another path from B

• Node are explored in the order A B D E H L M N I O P C F G J K Q

• N will be found before J L M N O P

G

Q

H I J K

F E

D

B C

A

Fixing Bad-DFS

We’ve got to indicate when a node has been visited.

we’ll use a color:

WHITE never seen

GRAY discovered but not finished

(still exploring its descendants) BLACK finished

(8)

A Better DFS

> initially, all vertices are WHITE Better-DFS(u)

color[u] ← GRAY

number u with a “discovery time”

for each v in Adj[u] do

if color[v] = WHITE then > avoid looping!

Better-DFS(v) color[u] ← BLACK

number u with a “finishing time”

Depth-First Spanning Tree

As we’ll see, DFS creates a tree as it

explores the graph. Let’s keep track of the tree as follows (actually it creates a forest not a tree):

When v is explored directly from u, we will make u the parent of v, by setting the predecessor, aka, parent (π) field of v to u:

u v

u v

(9)

Directed Depth First Search

Adjacency Lists A: F G

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

G: : H: B:

I: H:

A

B C G

D

E H

I

(10)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

Directed Depth First Search

F

A

B C G

D

E H

I

visit(F)

(11)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

dfs(F) F-E dfs(E) E-C E-D E-G

Directed Depth First Search

A

B C G

D

E H

I

dfs(E) E-C E-D E-G

dfs(C) C-A C-D

(12)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

dfs(F) F-E dfs(E) E-C E-D E-G

dfs(C) C-A C-D

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(F) dfs(E) E-C E-D E-G

dfs(C) C-A C-D

dfs(D) D-C D-F

(13)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

dfs(F) F-E dfs(E) E-C E-D E-G

dfs(C) C-A C-D

dfs(D) D-C D-F

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(E) E-C E-D E-G

dfs(C) C-A C-D

dfs(D) D-C D-F

(14)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

dfs(F) F-E dfs(E) E-C E-D E-G

dfs(C) C-A C-D

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(F) dfs(E) E-C E-D E-G

(15)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

dfs(F) F-E dfs(E) E-C E-D E-G

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(E) E-C E-D E-G

dfs(G)

(16)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

dfs(F) F-E dfs(E) E-C E-D E-G

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(F)

(17)

Directed Depth First Search

F

A

B C G

D

E H

I

dfs(A) A-F A-G Function call stack:

Directed Depth First Search

A

B C G

D

E H

I

(18)

Directed Depth First Search

F

A

B C G

D

E H

I

Nodes reachable from A: A, C, D, E, F, G

Breadth First Search

(19)

Breadth-First Search

Breadth-first search (BFS) is a general

technique for traversing a graph

A BFS traversal of a graph G

Visits all the vertices and edges of G

Determines whether G is connected

Computes the connected components of G

Computes a spanning forest of G

BFS on a graph with n

vertices and m edges takes O(n + m ) time

BFS can be further extended to solve other graph

problems

Find and report a path with the minimum number of edges between two given vertices

Find a simple cycle, if there is one

BFS Algorithm

The algorithm uses a mechanism for setting and getting “labels” of vertices and edges

AlgorithmBFS(G, s)

L0new empty sequence L0.insertLast(s)

setLabel(s, VISITED) i 0

while ¬Li.isEmpty()

Li +1new empty sequence for all v Li.elements()

for all e G.incidentEdges(v) if getLabel(e) = UNEXPLORED

w opposite(v,e) if getLabel(w) = AlgorithmBFS(G)

Inputgraph G

Outputlabeling of the edges and partition of the vertices of G for all u G.vertices()

(20)

Expands the frontier between discovered and undiscovered vertices uniformly across the breadth of the frontier.

A vertex is “discovered” the first time it is encountered during the search.

A vertex is “finished” if all vertices adjacent to it have been discovered.

Colors the vertices to keep track of progress.

White – Undiscovered.

Gray – Discovered but not finished.

Black – Finished.

Colors are required only to reason about the algorithm. Can be implemented without colors.

Breadth First Search

A B

F

I

E H

D C

G

-

(21)

Breadth First Search

A B

F

I

E H

D C

G

A

FIFO Queue -

front enqueue source node

Breadth First Search

A B

F

I

E H

D C

G

-

(22)

Breadth First Search

front visit neighbors of A

A B

F

I

E H

D C

G

-

FIFO Queue

Breadth First Search

A B

F

I

E H

D C

G

-

(23)

Breadth First Search

front B

B discovered

A B

F

I

E H

D C

G

- A

FIFO Queue

Breadth First Search

A

F

I

E H

D C

G

-

B

A

(24)

Breadth First Search

front B I

I discovered

A

F

I

E H

D C

G

-

B

A

A

FIFO Queue

Breadth First Search

A

F

I

E H

D C

G

-

B

A

A

(25)

Breadth First Search

front B I

F

I

E H

D C

G

-

B

A

A

dequeue next vertex

FIFO Queue

A

Breadth First Search

F

I

E H

D C

G

-

B

A

A

(26)

Breadth First Search

front I

F

I

E H

D C

G

-

B

A

A

visit neighbors of B

FIFO Queue

A

Breadth First Search

F

I

E H

D C

G

-

B

A

A

B

A

(27)

Breadth First Search

front I F

F

I

E H

D C

G

-

B

A

A

visit neighbors of B

B

FIFO Queue

A

Breadth First Search

F

I

E H

D C

G

-

B

A

B

A

(28)

Breadth First Search

front I F

F

I

E H

D C

G

-

B

A

A

finished with B

B

FIFO Queue

A

Breadth First Search

F

I

E H

D C

G

- A

A

B

B A

(29)

Breadth First Search

front F

F

I

E H

D C

G

- A

A

visit neighbors of I

B

FIFO Queue

B A

Breadth First Search

F

I

E H

D C

G

- A

B

B A

(30)

Breadth First Search

front F

F

I

E H

D C

G

- A

A

A already discovered

B

FIFO Queue

B A

Breadth First Search

F

I

E H

D C

G

- A

A

B

B A

(31)

Breadth First Search

front F E

F

I

E H

D C

G

- A

A

E discovered I B

FIFO Queue

B A

Breadth First Search

F

I

E H

D C

G

- A

B I

B A

(32)

Breadth First Search

front F E

F

I

E H

D C

G

- A

A

F already discovered I B

FIFO Queue

B A

Breadth First Search

F

I

E H

D C

G

- A

A

B I

B A

(33)

Breadth First Search

front F E

F

E H

D C

G

- A

A

dequeue next vertex I B

FIFO Queue

B A

I

Breadth First Search

F

E H

D C

G

- A

B I

B A

I

(34)

Breadth First Search

front E G

F

E H

D C

G

- A

A

G discovered

I B F

FIFO Queue

B A

I

Breadth First Search

F

E H

D C

G

- A

A

B

I F

B A

I

(35)

Breadth First Search

front E G

E H

D C

G

- A

A

dequeue next vertex

I B F

FIFO Queue

I

F B A

Breadth First Search

E H

D C

G

- A

B

I F

I

F B A

(36)

Breadth First Search

front G

H D C

G

- A

A

E finished

I B F

FIFO Queue

I

F B A

E

Breadth First Search

H D C

G

- A

A

B

I F

I

F B A

E

(37)

Breadth First Search

front

H D C

G

- A

A

visit neighbors of G

I B F

FIFO Queue

I

F B A

E

Breadth First Search

H D C

G

- A

B

I F

G

I

F B A

E

(38)

Breadth First Search

front C

H D C

G

- A

A

visit neighbors of G

I B F

G

FIFO Queue

I

F B A

E

Breadth First Search

H D C

G

- A

A

B

I F

G

G

I

F B A

E

(39)

Breadth First Search

front C H

H D C

G

- A

A

G finished

I B F

G

G

FIFO Queue

I

F B A

E

Breadth First Search

H D C

- A

B

I F

G

G

I

F B A

E G

(40)

Breadth First Search

front H

H D C

- A

A

visit neighbors of C

I B F

G

G

FIFO Queue

I

F B A

E G

Breadth First Search

H D C

- A

A

B

I F

G

G C

I

F B A

E G

(41)

Breadth First Search

front H D

H D C

- A

A

C finished

I B F

G

G C

FIFO Queue

I

F B A

E G

Breadth First Search

H D

- A

B

I F

G

G C

I

F B A

E G

C

(42)

Breadth First Search

front D

H D

- A

A

visit neighbors of H

I B F

G

G C

FIFO Queue

I

F B A

E G

C

Breadth First Search

D

- A

A

B

I F

G

G C

I

F B A

E G H

C

(43)

Breadth First Search

front D

D

- A

A

dequeue next vertex

I B F

G

G C

FIFO Queue

I

F B A

E G H

C

Breadth First Search

D

- A

B

I F

G

G C

I

F B A

E G H

C

(44)

Breadth First Search

front

- A

A

D finished

I B F

G

G C

FIFO Queue

I

F B A

E G H

C D

Breadth First Search

- A

A

B

I F

G

G C

I

F B A

E G H

C D

(45)

Breadth First Search

front STOP

E H

D

- A

A

I B F

G

G C

FIFO Queue

I

F B A

G C

Gambar

Graph Size

Referensi

Dokumen terkait

Moreover, the minimum (resp. maximum) number of edges for all (connected) graphs with pendent vertices and nullity η are determined, and the extremal graphs are characterized..

, m , and G is simply called path-positive if it is path- positive of any order.In [3], Bapat and Lal have characterized all graphs that are path-positive.The following corollary

Moreover, in any minimum rank problem whatsoever, we need not concern ourselves with any graphs in which two degree two vertices are adjacent, or a degree two vertex is adjacent to

Moreover, the minimum (resp. maximum) number of edges for all (connected) graphs with pendent vertices and nullity η are determined, and the extremal graphs are characterized..

For example, all graphs in Figure 5 are vertex-symmetric, while the graph in Figure 6 is not, because vertex v 6 lies in three cycles of length three,... , V

// use the breadth-first traversal algorithm to // determine the minimum number of edges in any // path from sVertex to all vertices in the graph // reachable from sVertex; upon

A set of vertices is said to be strong vv-dominating set SVVD-set weak vv-dominating set WVVD-set if each vertex outside the set is strongly weakly vv-dominated by a vertex inside the

Matrices and graphs: transitive closure Learning objectives: • atomic versus structured objects • directed versus undirected graphs • transitive closure • adjacency and