G được gọi là đa đồ thị nếu giữa hai đỉnh phân biệt u, v của V có thể có nhiều hơn 1 cạnh trong E nối từ u tới v G được gọi là giả đồ thị nếu G là đa đồ thị và có thể có cạnh nối từ
Trang 1Ch ươ ng II Lý thuy t đ th ế ồ ị
I Các khái niệm cơ bản
II Biểu diễn đồ thịIII Tính liên thông
IV Chu trình Euler
V Bài toán tìm đường đi ngắn nhất
VI Đồ thị phẳngVII.Tô màu đồ thị
Trang 2I Các khái ni m c b n ệ ơ ả
1 ĐỊNH NGHĨA ĐỒ THỊ (GRAPH)
Là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối các đỉnh
đó Được mô tả hình thức: G = (V, E)
V gọi là tập các đỉnh (Vertices) và E gọi là tập các cạnh
(Edges) Có thể coi E là tập các cặp (u, v) với u và v là hai
đỉnh thuộc V.
Ví dụ:
Đường
Trang 32 Phân lo i đ th ạ ồ ị
G được gọi là đơn đồ thị nếu giữa hai đỉnh phân biệt u,
v của V có nhiều nhất là 1 cạnh trong E nối từ u tới v
G được gọi là đa đồ thị nếu giữa hai đỉnh phân biệt u, v của V có thể có nhiều hơn 1 cạnh trong E nối từ u tới v
G được gọi là giả đồ thị nếu G là đa đồ thị và có thể có cạnh nối từ một đỉnh đến chính nó Cạnh đó được gọi là
khuyên
G được gọi là đồ thị vô hướng nếu các cạnh trong E
đỉnh cuối
G được gọi là đồ thị có hướng nếu các cạnh trong E có
Trang 4Ví dụ
Đơn đồ thị
vô hướng
Đơn đồ thị
Trang 53 C nh liên thu c, đ nh k , b c ạ ộ ỉ ề ậ
Đối với đồ thị vô hướng G = (V, E) Xét một cạnh e ∈ E, nếu
e = (u, v) thì ta nói hai đỉnh u và v là kề nhau (adjacent) và cạnh e này liên thuộc (incident) với đỉnh u và đỉnh v.
Với một đỉnh v trong đồ thị, ta định nghĩa bậc (degree) của v,
ký hiệu deg(v) là số cạnh liên thuộc với v
Định lý: Giả sử G = (V, E) là đồ thị vô hướng với m cạnh, khi
đó tổng tất cả các bậc đỉnh trong V sẽ bằng 2m:
Chứng minh: Khi lấy tổng tất cả các bậc đỉnh tức là mỗi cạnh
e = (u, v) bất kỳ sẽ được tính một lần trong deg(u) và một lần trong deg(v) Từ đó suy ra kết quả.
Hệ quả: Trong đồ thị vô hướng, số đỉnh bậc lẻ là số chẵn
m
deg(v)
Trang 6 Đối với đồ thị có hướng G = (V, E) Xét một cung e ∈ E, nếu
e = (u, v) thì đỉnh u khi đó được gọi là đỉnh đầu,đỉnh v được gọi là đỉnh cuối của cung e.
Với mỗi đỉnh v trong đồ thị có hướng, ta định nghĩa: bậc ra
của v ký hiệu deg+ (v) là số cung đi ra khỏi nó; bậc vào ký hiệu
deg-(v) là số cung đi vào đỉnh đó.
Định lý: Giả sử G = (V, E) là đồ thị có hướng với m cung, khi
v
m v
v) deg ( )(
deg
Trang 74 M t s d ng đ th đ c bi t ộ ố ạ ồ ị ặ ệ
a Đồ thị đầy đủ Kn (n≥1) có n đỉnh và mỗi cặp đỉnh đều có đúng một cạnh nối.
Trang 8 b Chu trình Cn (n≥3) có n đỉnh v1,v2, vn và các cạnh (v1,v2); (v2,v3) (vn-1,vn) và (vn,v1)
Trang 9 c Đồ thị hình bánh xe
Khi thêm một đỉnh vào giữa chu trình Cn và nối đỉnh này với các đỉnh của đồ thị Cn ta thu được đồ thị hình bánh xe.
Trang 10 d Đồ thị hình khối Qn có 2 n đỉnh, mỗi đỉnh được biểu diễn bằng xâu nhị phân độ dài n Hai đỉnh là liền kề nếu các xâu nhị phân biểu diễn chúng khác nhau đúng một bit.
Q 2
010
011 001
000
101 100
Q3
Trang 11 e Đồ thị phân đôi là đồ thị có tập các đỉnh V có thể phân làm hai tập con không rỗng, rời nhau V1 và V2 sao cho mỗi cạnh của đồ thị nối 1 đỉnh của V1 với 1 đỉnh của V2
Đồ thị phân đôi đầy đủ Km,n là đồ thị có tập các đỉnh được phân thành hai tập con tương ứng có m đỉnh và n đỉnh
và có cạnh giữa hai đỉnh nếu đỉnh thứ nhất thuộc tập con này, đỉnh thứ hai thuộc tập con kia
Trang 12 aij= 1 nếu (i, j) ∈ E
aij = 0 nếu (i, j) E ∉
Đối với đa đồ thị thì việc biểu diễn cũng tương tự trên, chỉ có điều nếu như (i, j) là cạnh thì không phải ta ghi số 1 vào vị trí
a mà là ghi số cạnh nối giữa đỉnh i và đỉnh j
Trang 13Ví dụ
Trang 14u đi m và nh c đi m
Ưu điểm của ma trận liền kề:
Đơn giản, trực quan, dễ cài đặt trên máy tính
Để kiểm tra xem hai đỉnh (u, v) của đồ thị có kề nhau hay không, ta chỉ việc kiểm tra bằng một phép so
sánh: auv≠ 0
Nhược điểm của ma trận liền kề:
Tiêu tốn bộ nhớ: bất kể số cạnh của đồ thị là nhiều
hay ít, ma trận liền kề luôn luôn đòi hỏi n2 ô nhớ để lưu các phần tử ma trận
Khó làm việc với đồ thị có số lượng đỉnh lớn
Trang 152 Danh sách c nh ạ
Trong trường hợp đồ thị có n đỉnh, m cạnh, ta có thể biểu
diễn đồ thị dưới dạng danh sách cạnh, trong cách biểu diễn này, người ta liệt kê tất cả các cạnh của đồ thị trong một danh sách, mỗi phần tử của danh sách là một cặp (u, v) tương ứng với một cạnh của đồ thị.
Danh sách được lưu trong bộ nhớ dưới dạng mảng hoặc
danh sách móc nối Ví dụ với đồ thị dưới đây:
Trang 16 Ưu điểm của danh sách cạnh:
Trong trường hợp đồ thị có số cạnh tương đối nhỏ: chẳng hạn m < 6n cách biểu diễn bằng danh sách cạnh sẽ tiết kiệm được không gian lưu trữ, bởi nó chỉ cần 2m ô nhớ
để lưu danh sách cạnh.
Dể dàng duyệt tất cả các cạnh của đồ thị.
Nhược điểm của danh sách cạnh:
Nhược điểm cơ bản của danh sách cạnh là khi ta cần duyệt tất cả các đỉnh kề với đỉnh v nào đó của đồ thị, thì chẳng có cách nào khác là phải duyệt tất cả các cạnh, lọc
ra những cạnh có chứa đỉnh v và xét đỉnh còn lại.
Trang 18III Tính liên thông
dãy các cạnh e1, e2, en với (u,x1) = e1; (x1,x2) = e2; (xn-1,v) =
en
Trang 19 Một đồ thị không liên thông là hợp của 1 hay nhiều đồ thị con liên thông Các đồ thị này được gọi là các thành phần liên thông
Đồ thị có hướng gọi là liên thông mạnh nếu có đường đi từ a tới b và từ b tới a với a, b là hai đỉnh bất kỳ của đồ thị.
Trang 20IV Chu trình và đ ườ ng đi Euler
Bài toán bảy cây cầu Euler, còn gọi là Bảy cầu ở Königsberg nảy sinh từ vấn đề cụ thể Thành phố Königsberg, Đức (nay
là Kaliningrad, Nga) nằm trên sông Pregel, bao gồm hai hòn đảo lớn nối với nhau và với đất liền bởi bảy cây cầu Câu hỏi đặt ra là có thể đi theo một tuyến đường mà đi qua mỗi cây cầu đúng một lần rồi quay lại điểm xuất phát hay không Năm
1736, Leonhard Euler đã chứng minh rằng điều đó là không thể được Trong lịch sử toán học, lời giải của Euler cho bài toán bảy cây cầu ở Königsberg được coi là định lý đầu tiên của lý thuyết đồ thị.
Trang 22Các đ nh nghĩa ị
Đường đi Euler (Eulerian path, Eulerian trail hoặc Euler walk) trong đồ thị vô hướng là đường đi của đồ thị đi qua tất cả các cạnh của đồ thị mỗi cạnh đúng một lần
Chu trình Euler (Eulerian cycle, Eulerian circuit hoặc Euler tour) trong đồ thị vô hướng là một chu trình đi qua tất cả các cạnh của đồ thị mỗi cạnh đúng một lần
Đồ thị gọi là đồ thị Euler khi nó chứa chu trình Euler và được gọi là nửa Euler khi nó chứa đường đi Euler
Trang 23Đ nh lý Euler v chu trình và đ ị ề ườ ng đi Euler
Đối với các đồ thị có hướng, các thuật ngữ đường đi và chu trình được thay bằng đường đi có hướng và chu trình có hướng
Đồ thị vô hướng liên thông G=(V, E) có chu trình Euler khi và chỉ khi G không có đỉnh nào bậc lẻ
Đồ thị vô hướng liên thông G=(V, E) có đường đi Euler khi và chỉ khi G có không quá hai đỉnh bậc lẻ Nếu G có đúng hai đỉnh bậc lẻ thì đường đi Euler có hai đầu đường đi nằm ở hai đỉnh bậc lẻ
Trang 24Mô t gi i thu t xây d ng chu trình Euler ả ả ậ ự
Input: Cho G = (V,E) là đồ thị vô hướng, liên thông , tất
cả các đỉnh đều có bậc chẵn
Output: Chu trình Euler
Giải thuật xây dựng chu trình Euler
Bước 1: Xây dựng một chu trình đơn Xuất phát từ đỉnh bất kỳ, chẳng hạn x0, vì bậc x0 lớn hơn 1, nên chọn được cạnh u0 = (xo,x1) Đến lượt x1, vì x1 có bậc lớn hơn 1, nên chọn được cạnh u1 = (x1,x2) khác với u0 Tiếp tục như vậy,
vì số đỉnh là hữu hạn nên sau một số hữu hạn bước ta gặp lại x0 Khi đó ta có một chu trình đơn, kí hiệu là C
Trang 25 Nếu tất cả các cạnh của G đã nằm trong C thì C là chu trình Euler của G.
Bước 2: Nếu còn cạnh của G chưa nằm trong C thì loại các cạnh trong C và sau đó loại các đỉnh cô lập khỏi G, gọi phần còn lại của G là G' Khi đó G' vẫn là liên thông
và không có đỉnh bậc lẻ Thêm nữa, vì G là liên thông nên có ít nhất một đỉnh chung của C với G'
Bước 3: Xuất phát từ đỉnh chung của G' và C, xây dựng chu trình đơn C' của G' như trong bước 1, ghép C' vào
C và quay về bước 2
Trang 27Xuất phát từ B, xây dựng chu
trình đơn C 1 = (B,3,C,4,B), xóa
các cạnh trong C 1 khỏi G 0 , phần
còn lại là G 1
Ghép thêm chu trình đơn C 1 =
(B,3,C,4,B) vào chu trình đơn C 0
thành C=(A,1, B,4,C,3,B ,2,A)
Xuất phát từ A, xây dựng chu trình đơn C 2 = (A,6,D,7,C,5,A), xóa các cạnh trong C 2 khỏi G 1 Lúc này các cạnh của
Trang 28V Bài toán tìm đ ườ ng đi ng n nh t ắ ấ
Bài toán
Cho một đồ thị G = (V,E) có trọng số và một đỉnh khởi đầu s Cần tìm được đường đi ngắn nhất từ đỉnh khởi đầu s đến một đỉnh khác của đồ thị
10 5
4
9
12
Trang 29 Thuật toán Johnson: giải bài toán đường đi ngắn nhất
cho mọi cặp đỉnh, có thể nhanh hơn thuật toán Warshall trên các đồ thị thưa
Trang 30Floyd-Thu t toán Dijkstra ậ
Thuật toán Dijkstra, mang tên của nhà toán người Hà Lan Edsger Dijkstra, là một thuật toán giải quyết bài toán tìm đường đi ngắn nhất Ở đây ta sẽ xét thuật toán Dijkstra trong đồ thị vô hướng liên thông có trọng số dương
Trang 31Mô t thu t toán Dijkstra ả ậ
Xây dựng một tập các đỉnh S={s}, với s là đỉnh khởi đầu
Với mỗi đỉnh v, chúng ta quản lý một nhãn d[v] là độ dài
bé nhất trong các đường đi từ đỉnh s đến đỉnh v
Trong các đỉnh ngoài S, chúng ta chọn đỉnh u có nhãn d[u] bé nhất, bổ sung vào tập S Tập S được mở rộng thêm một đỉnh, khi đó chúng ta cần cập nhật lại các nhãn d cho phù hợp với định nghĩa
Thuật toán kết thúc khi toàn bộ các đỉnh đã nằm trong tập S, hoặc nếu chỉ cần tìm đường đi ngắn nhất đến một đỉnh đích t, thì chúng ta dừng lại khi đỉnh t được bổ sung vào tập S
Trang 32Mô ph ng thu t toán Dijkstra ỏ ậ
Input: + Đồ thị liên thông G có trọng số dương G có các
đỉnh V = {v1, v2, ,vn} và có trọng số w(vi, vj) với w(vi, vj) = ∞ nếu (vi, vj) không là một cạnh trong G
Trang 33Procedure Dijkstra(G)
For i:=1 to n do
begin
d(vi) := ∞; {Khởi tạo độ dài ngắn nhất từ đỉnh xuất phát đến các đỉnh}
d(a) := 0; {Khởi tạo độ dài ngắn nhất từ đỉnh xuất phát đến chính nó}
For tất cả các đỉnh v không thuộc S
If d(u) + w(u,v) < d(v) then
begin d(v) := d(u) + w(u,v); truoc[v]:=u; end;
Trang 34Ví dụ
Tìm đường đi ngắn nhất giữa đỉnh a và đỉnh z trong đồ thị có trọng số sau
Trang 36+ Đưa đỉnh d vào tập S={a,d}
+ Có L(d)+u(d,b)=3<d(b)= 4 nên thay d(b)=3
+ Có L(d)+u(d,c)=10<d(c)= ∞ nên thay d(c)=10
+ Có L(d)+u(d,e)=12<d(e)= ∞ nên thay d(e)=12
+ Các đỉnh khác giữ nguyên nhãn
+ Đưa đỉnh b vào tập S vì d(b)=3
là nhỏ nhất S={a,d,b}
+ Có L(b)+u(b,c)=8<d(c)= 10 nên thay d(c)=8
+ Các đỉnh khác giữ nguyên nhãn
Trang 37+ Đưa đỉnh c vào tập S vì
d(c)=8 là nhỏ nhất S={a,d,b,c} + Có L(c)+u(c,e)=10<d(e)=12 nên thay d(e)=10
+ Có L(c)+u(c,z)=14<d(z)= ∞ nên thay d(z)=14
+ Đưa đỉnh e vào tập S vì
d(e)=10 là nhỏ nhất
S={a,d,b,c,e }
+ Có L(e)+u(e,z)=13<d(z)=14 nên thay d(z)=13
Trang 38+ Đưa đỉnh z vào tập S={a,d,b,c,e,z}
Kết quả
Đường đi ngắn nhất là: a,d,b,c,e,z
Độ dài là d(z) = 13
Chương trình
Trang 39VI Đ th ph ng ồ ị ẳ
Đồ thị được gọi là đồ thị phẳng nếu ta có thể vẽ nó trên mặt phẳng sao cho các cạnh của nó không cắt nhau tại các điểm không phải là đỉnh Cách vẽ như vậy sẽ được gọi là biểu diễn phẳng của đồ thị
Ví dụ: K4 là đồ thị phẳng
Q3 có là đồ thị phẳng hay không ?
Trang 40diễn phẳng của đồ thị Khi đó r = e - v + 2
Hệ quả 1: Nếu G là đơn đồ thị phẳng liên thông với e cạnh, v đỉnh trong đó v ≥ 3, khi đó e ≤ 3v - 6
Hệ quả 2: Nếu 1 đơn đồ thị phẳng liên thông có e cạnh,
v đỉnh (v ≥3) và không có chu trình độ dài 3 thì e ≤ 2v - 4
Trang 41Đ nh lí Kuratovski ị
Phép chia cạnh trên đồ thị G đối với cạnh e {u,w} được một
đồ thị chứa một đỉnh mới v, và cạnh e được thay bởi hai cạnh mới {u,v} và {v,w}.
Phép đồng phôi giữa hai đồ thị G và G′ nếu tồn tại một đồ thị
H sao cho cả G và G′ đều là kết quả thu được sau khi thực hiện một số phép chia cạnh đối với đồ thị H
Trang 42VII Tô màu đ th ồ ị
Tô màu cho một đơn đồ thị là sự gán màu cho các đỉnh của nó sao cho không có hai đỉnh liền kề được gán cùng
1 màu
kề nhau
Số màu của một đồ thị là số tối thiểu các màu cần thiết
để tô màu đồ thị này
Định lý 4 màu: Số màu của một đồ thị phẳng là không lớn hơn 4
Ví dụ: Số màu của đồ thị Kn là n vì mọi cặp đỉnh của đồ thị đều có cạnh nối nên không thể có những đỉnh nào trùng màu được
Trang 43Algorithm of Welsh and Powell
Sort the vertices in decreasing order of degree and initially have every vertex uncolored.
Traverse the vertices in order, giving a vertex color 1 if it is uncolored and it does not yet have a neighbor with color 1.
Repeat this process with colors 2, 3, etc until
no vertex is uncolored.
Trang 44Thu t toán tô màu Welsh and Powell ậ
b1 Sắp xếp các đỉnh theo thứ tự giảm dần theo bậc Khởi tạo cho mọi đỉnh đều chưa có màu
b2 Duyệt qua các đỉnh theo thứ tự, tô cho đỉnh màu 1 nếu nó chưa có màu và nó không có đỉnh liền kề có màu
là màu 1.(so sánh màu với các đỉnh, chữ không phải chắc đỉnh đầu tiên)
b3 Lặp lại bước 2 với màu 2, màu 3, vv cho đến khi mọi đỉnh đều đã được tô màu
Trang 45ng d ng c a bài toán tô màu đ th
Bài toán lập lịch thi
Lập lịch thi sao cho không có sinh viên nào thi 2 môn cùng một lúc
Ý tưởng
Xem mỗi môn thi là một đỉnh của đồ thị
Giữa 2 đỉnh có cạnh nối nếu có sinh viên phải thi cả hai môn đó
Thời gian thi của các môn được biểu diễn bởi các màu khác nhau
Như vậy việc lập lịch thi sẽ tương ứng với việc tô màu cho đồ thị
Trang 47Bài toán phân chia t n s ầ ố
Các kênh truyền hình từ số 2 đến số 13 được phân chia cho các đài truyền hình ở bắc mỹ sao cho không có hai đài phát nào cách nhau nhỏ hơn 150 Km lại dùng chung 1 kênh Có thể chia kênh bằng mô hình đồ thị.
Trang 48Đ th đ i ng u ồ ị ố ẩ
Mọi bản đồ trên mặt phẳng có thể biểu diễn bằng một đồ thị bằng cách như sau
Mỗi miền của bản đồ ứng với một đỉnh của đồ thị
Có cạnh nối giữa hai đỉnh của đồ thị nếu hai miền tương ứng có chung biên giới.(Hai miền chỉ chung nhau một điểm thì không được gọi là chung nhau)
Đồ thị nhận được bằng cách như thế gọi là đồ thị đối ngẩu của bản đồ
Ví dụ: