You are on page 1of 45

|k

TOÁN RỜI RẠC


Discrete Mathematics

Giảng viên: Bùi Thị Thanh Xuân


Bộ môn: Tin học và kỹ thuật tính toán
Năm học: 2022-2023

Trường Đại học Thủy lợi

Hà Nội-2023
1 / 45
GIỚI THIỆU

Thông tin môn học:


Môn học: Toán rời rạc
Số tín chỉ: 3
Giảng viên: Bùi Thị Thanh Xuân. Email: xuanbtt@tlu.edu.vn
Tài liệu tham khảo:
1 Toán rời rạc ứng dụng trong tin học (Discrete Mathematics and Its
Applications, Kenneth H. Rosen, McGraw-Hill)
2 Toán rời rạc, Nguyễn Đức Nghĩa, NXB KHKT
3 Toán rời rạc ứng dụng trong tin học, Đỗ Đức Giáo

2 / 45
Phần 2: LÝ THUYẾT ĐỒ THỊ

Chương 1: Các khái niệm cơ bản của lý thuyết đồ thị


Chương 2: Biểu diễn đồ thị trên máy tính
Chương 3: Các thuật toán tìm kiếm trên đồ thị và ứng dụng
Chương 4: Đồ thị Euler và đồ thị Hamilton
Chương 5: Cây và cây khung của đồ thị
Chương 6: Bài toán đường đi ngắn nhất

3 / 45
Chương 2. Biểu diễn đồ thị trên máy tính

Để lưu trữ đồ thị và thực hiện các thuật toán khác nhau với đồ thị trên
máy tính cần phải tìm những cấu trúc dữ liệu thích hợp để mô tả đồ thị.
Các cách biểu diễn đồ thị:
Ma trận kề. Ma trận trọng số
Ma trận liên thuộc đỉnh cạnh
Danh sách kề
Danh sách cạnh

4 / 45
Biểu diễn đồ thị: Ma trận kề

Giả sử G = (V , E ) là một đơn đồ thị trong đó |V | = n và các đỉnh được


liệt kê một cách tùy ý v1 , v2 , .., vn .

Định nghĩa 1 (Ma trận kề)


Ma trận kề A hay AG của G ứng với danh sách các đỉnh này là ma trận
không-một cấp n × n có phần tử hàng i và cột j bằng 1 nếu vi và vj liền
kề nhau, và bằng 0 nếu chúng không được nối với nhau. Nói cách khác,
ma trận kề của đồ thị là ma trận A = [aij ], trong đó

1 nếu {vi , vj } là một cạnh của G,
aij =
0 nếu không có cạnh nối đỉnh vi với đỉnh vj

Nhận xét: Ma trận kề biểu diễn đơn đồ thị G là ma trận nhị phân vuông
cấp n.

5 / 45
Biểu diễn đồ thị: Ma trận kề

Chú ý 1
Ma trận kề của một đồ thị tùy thuộc vào thứ tự liệt kê các đỉnh. Do
vậy có tới n! ma trận kề khác nhau của một đồ thị n đỉnh vì có n!
cách sắp xếp n đỉnh.
Ma trận kề của một đồ thị đơn là đối xứng, tức là aij = aji vì nếu vi
được nối với vj thì vj cũng được nối với vi và ngược lại, nếu vi không
liền kề với vj thì vj cũng không liền kề với vi .
Hơn nữa, vì đồ thị đơn không có khuyên nên aii = 0 với i = 1, 2, .., n.
deg(v) = Tổng các phần tử trên dòng v của ma trận kề A

6 / 45
Biểu diễn đồ thị: Ma trận kề

Ví dụ 1
Dùng ma trận kề hãy biểu diễn đơn đồ thị sau:

7 / 45
Biểu diễn đồ thị: Ma trận kề

Ví dụ 2
Dùng ma trận kề hãy biểu diễn đồ thị đơn sau:

8 / 45
Biểu diễn đồ thị: Ma trận kề
Sắp xếp các đỉnh theo thứ tự a, b, c, d.

0 1 1 1
 
1 0 1 0
A=
1 1 0 0
1 0 0 0
Hình 1: Ma trận kề của đồ thị đơn.

9 / 45
Biểu diễn đồ thị: Ma trận kề

Ví dụ 3
Hãy vẽ đồ thị có ma trận liền kề theo thứ tự của các đỉnh là a, b, c, d:
 
0 1 1 0
1 0 0 1
A=
 

1 0 0 1
0 1 1 0

