You are on page 1of 23

Đồ thị và các thuật toán trên đồ thị

Nguyễn Viết Tuấn Kiệt

CLB Toán học ứng dụng và Tin học


Đại học Bách khoa Hà Nội

Tháng 4, 2023
Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Tóm tắt nội dung

1 Khái niệm đồ thị

2 Các cách biểu diễn đồ thị trên máy tính

3 Giới thiệu một số thuật toán trên đồ thị

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Định nghĩa đồ thị

Định nghĩa 1:
Đồ thị G là một cặp (V , E ) bao gồm:
Tập hợp hữu hạn V ̸= ∅, phần tử của V được gọi là đỉnh
Tập hợp E ⊆ V × V ; e = (a, b) ∈ E được gọi là cạnh với a, b là các đầu mút
Ngoài ra:
Nếu (a, b) ∈ E thì ta nói đỉnh b kề với đỉnh a.
Nếu e = (a, a) ∈ E thì ta nói e là một khuyên.
Cặp đỉnh (a, b) ∈ E không sắp thứ tự được gọi là cạnh vô hướng, còn nếu nó có
sắp thứ tự thì được gọi là cạnh có hướng.
Như vậy:
Đồ thị chỉ chứa các cạnh vô hướng được gọi là đồ thị vô hướng.
Đồ thị chỉ chứa các cạnh có hướng được gọi là đồ thị có hướng.
Hải Âu Đồ thị và các thuật toán trên đồ thị
Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Các khái niệm cơ bản

Định nghĩa 2
Một đồ thị không có khuyên, trong đó mỗi cặp đỉnh được nối với nhau bởi không quá
một cạnh được gọi là đơn đồ thị, còn nếu không, nó được gọi là đa đồ thị.

Hình: Minh họa đơn đồ thị có hướng

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Các khái niệm cơ bản

Định nghĩa 3.1


Với đồ thị vô hướng, ta gọi:

deg (v ) = |{u ∈ V : (u, v ) ∈ E }|

là bậc của đỉnh v thể hiện cho số các đỉnh kề v .


Nhận xét:
X
deg (v ) = 2|E |
v ∈V

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Các khái niệm cơ bản

Định nghĩa 3.2


Với đồ thị có hướng, ta gọi:

deg + (v ) = |{u ∈ V : (v , u) ∈ E }|

là bậc ngoài của v thể hiện cho số các cung xuất phát từ v và

deg − (v ) = |{u ∈ V : (u, v ) ∈ E }|

là bậc trong của v thể hiện cho số các cung đi vào v .


Nhận xét:
X X
deg + (v ) = deg − (v ) = |E |
v ∈V v ∈V

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Các khái niệm cơ bản

Với G = (V , E ) là một đồ thị.

Định nghĩa 4
Đường đi trong đồ thị là một dãy các đỉnh:

v1 , v2 , v3 , ..., vn

sao cho mỗi đỉnh trong dãy kề với đỉnh liền trước nó.
Ngoài ra:
Hai đỉnh của đồ thị được gọi là liên thông nếu trên đồ thị đó có đường đi vô
hướng từ đỉnh này đến đỉnh kia.
Số cạnh của đường đi là độ dài của đường đi đó.
Đường đi đơn là đường đi mà các đỉnh trên nó đôi một khác nhau.
Đường đi có đỉnh đầu trùng với đỉnh cuối được gọi là chu trình.
Hải Âu Đồ thị và các thuật toán trên đồ thị
Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng ma trận kề

Định nghĩa 5
Với đồ thị G = (V , E ) và V = {1, 2, 3, ..., n}. Ma trận A = [aij ]n×n là ma trận kề của
đồ thị G , trong đó aij là số cạnh nối đỉnh i với đỉnh j trong G với mọi i, j ∈ V .
 
1 0 3 0
0 1 2 1
Chẳng hạn, A =  0 0 0 1 là ma trận kề của đa đồ thị sau:

1 0 1 0

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng ma trận kề

Định lý 1
Đồ thị G có ma trận kề là A. Khi đó, phần tử hàng i cột j của ma trận lũy thừa Ak là
số các đường đi khác nhau có độ dài k từ đỉnh i đến đỉnh j.
Chứng minh:
Với k = 1, hiển nhiên đúng.
Giả sử mệnh đề đúng với k ≥ 1. Đặt A = [aij ]n×n , Ak = [bij ]n×n , Ak+1 = [cij ]n×n .
n
X
Khi đó, ta có cij = biq aqj .
q=1
Với mỗi 1 ≤ q ≤ n thì biq là số đường đi khác nhau có độ dài k từ đỉnh i đến đỉnh q và
aqj là số cạnh nối đỉnh q với đỉnh j. Nên khi q lần lượt là các đỉnh 1, 2, 3, ..., n thì cij là
số lượng tất cả các đường đi khác nhau có độ dài đúng bằng k + 1 từ đỉnh i đến đỉnh j.

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng ma trận kề

