Tải bản đầy đủ (.pdf) (13 trang)

cấu trúc dữ liệu va giải thuật đỗ bích diệp ch8 p1 cấu trúc đô thị sinhvienzone com

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (268.43 KB, 13 trang )

Cấu trúc dữ liệu và Giải thuật

Cấu trúc dữ liệu và Giải thuật

337

LAX

Chương VIII: Cấu trúc Đồ thị

4
7
1

1233

ORD
802

SFO

3
4
8
1

DFW

Đỗ Bích Diệp - Khoa CNTT

Chương VIII: Đồ thị


z

Nội dung
1.
2.

Các khái niệm cơ bản
Biểu diễn đồ thị
1.
2.

3.
4.

Ma trận lân cận
Danh sách lân cận

Duyệt đồ thị
Bài toán áp dụng
1.
2.
3.
4.

Tìm cây khung cực tiểu
Tìm đường đi ngắn nhất
Bài toán bao đóng truyền ứng
Bài toán sắp xếp tô pô
Đỗ Bích Diệp - Khoa CNTT


Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

1
SinhVienZone.com

/>

Cấu trúc dữ liệu và Giải thuật

Đồ thị


Một đồ thị G = (V, E) trong đó
z
z




V: tập các đỉnh (vertices)
E: tập các cung (edges) nối các đỉnh trong V

Một cung e = (u,v) là một cặp đỉnh
Ví dụ:
a

b

V= {a,b,c,d,e}


e

E=
{(a,b),(a,c),(a,d),
(b,e),(c,d),(c,e),
(d,e)}

c
d

Đỗ Bích Diệp - Khoa CNTT

Các khái niệm liên quan


Đồ thị có hướng và Đồ thị vô hướng
1

2

1

2
5

3

4


Trong một cung, thứ tự của
các đỉnh là quan trọng
Cung (u,v) khác với cung (v,u)

3

4

Trong một cung, thứ tự của
các đỉnh là không quan trọng
Cung (u,v) cũng giống như cung (v,u)

Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

2
SinhVienZone.com

/>

Cấu trúc dữ liệu và Giải thuật

Các khái niệm liên quan
z

Bậc của một đỉnh (Degree): Là số cung kề với đỉnh





Trong một đồ thị có hướng, một đỉnh có thể có
z Bậc trong (in-degree)
z Bậc ngoài (out-degree)
Ví dụ:
z Đỉnh 1 có bậc 3
z Đỉnh 1 có bậc trong là 1 và bậc ngoài là 2

1

2

3

4
Đỗ Bích Diệp - Khoa CNTT

Các khái niệm liên quan
z

Đỉnh lân cận (Adjacent vertices)


z

Trong đồ thị
z 1, 2 là lân cận của nhau
z 1,3 là lân cận của nhau
z ….


1

2

3

4

Cung kề (Incident edges)


Nếu có cung (u,v) thì cung này là cung kề của hai đỉnh u
và v

Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

3
SinhVienZone.com

/>

Cấu trúc dữ liệu và Giải thuật

Các khái niệm liên quan
z


Đường đi


z

1

2

3

4

Đường đi đơn


z

Dãy các đỉnh v1,v2,. . .vk mà tồn tại cung (vi, vi+1) trong đồ
thị ( i = 1 .. k-1)

Đường đi với các đỉnh không lặp lại

Chu trình
Đường đi đơn với đỉnh đầu và cuối
trùng nhau



z


Độ dài đường đi


z

Path : 1, 2, 4, 3, 1, 4

Số cung trên đường đi

Đồ thị con
Đỗ Bích Diệp - Khoa CNTT

Các khái niệm liên quan
z

1

Đồ thị liên thông (Connected Graph)

2

1

2

3

4


5
3

4

5

Đồ thị liên thông
1

2

3

1

2

3

4

Đồ thị không liên thông
Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

4
SinhVienZone.com


/>

Cấu trúc dữ liệu và Giải thuật

Các khái niệm liên quan
z