10 / 45
Biểu diễn đồ thị: Ma trận kề
Sắp xếp các đỉnh theo thứ tự a, b, c, d.

 
0 1 1 0
1 0 0 1
A=
 

1 0 0 1 (b) Đồ thị ứng với ma trận
kề cho trước
0 1 1 0
(a) Ma trận liền kề

11 / 45
Biểu diễn đồ thị: Ma trận kề

Chú ý 2 (Đối với đồ thị vô hướng có khuyên và có cạnh bội)


Ma trận kề cũng có thể dùng để biểu diễn đồ thị vô hướng có khuyên
và có cạnh bội.
Khuyên tại đỉnh vi được biểu diễn bằng 1 tại vị trí (i, i) của ma trận
kề.
Khi có cạnh bội, ma trận kề không còn là ma trận không-một nữa, vì
phần tử ở vị trí thứ (i, j) của ma trận này bằng số cạnh nối các đỉnh
vi và vj .
Tất cả các đồ thị vô hướng kể cả đa đồ thị và giả đồ thị đều có ma
trận kề đối xứng.

12 / 45
Biểu diễn đồ thị: Ma trận kề

Ví dụ 4
Dùng ma trận kề hãy biểu diễn giả đồ thị sau:

13 / 45
Biểu diễn đồ thị: Ma trận kề

Ma trận kề với thứ tự các đỉnh a, b, c, d là

0 3 0 2
 
3 0 1 1
A=
(c) Giả đồ thị 0 1 1 2
2 1 2 0
(d) Ma trận kề của giả đồ thị

14 / 45
Biểu diễn đồ thị: Ma trận kề

Định nghĩa 2 (Ma trận kề của đồ thị có hướng)


Ma trận kề của đồ thị có hướng G = (V , E ) có giá trị bằng 1 tại vị trí (i, j)
nếu có một cạnh (cung) từ đỉnh vi tới đỉnh vj , trong đó v1 , v2 , .., vn là một
danh sách bất kỳ các đỉnh đồ thị. Nói cách khác, nếu ma trận A = [aij ] là
ma trận kề của đồ thị có hướng theo danh sách này của đỉnh thì

1 nếu có cạnh (cung) đi từ vi tới vj
aij =
0 ở mọi vị trí khác

Chú ý 3
Ma trận kề của đồ thị có hướng không có tính đối xứng.

15 / 45
Biểu diễn đồ thị: Ma trận kề

Ví dụ 5
Dùng ma trận kề hãy biểu diễn đồ thị có hướng sau:

16 / 45
Biểu diễn đồ thị: Ma trận kề
Sắp xếp các đỉnh theo thứ tự a, b, c, d.

0 1 0 0
 
0 0 1 0
A=
0 1 0 1
1 0 0 0
Hình 2: Ma trận kề của đồ thị có hướng.
17 / 45
Biểu diễn đồ thị: Ma trận kề

Ví dụ 6
Dùng ma trận kề hãy biểu diễn đồ thị có hướng sau:

18 / 45
Biểu diễn đồ thị: Ma trận kề

Sắp xếp các đỉnh theo thứ tự a, b, c, d.

 
1 1 1 1
0 0 0 1
A=
 

1 1 0 0
0 1 1 1
Hình 3: Ma trận kề của đồ thị có hướng.

19 / 45
Biểu diễn đồ thị: Ma trận kề

Chú ý 4
Có thể dùng ma trận kề để biểu diễn đa đồ thị có hướng: phần tử aij
bằng số các cung đi từ đỉnh vi tới đỉnh vj .

Ví dụ 7
Dùng ma trận kề hãy biểu diễn đa đồ thị có hướng sau:

20 / 45
Biểu diễn đồ thị: Ma trận kề

Sắp xếp các đỉnh theo thứ tự a, b, c, d.

 
1 1 2 1
1 0 0 2
A=
 

1 0 1 1
0 2 1 0
Hình 4: Ma trận kề của đa đồ thị có hướng.

21 / 45
Biểu diễn đồ thị: Ma trận kề

Bộ nhớ (Space): |V |2 bits


Trả lời các truy vấn:
Hai đỉnh i và j có kề nhau không ?
Chỉ cần 01 phép so sánh a[i, j] = 1 ?
Bổ sung hoặc loại bỏ cạnh: cần 1 phép gán sửa 1 phần tử của A
Bổ sung đỉnh: tăng kích thước ma trận kề

22 / 45
Đếm đường đi giữa các đỉnh