Nếu đồ thị G = (V , E ) có trọng số, nghĩa là mỗi cặp (i, j) ∈ E được gán với một
số thực mij thì ma trận trọng số của G là A = [aij ]n×n xác định bởi:
(
mij , ∀(i, j) ∈ E
aij =
0, ∀(i, j) ̸∈ E

Nếu ta chỉ quan tâm đến tính chất có hay không đường đi giữa các đỉnh của đồ
thị G = (V , E ) thì ta sử dụng ma trận kề logic của G là A = [aij ]n×n xác định bởi:
(
1, ∀(i, j) ∈ E
aij =
0, ∀(i, j) ̸∈ E

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng ma trận kề

Định nghĩa 5.1


Với đơn đồ thị G = (V , E ) vô hướng và V = {v1 , v2 , v3 , ..., vn }; E = {e1 , e2 , ..., em }.
Ma trận B cấp n × m là ma trận liên thuộc của đồ thị G , xác định bởi:
(
1, nếu vi là điểm mút của cạnh ej
aij =
0, nếu vi không là điểm mút của cạnh ej

Nhận xét:
Xm
aij = deg (vi )
j=1
Xn
aij = 2
i=1

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng ma trận kề

Định nghĩa 5.2


Với đơn đồ thị G = (V , E ) có hướng và V = {v1 , v2 , v3 , ..., vn }; E = {e1 , e2 , ..., em }.
Ma trận B cấp n × m là ma trận liên thuộc của đồ thị G , xác định bởi:

−1, nếu vi là đỉnh đầu của cạnh ej

aij = +1, nếu vi là đỉnh cuối của cạnh ej

0, nếu vi không là đỉnh của cạnh ej

Nhận xét:
Xm
aij = deg − (vi ) − deg + (vi )
j=1
n
X
aij = 0
i=1
Hải Âu Đồ thị và các thuật toán trên đồ thị
Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng ma trận kề

Định lý 2
Đơn đồ thị định hướng G có ma trận liên thuộc là Bn×m . Khi đó ma trận
L = [ℓij ]n×n = BB T có tính chất sau:

deg (vi ), nếu i = j

ℓij = −1, nếu i ̸= j và hai đỉnh vi , vj kề nhau

0, còn lại

Bạn đọc tự chứng minh.

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng ma trận kề

Ưu điểm:
Các thao tác cơ bản như: thêm một cạnh, xóa một cạnh và kiểm tra xem có
đường đi từ đỉnh i đến đỉnh j hay không có độ phức tạp O(1), cực kỳ hiệu quả.
Bằng cách thực hiện các phép toán trên ma trận kề, ta có được hiểu biết về tính
chất của đồ thị, mối quan hệ giữa các đỉnh của nó.
Nhược điểm:
Ta luôn luôn phải sử dụng một mảng có kích thước |V |2 để lưu trữ đồ thị gây
lãng phí bộ nhớ khi đồ thị có số lượng đỉnh rất lớn.
Các thao tác như: thêm một đỉnh, bỏ đi một đỉnh,... mất nhiều thời gian thực thi.
Khi nào sử dụng ma trận kề?
Khi đồ thị có số lượng đỉnh bé hoặc đồ thị dày đặc, có số cạnh quá lớn.
Khi ta thường xuyên phải kiểm tra đường đi giữa các đỉnh của đồ thị.

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng danh sách kề

Với mỗi v ∈ V , ta lưu trữ danh sách các đỉnh kề với v là:

adj(v ) = {u ∈ V : (v , u) ∈ E }

Tính chất:
Đối với đồ thị có hướng, tổng số phần tử trong tất cả danh sách kề là:
X X
|adj(v )| = deg + (v ) = |E |
v ∈V v ∈V

Đối với đồ thị vô hướng, tổng số phần trong tất cả danh sách kề là:
X X
|adj(v )| = deg (v ) = 2|E |
v ∈V v ∈V

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Biểu diễn đồ thị bằng danh sách kề

Ưu điểm:
Tiêu tốn bộ nhớ là O(|V | + |E |), trong nhiều trường hợp tốt hơn ma trận kề.
Hiệu quả khi liệt kê tất cả các đỉnh kề với một đỉnh.
Nhược điểm:
Tình huống tồi tệ nhất, mất O(|V |) để xem xét hai đỉnh có kề nhau không.
Khi nào sử dụng danh sách kề?
Khi số đỉnh lớn, số cạnh bé hoặc số cạnh không quá lớn so với số đỉnh.
Khi ma trận kề không hiệu quả.

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Thuật toán duyệt đồ thị

Mô tả thuật toán:
Với G = (V , E ) là đồ thị và v0 là một đỉnh nào đó của G . Kí hiệu L là một cấu trúc
dữ liệu kiểu danh sách dùng để chứa các đỉnh.
1 L = ∅;
2 L ← {v0 };
3 Lấy đỉnh v ra khỏi L;
4 Duyệt đỉnh v ;
5 Nạp các đỉnh của f (v ) vào L;
6 Nếu L ̸= ∅ thì quay lại bước 2;
7 Dừng.
Mục đích: Khảo sát tính chất của đồ thị.

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Thuật toán duyệt đồ thị theo chiều sâu (DFS)

Begin
Đánh dấu trạng thái chưa thăm cho tất cả các đỉnh
Đưa đỉnh bắt đầu vào ngăn xếp
while ngăn xếp ̸= ∅, do
phần tử đầu tiên của ngăn xếp đặt là u
xem xét u
if u chưa được thăm, then
đánh dấu u là đã thăm
for tất cả các đỉnh i kề u, do if ith vertex is unvisited, then push ith vertex
into the stack mark ith vertex as visited done done End

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Thuật toán duyệt đồ thị theo chiều rộng (BFS)

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Bài toán đường đi ngắn nhất

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Bài toán đường đi có trọng số bé nhất

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Bài toán luồng lớn nhất

Hải Âu Đồ thị và các thuật toán trên đồ thị


Khái niệm đồ thị
Các cách biểu diễn đồ thị trên máy tính
Giới thiệu một số thuật toán trên đồ thị

Bài toán sắc số của đồ thị

Hải Âu Đồ thị và các thuật toán trên đồ thị

You might also like