Đồ thị trọng số (Weight Graph)

5
1

2
140

100
3

60

110

100
4

Đỗ Bích Diệp - Khoa CNTT

Kiểu dữ liệu trừu tượng Đồ thị
z


z

Dữ liệu: Một tập không rỗng các đỉnh chứa các phần tử
có kiểu nhất định, một tập không rỗng các cung có thể
biểu diễn các phần tử có kiểu nhất định
Các thao tác cơ bản






Graph create()
insertVertex( o)
insertEdge(u, v, o)
removeVertex(v)
removeEdge(e )

– endVertices(e)
– opposite(v, e)
– areAdjacent(v, w)
– adjacentVertices(v)
– incidentEdges(v)
– vertices()
– edges()
– numVertices()
– numEdges()
Đỗ Bích Diệp - Khoa CNTT


Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

5
SinhVienZone.com

/>

Cấu trúc dữ liệu và Giải thuật

Một số tính chất của đồ thị
1.
2.

3.

Nếu một đồ thị G có m cung thì tổng bậc của
các đỉnh trong G sẽ là 2m
Nếu một đồ thị có hướng có m cung thì tổng bậc
trong của các đỉnh , tổng bậc ngoài của các đỉnh
đều là m
Nếu đồ thị G là đồ thị đơn giản, G có n đỉnh và
m cung thì
1.
2.

Nếu G là đồ thị vô hướng m ≤ n(n-1)/2
Nếu G là đồ thị có hướng thì m ≤ n(n-1)

Đỗ Bích Diệp - Khoa CNTT


Biểu diễn đồ thị


Biểu diễn bằng ma trận lân cận
z
z

Đánh số các đỉnh trong tập V từ 1 đến n
Ma trận biểu diễn đồ thị A (n x n)



z
z

Aij = 1 nếu trong G tồn tại cung (i,j)
Aịj = 0 nếu trong G không tồn tại cung đó

Với đồ thị vô hướng thì nếu Aij = 1 thì Aji = 1
A được gọi là ma trận lân cận của G

Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

6
SinhVienZone.com


/>

Cấu trúc dữ liệu và Giải thuật

Biểu diễn đồ thị bằng ma trận lân cận
z

Ví dụ
1

2

3

4

1

⎡0
⎢0

⎢1

⎣0

⎡0
⎢1

⎢1


0

⎢⎣1

2
5

3

1 0 1⎤

0 0 1⎥
1 0 0⎥

1 1 0⎦

4

1 1 0 1⎤

0 1 0 0⎥
1 0 1 0⎥

0 1 0 1⎥
0 0 1 0⎥⎦
Đỗ Bích Diệp - Khoa CNTT

Biểu diễn đồ thị bằng danh sách lân cận



Biểu diễn bằng danh sách lân cận
z
z

Mỗi đỉnh trong đồ thị sẽ ứng với một danh sách móc nối chứa
các đỉnh lân cận của nó
Mỗi nút trong danh sách có quy cách
VERTEX



z
z

LINK

VERTEX chứa giá trị tương ứng với số thứ tự của đỉnh lân cận
LINK chứa con trỏ trỏ tới nút tiếp theo trong danh sách

Mỗi danh sách như vậy có một nút đầu danh sách
Các nút đầu này là các phần tử của một vector V có kích
thước n. Phần tử V[i] ứng với danh sách lân cận của nút thứ i

Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

7
SinhVienZone.com


/>

Cấu trúc dữ liệu và Giải thuật

Biểu diễn đồ thị bằng danh sách lân cận
z

1

Ví dụ
2

3

4

z

V[1]

2

V[2]

4

V[3]

1


2

V[4]

2

3

4

1: (2,4)
2: (4)
3: (1, 2)
4: (2, 3)

Đỗ Bích Diệp - Khoa CNTT

Biểu diễn đồ thị bằng danh sách lân cận
1

2
5

3

4

z


V[1]

2

3

V[2]

1

3

V[3]

1

2

V[4]

3