Số đường đi giữa hai đỉnh của đồ thị có thể xác định được khi sử dụng ma
trận kề.

Định lý 1
Cho đồ thị G với ma trận kề A theo thứ tự các đỉnh v1 , v2 , .., vn (với các
cạnh vô hướng hoặc có hướng hay cạnh bội hoặc khuyên). Số đường đi
khác nhau độ dài r từ vi tới vj trong đó r là một số nguyên dương, bằng
giá trị của phần tử (i, j) của ma trận Ar .

23 / 45
Đếm đường đi giữa các đỉnh

Ví dụ 8
Có bao nhiêu đường đi độ dài 4 từ đỉnh a tới d trong đồ thị vô hướng G
cho như sau:

24 / 45
Đếm đường đi giữa các đỉnh

Ma trận kề của đồ thị G theo thứ tự a, b, c, d. Vì thế đường đi độ dài 4 từ


a tới d là giá trị của phần tử (i, j) của ma trận A4 .

0 1 1 0 8 0 0 8
   

A = 11 0
0
0
0
1 A4 = 0 8
1 0 8
8
8
0
0
0 1 1 0 8 0 0 8
(a) Ma trận kề (b) Ma trận A4

Như vậy có 8 đường đi độ dài 4 từ a tới d.

25 / 45
Biểu diễn đồ thị: Ma trận trọng số

Trong trường hợp đồ thị có trọng số trên cạnh, thay vì ma trận kề, để biểu
diễn đồ thị ta sử dụng ma trận trọng số

C = (cij )nxn

trong đó

c(i, j) nếu (i, j) thuộc tập cạnh E
cij =
θ nếu (i, j) không thuộc tập cạnh E

với θ là giá trị đặc biệt để chỉ ra một cặp (i,j) không là cạnh, tuỳ từng
trường hợp cụ thể, có thể được đặt bằng một trong các giá trị sau: 0,
+∞, -∞.

26 / 45
Biểu diễn đồ thị: Ma trận trọng số
Ví dụ: Cho đồ thị G = (V , E ) là đồ thị có trọng số, mỗi cạnh e ∈ E có
trọng số c(e).

Hãy mô tả ma trận trọng số của đồ thị G


27 / 45
Biểu diễn đồ thị: Ma trận liên thuộc đỉnh cạnh

Có thể dùng ma trận liên thuộc để biểu diễn đồ thị.

Định nghĩa 3 (Ma trận liên thuộc)


Giả sử G = (V , E ) là đơn đồ thị vô hướng trong đó V = {v1 , v2 , .., vn } là
tập các đỉnh của đồ thị, còn E = {e1 , e2 , .., em } là tập các cạnh của nó.
Khi đó ma trận liên thuộc theo thứ tự trên của V và E là ma trận
A = [aij ] trong đó

1 nếu cạnh ej nối với đỉnh vi
aij =
0 nếu cạnh ej không nối với đỉnh vi

28 / 45
Biểu diễn đồ thị: Ma trận liên thuộc

Ví dụ 9
Dùng ma trận liên thuộc hãy biểu diễn đồ thị vô hướng sau:

29 / 45
Biểu diễn đồ thị: Ma trận liên thuộc

Hình 5: Ma trận liên thuộc của đồ thị vô hướng

30 / 45
Biểu diễn đồ thị: Ma trận liên thuộc

Ví dụ 10
Dùng ma trận liên thuộc hãy biểu diễn giả đồ thị sau:

31 / 45
Biểu diễn đồ thị: Ma trận liên thuộc

Hình 6: Ma trận liên thuộc của giả đồ thị

32 / 45
Biểu diễn đồ thị: Ma trận liên thuộc đỉnh cạnh

Có thể dùng ma trận liên thuộc để biểu diễn đồ thị.

Định nghĩa 4 (Ma trận liên thuộc)


Giả sử G = (V , E ) là đơn đồ thị có hướng trong đó V = {v1 , v2 , .., vn } là
tập các đỉnh của đồ thị, còn E = {e1 , e2 , .., em } là tập các cung (cạnh có
hướng) của nó. Khi đó ma trận liên thuộc theo thứ tự trên của V và E là
ma trận A = [aij ] trong đó

 1 nếu đỉnh vi là đỉnh đầu của cung ej
aij = −1 nếu đỉnh vi là đỉnh cuối của cung ej

0 nếu đỉnh vi không là đầu mút của cung ej

Ma trận liên thuộc đỉnh-cạnh là một trong những cách biểu diễn rất hay
được sử dụng trong các bài toán liên quan đến đồ thị có hướng mà trong
đó phải xử lý các cung của đồ thị.

33 / 45
Biểu diễn đồ thị: Ma trận liên thuộc đỉnh cạnh

Dùng ma trận liên thuộc biểu diễn đồ thị sau:

34 / 45
Biểu diễn đồ thị: Ma trận liên thuộc đỉnh cạnh
Dùng ma trận liên thuộc biểu diễn đồ thị sau:

35 / 45
Biểu diễn đồ thị: Danh sách kề

Biểu diễn đồ thị không có cạnh bội là liệt kê tất cả các cạnh của đồ thị.
Nói cách khác để biểu diễn đồ thị không có cạnh bội, ta dùng danh sách
kề. Danh sách này chỉ rõ các đỉnh nối với mỗi đỉnh của đồ thị.
Danh sách kề (Adjacency Lists): Với mỗi đỉnh v cất giữ danh sách các
đỉnh kề của nó.
Là mảng Ke gồm |V| danh sách.
Mỗi đỉnh có một danh sách.
Với mỗi u ∈ V , Ke[u] bao gồm tất cả các đỉnh kề của u.

36 / 45
Biểu diễn đồ thị: Danh sách kề

Đỉnh Đỉnh liền kề


a b, c, e
b a
c a, d, e
d c, e
e a, c, d

Hình 7: Danh sách kề của một đồ thị đơn

37 / 45
Biểu diễn đồ thị: Danh sách kề

Ví dụ 11
Hãy biểu diễn đồ thị có hướng sau bằng cách liệt kê tất cả các đỉnh cuối
của các cung xuất phát từ mỗi đỉnh của đồ thị.

Hình 8: Đồ thị có hướng

38 / 45
Biểu diễn đồ thị: Danh sách kề

Đỉnh đầu Đỉnh cuối


a b, c, d, e
b b, d
c a, c, e
d
e b, c, d

Hình 9: Danh sách kề của đồ thị có hướng.

39 / 45
Biểu diễn đồ thị: Danh sách kề

40 / 45
Danh sách kề của đồ thị vô hướng

Cho G là đồ thị vô hướng.


Với mỗi v ∈ V , Ke(v) = danh sách các đỉnh u: (v , u) ∈ E

41 / 45
Danh sách kề của đồ thị có hướng

Cho G là đồ thị có hướng.


Với mỗi v ∈ V , Ke(v) = danh sách các đỉnh u: (v , u) ∈ E

42 / 45
Biểu diễn đồ thị: Danh sách kề

Chú ý 5
Tổng cộng bộ nhớ: cỡ (|V|+|E|) ô nhớ. Thường là nhỏ hơn nhiều so
với |V |2 , nhất là đối với đồ thị thưa (sparse graph).
Trong trường hợp đồ thị thưa (m < kn, k < 10 với m là số cạnh và n
là số đỉnh của đồ thị), người ta thường dùng cách biểu diễn đồ thị
theo danh sách cạnh.
Khi biểu diễn đồ thị bởi danh sách các cạnh hay danh sách kề, thì
việc thực hiện thuật toán có thể sẽ rất cồng kềnh, nếu đồ thị có nhiều
cạnh.
Để đơn giản việc tính toán, ta có thể biểu diễn đồ thị bằng ma trận:
Ma trận liền kề và ma trận liên thuộc.

43 / 45
Biểu diễn đồ thị: Danh sách cạnh (cung)

Phù hợp với đồ thị thưa.


Mỗi cạnh (cung) e = (u,v) tương ứng với 2 biến Dau[e] và Cuoi[e].
Để lưu trữ đồ thị cần 2m đơn vị bộ nhớ.

Hai đỉnh u, v có kề nhau? Duyệt qua danh sách tất cả các cạnh của
đồ thị (tồi hơn ma trận kề).

44 / 45
Chương 5. Đồ thị
Một số thuật ngữ tiếng Anh
Tiếng Anh Tiếng Việt
graph theory Lý thuyết đồ thị
graph Đồ thị
vertex Đỉnh
edge Cạnh
loops Khuyên
simple graph Đơn đồ thị
multigraphs Đa đồ thị
pseudographs Giả đồ thị
undirected graphs Đồ thị vô hướng
directed graph Đồ thị có hướng
simple directed graph Đơn đồ thị có hướng
directed multigraphs Đa đồ thị có hướng
mixed graph Đồ thị hỗn hợp
Bảng 1: Một số thuật ngữ tiếng Anh
45 / 45

You might also like