5

V[5]

1

4


5

4

1: (2,3,5)
2: (1,3)
3: (1,2,4)
4: (3,5)
5: (1,4)
Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

8
SinhVienZone.com

/>

Cấu trúc dữ liệu và Giải thuật

Phép duyệt đồ thị
z

Cho một đồ thị G(V,E) và một đỉnh v thuộc V. Duyệt
đồ thị là thăm mọi đỉnh liên thông với v


Có 2 phương pháp
z

z

Phương pháp duyệt theo chiều sâu (Depth First Search)
Phương pháp duyệt theo chiều rộng ( Breadth First Search)

Đỗ Bích Diệp - Khoa CNTT

Duyệt theo chiều sâu
Algorithm DFS(G, v)
Input đồ thị G và đỉnh bắt đầu duyệt v trong G
Output đánh dấu các cung trong G trong phần đồ thị liên thông với đỉnh v
thành hai loại cung khám phá (discovery edges) và cung quay lui (back
edges)
setLabel(v, VISITED) // đỉnh v đã được thăm
for all e ∈ G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w ← opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
DFS(G, w)
else
setLabel(e, BACK)

Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

9
SinhVienZone.com


/>

Cấu trúc dữ liệu và Giải thuật

Duyệt đồ thị theo chiều sâu
A

Đỉnh chưa thăm
Đỉnh đã thăm
Cung chưa thăm
Cung khám phá
Cung quay lui

A
A

B

D

E

D

E

C

A


A

B

D

E

B

C

C

Bắt đầu xuất phát từ A

Đỗ Bích Diệp - Khoa CNTT

Duyệt đồ thị theo chiều sâu
A
B

A
D

E

B


D

C

C

A

A

B

D

E

C

B

E
Tất cả các cung
kề của D đã duyệt
Xét tiếp các cung
kề của đỉnh C

D

E


C
Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

10
SinhVienZone.com

/>

Cấu trúc dữ liệu và Giải thuật

Duyệt đồ thị theo chiều sâu
z

Duyệt theo chiều sâu trên đồ thị có hướng


Đi theo chiều của các cung trên đồ thị

D
E
B
C
A
Đỗ Bích Diệp - Khoa CNTT

Duyệt đồ thị theo chiều rộng
Algorithm BFS(G, s)

Q = một queue rỗng
Q.enqueue(s)
setLabel(s, VISITED)
while not Q.isEmpty()
v = Q.dequeue()
for all e ∈ G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w ← opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
setLabel(w, VISITED)
Q.enqueue(w)
else
setLabel(e, BACK)

Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

11
SinhVienZone.com

/>

Cấu trúc dữ liệu và Giải thuật

Duyệt đồ thị theo chiều rộng
Đỉnh chưa thăm
Đỉnh đã thăm

Cung chưa thăm
Cung khám phá
Cung quay lui

A
A

L0
L1

L0
L1

B

L0
C

E

D

C
E

A

B

A


L1

F

A

B

F

D

C
E

D
F

Đỗ Bích Diệp - Khoa CNTT

Duyệt đồ thị theo chiều rộng
L0
L1

L0

A

B


C
E

L0
L1

B

L2

F

L0

A

B

L2

D

L1

C
E

D
F


L1

A
C
E

F

A

B

L2

D

C
E

D
F

Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

12
SinhVienZone.com


/>

Cấu trúc dữ liệu và Giải thuật

Duyệt đồ thị theo chiều rộng
L0
L1

A

B

C

L2

E

L0
L1

L0
L1

D

A

B


C

L2

F

E

D
F

A

B

C

L2

E

D
F

Đỗ Bích Diệp - Khoa CNTT

Duyệt đồ thị theo chiều sâu
z


Duyệt đồ thị theo chiều rộng trên đồ thị có hướng

D
E
B
C
A
Đỗ Bích Diệp - Khoa CNTT

Đỗ Bích Diệp - Khoa CNTT - ĐHBK
HN

13
SinhVienZone.com

/>


×