Bài giảng Toán rời rạc - Phần 2: Lý thuyết đồ thị - Chương 1: Các khái niệm cơ bản - Nguyễn Đức Nghĩa
Chương 1
CÁC KHÁI NIỆM CƠ BẢN
1.1. Đồ thị trong thực tế
1.2. Các loại đồ thị
1.3. Bậc của đỉnh
1.4. Đồ thị con
1.5. Đồ thị đẳng cấu
1.6. Đường đi và chu trình
1.7. Tính liên thông
1.8. Một số loại đồ thị đặc biệt
1.9. Tô màu đồ thị
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Toán rời rạc - Phần 2: Lý thuyết đồ thị - Chương 1: Các khái niệm cơ bản - Nguyễn Đức Nghĩa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Toán rời rạc - Phần 2: Lý thuyết đồ thị - Chương 1: Các khái niệm cơ bản - Nguyễn Đức Nghĩa
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
1
Phần 2
LÝ THUYẾT ĐỒ THỊ
Graph Theory
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
2
Nội dung
Chương 1. Các khái niệm cơ bản
Đồ thị vô hướng và có hướng
Các thuật ngữ cơ bản
Một số dạng đồ thị vô hướng đặc biệt
Chương 2. 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 cạnh, Danh sách kề
Chương 3. Duyệt đồ thị
Tìm kiếm theo chiều sâu; Tìm kiếm theo chiều rộng
Tìm đường đi và kiểm tra tính liên thông
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
3
Nội dung
Chương 4. Cây và cây khung của đồ thị
Cây và các tính chất của cây
Cây khung của đồ thị
Bài toán cây khung nhỏ nhất
Chương 5. Bài toán đường đi ngắn nhất
Phát biểu bài toán
Đường đi ngắn nhất xuất phát từ một đỉnh (Thuật toán Dijkstra, Ford-Bellman)
Đường đi ngắn nhất trên đồ thị không có chu trình
Đường đi ngắn nhất giữa mọi cặp đỉnh (Thuật toán Floyd)
Chương 6. Bài toán luồng cực đại trong mạng
Mạng, luồng và bài toán luồng cực đại
Định lý Ford-Fulkerson
Thuật toán Ford-Fulkerson
Một số ứng dụng
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
4
Chương 1
CÁC KHÁI NIỆM CƠ BẢN
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
5
Chương 1 CÁC KHÁI NIỆM CƠ BẢN
1.1. Đồ thị trong thực tế
1.2. Các loại đồ thị
1.3. Bậc của đỉnh
1.4. Đồ thị con
1.5. Đồ thị đẳng cấu
1.6. Đường đi và chu trình
1.7. Tính liên thông
1.8. Một số loại đồ thị đặc biệt
1.9. Tô màu đồ thị
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
6
Trong toán học đời thường hiểu là: Bản vẽ hay Sơ đồ biểu diễn dữ liệu nhờ sử dụng hệ thống toạ độ.
Trong toán rời rạc: Đây là cấu trúc rời rạc có tính trực quan cao, rất tiện ích để biểu diễn các quan hệ.
Đồ thị là gì?
Không phải
cái ta muốn đề cập
Không phải cái này
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
7
Các ứng dụng thực tế của đồ thị
Có tiềm năng ứng dụng trong nhiều lĩnh vực (Đồ thị có thể dùng để biểu diễn các quan hệ. Nghiên cứu quan hệ giữa các đối tượng là mục tiêu của nhiều lĩnh vực khác nhau).
Ứng dụng trong mạng máy tính, mạng giao thông, mạng cung cấp nước, mạng điện,) lập lịch, tối ưu hoá luồng, thiết kế mạch, quy hoạch phát triển...
Các ứng dụng khác: Phân tích gen, trò chơi máy tính, chương trình dịch, thiết kế hướng đối tượng,
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
8
Mối liên hệ giữa các môn học
321
143
142
322
326
341
370
378
401
421
Đỉnh = môn học
Cạnh có hướng = đk tiên quyết
373
410
413
415
417
461
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
9
Biểu diễn mê cung
S
Đỉnh = phòng
Cạnh = cửa thông phòng hoặc hành lang
S
E
B
E
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
10
Biểu diễn mạch điện (Electrical Circuits)
Đỉnh = nguồn, công tắc, điện trở,
Cạnh = đoạn dây nối
Nguồn
Công tắc
Điện trở
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
11
Các câu lệnh của chương trìnhProgram statements
x1=q+y*z
x2=y*z-q
Thoạt nghĩ:
Loại
Biểu thức con
chung:
y
z
*
-
q
+
q
*
x1
x2
y
z
-
q
+
q
*
x1
x2
Đỉnh = ký hiệu/phép toán
Cạnh = mối quan hệ
y*z tính hai lần
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
12
Yêu cầu trình tự (Precedence)
S 1 a=0;
S 2 b=1;
S 3 c=a+1
S 4 d=b+a;
S 5 e=d+1;
S 6 e=c+d;
3
1
2
6
5
4
Các câu lệnh nào phải thực hiện trước S 6 ?
S 1 , S 2 , S 3 , S 4
Đỉnh = câu lệnh
Cạnh = yêu cầu trình tự
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
13
Truyền thông trong mạng máy tính (Information Transmission in a Computer Network)
Hà nội
New York
Bắc kinh
Tokyo
Sydney
Seoul
Đỉnh = máy tính
Cạnh = tốc độ truyền thông
128
140
181
30
16
56
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
14
Luồng giao thông trên xa lộ (Traffic Flow on Highways)
Đỉnh = thành phố
Cạnh = lượng xe cộ trên
tuyến đường cao tốc kết nối giữa các thành phố
UW
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
15
Mạng xe buýt
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
16
Mạng tàu điện ngầm
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
17
Sơ đồ đường phố
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
18
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
19
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
20
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
21
Chương 1 CÁC KHÁI NIỆM CƠ BẢN
1.1. Đồ thị trong thực tế
1.2. Các loại đồ thị
1.3. Bậc của đỉnh
1.4. Đồ thị con
1.5. Đồ thị đẳng cấu
1.6. Đường đi và chu trình
1.7. Tính liên thông
1.8. Một số loại đồ thị đặc biệt
1.9. Tô màu đồ thị
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
22
Đồ thị vô hướng (Undirected Graphs)
Định nghĩa. Đơn ( đa ) đồ thị vô hướng G = ( V,E ) là cặp gồm:
Tập đỉnh V là tập hữu hạn phần tử, các phần tử gọi là các đỉnh
Tập cạnh E là tập ( họ ) các bộ không có thứ tự dạng
( u, v ), u, v V, u ≠v
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
23
Đơn đồ thị vô hướng (Simple Graph)
Ví dụ: Đơn đồ thị G 1 = ( V 1 , E 1 ), trong đó
V 1 ={ a, b, c, d, e, f, g, h },
E 1 ={( a,b ), ( b,c ), ( c,d ), ( a,d ), ( d,e ), ( a,e ), ( d,b ), ( f,g )}.
Đồ thị G 1
a
b
e
d
c
g
f
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
24
Đa đồ thị vô hướng (Multi Graphs)
Ví dụ: Đa đồ thị G 2 = ( V 2 , E 2 ), trong đó
V 2 ={ a, b, c, d, e, f, g, h },
E 2 ={( a,b ), ( b,c ), ( b,c ), ( c,d ), ( a,d ), ( d,e ), ( a,e ), ( a,e ), ( a, e ), ( d,b ), ( f,g )}.
Đồ thị G 2
d
Cạnh lặp
e
a
b
c
f
g
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
25
Đồ thị có hướng (Directed Graph)
Định nghĩa. Đơn ( đa ) đồ thị có hướng G = ( V,E ) là cặp gồm:
Tập đỉnh V là tập hữu hạn phần tử, các phần tử gọi là các đỉnh
Tập cung E là tập ( họ ) các bộ có thứ tự dạng
( u, v ), u, v V, u ≠v
Ví dụ: Đơn đồ thị có hướng G 3 = ( V 3 , E 3 ), trong đó
V 3 ={ a, b, c, d, e, f, g, h },
E 3 ={( a,b ), ( b,c ), ( c,b ), ( d,c ), ( a,d ), ( b, d ), ( a,e ), ( d,e ),
( e,a ), ( f,g ), ( g,f )}
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
26
Đơn đồ thị có hướng (Simple digraph)
Đồ thị G 3
a
b
e
d
c
g
f
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
27
Đa đồ thị có hướng (Multi Graphs)
Ví dụ: Đa đồ thị có hướng G 4 = ( V 4 , E 4 ), trong đó
V 4 ={ a, b, c, d, e, f, g, h },
E 4 ={( a,b ), ( b,c ), ( c,b ), ( d,c ), ( a,d ), ( b, d ), ( a,e ), ( a,e ),
( d,e ), ( e,a ), ( f,g ), ( g,f )}
Đồ thị G 4
e
a
d
b
c
f
g
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
28
Các loại đồ thị: Tóm tắt
Chú ý:
Một dạng đồ thị ít sử dụng hơn, đó là giả đồ thị. Giả đồ thị là đa đồ thị mà trong đó có các khuyên (cạnh nối 1 đỉnh với chính nó).
Cách phân loại đồ thị dùng ở đây chưa chắc đã được chấp nhận trong các tài liệu khác...
Loại
Kiểu cạnh
Có cạnh lặp?
Đơn đồ thị vô hướng
Vô hướng
Không
Đa đồ thị vô hướng
Vô hướng
Có
Đơn đồ thị có hướng
Có hướng
Không
Đa đồ thị có hướng
Có hướng
Có
Khuyên (loop)
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
29
Các thuật ngữ Graph Terminology
Chúng ta cần các thuật ngữ liên quan đến mối quan hệ giữa các đỉnh và các cạnh của đồ thị sau:
Kề nhau, nối, đầu mút, bậc, bắt đầu, kết thúc, bán bậc vào, bán bậc ra,
u
v
v
u
e
e
Cạnh vô hướng e =( u,v )
Cạnh có hướng (cung) e =( u,v )
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
30
Kề (Adjacency)
Cho G là đồ thị vô hướng với tập cạnh E . Giả sử e E là cặp ( u , v ) . Khi đó ta nói:
u , v là kề nhau/lân cận/nối với nhau ( adjacent / neighbors / connected) .
Cạnh e là liên thuộc với hai đỉnh u và v .
Cạnh e nối ( connect ) u và v .
Các đỉnh u và v là các đầu mút ( endpoints ) của cạnh e .
v
u
e
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
31
Tính kề trong đồ thị có hướng
Cho G là đồ thị có hướng (có thể là đơn hoặc đa) và giả sử e = ( u , v ) là cạnh của G . Ta nói:
u và v là kề nhau, u là kề tới v , v là kề từ u
e đi ra khỏi u, e đi vào v .
e nối u với v , e đi từ u tới v
Đỉnh đầu ( initial vertex) của e là u
Đỉnh cuối ( terminal vertex ) của e là v
u
v
e
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
32
Chương 1 CÁC KHÁI NIỆM CƠ BẢN
1.1. Đồ thị trong thực tế
1.2. Các loại đồ thị
1.3. Bậc của đỉnh
1.4. Đồ thị con
1.5. Đồ thị đẳng cấu
1.6. Đường đi và chu trình
1.7. Tính liên thông
1.8. Một số loại đồ thị đặc biệt
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
33
Bậc của đỉnh (Degree of a Vertex)
Giả sử G là đồ thị vô hướng, v V là một đỉnh nào đó.
Bậc của đỉnh v , deg( v ) , là số cạnh kề với nó.
Đỉnh bậc 0 được gọi là đỉnh cô lập ( isolated ).
Đỉnh bậc 1 được gọi là đỉnh treo ( pendant ).
Các ký hiệu thường dùng:
( G ) = min {deg( v ): v V },
( G ) = max {deg( v ): v V }.
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
34
Ví dụ
a
b
c
e
d
f
deg(d) = 3
deg(f) = 0
f là đỉnh cô lập
b là kề với c và c là kề với b
Cạnh (a,b) là liên thuộcvới hai đỉnh a và b
g
deg(g) = 1
g là đỉnh treo
( G ) = min {deg( v ): v V } = 0,
( G ) = max {deg( v ): v V }= 3.
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
35
Định lý về các cái bắt tay (Handshaking Theorem)
Định lý. Giả sử G là đồ thị vô hướng (đơn hoặc đa) với tập đỉnh V và tập cạnh E . Khi đó
CM: Trong tổng ở vế trái mỗi cạnh e =( u,v ) E được tính hai lần: trong deg( u ) và deg( v ).
Hệ quả: Trong một đồ thị vô hướng bất kỳ, số lượng đỉnh bậc lẻ (đỉnh có bậc là số lẻ) bao giờ cũng là số chẵn.
32
Ví dụ. Biết rằng mỗi đỉnh của đồ thị vô hướng G =( V,E ) với 14 đỉnh và 25 cạnh đều có bậc là 3 hoặc 5.
Hỏi G có bao nhiêu đỉnh bậc 3?
Giải. Giả sử G có x đỉnh bậc 3.
Khi đó có 14 - x đỉnh bậc 5.
Do | E | = 25, nên tổng tất cả các bậc là 50.
Từ đó, 3 x + 5(14 - x ) = 50
Suy ra x = 10.
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
37
Bậc của đỉnh của đồ thị có hướng
Cho G là đồ thị có hướng, v là đỉnh của G .
Bán bậc vào ( in-degree ) của v , deg ( v ) , là số cạnh đi vào v .
Bán bậc ra ( out-degree ) của v , deg ( v ) , là số cạnh đi ra khỏi v .
Bậc của v , deg( v ): deg ( v )+ deg ( v ) , là tổng của bán bậc vào và bán bậc ra của v .
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
38
Ví dụ
f
a
b
c
e
d
deg - (d) = 2
deg + (d)= 1
deg-(f) = 0
deg+(f)= 0
b kề tới c và c kề từ b
deg-(a) = 0
deg+(a)= 2
a- đỉnh nguồn
deg-(e) = 2
deg+(e)= 0
e – đỉnh đích (target)
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
39
Định lý về các cái bắt tay có hướng Directed Handshaking Theorem
Định lý. Giả sử G là đồ thị có hướng (có thể là đơn hoặc đa) với tập đỉnh V và tập cạnh E . Khi đó:
Chú ý là khái niệm bậc của đỉnh là không thay đổi cho dù ta xét đồ thị vô hướng hay có hướng.
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
40
Chương 1 CÁC KHÁI NIỆM CƠ BẢN
1.1. Đồ thị trong thực tế
1.2. Các loại đồ thị
1.3. Bậc của đỉnh
1.4. Đồ thị con
1.5. Đồ thị đẳng cấu
1.6. Đường đi và chu trình
1.7. Tính liên thông
1.8. Một số loại đồ thị đặc biệt
1.9. Tô màu đồ thị
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
41
Đồ thị con (Subgraphs)
Định nghĩa. Đồ thị H =( W , F ) được gọi là đồ thị con của đồ thị G =( V , E ) nếu W V và F E .
Ký hiệu: H G.
G
H
Ví dụ
Definition. A graph H is a subgraph of a graph G if V ( H ) V ( G ) and E ( H ) E ( G ) (denote H G ).
G
u
v
w
x
y
H
v
w
x
y
G
G
v
w
x
y
F
Ví dụ
Định nghĩa. Cho G = ( V, E ) là đồ thị vô hướng.
Giả sử S V , S . Đồ thị con cảm sinh bởi S là đồ thị con cực đại của G với tập đỉnh là S . (thường ký hiệu là )
Đồ thị con H của đồ thị G được gọi là đồ thị con cảm sinh đỉnh ( vertex-induced subgraph) của G nếu tìm được S V sao cho H = .
Ví dụ:
Đồ thị con cảm sinh Induced Subgraph
G
u
v
w
x
y
H không là đồ thị con cảm sinh của G .
v
w
x
y
H
H ∪ {( x,w )} đúng
Loại bỏ đỉnh The deletion of vertices
Định nghĩa. Cho G = ( V, E ) là đồ thị vô hướng. Giả sử S V . Ta gọi việc loại bỏ tập đỉnh S khỏi đồ thị là việc loại bỏ tất cả các đỉnh trong S cùng các cạnh kề với chúng.
Như vậy nếu ký hiệu đồ thị thu được là G - S, ta có G - S = .
Nếu S ={ v }, thì để đơn giản ta viết G - v .
G
u
v
w
x
y
Giả sử S= { x,u }
G - S
u
v
w
x
y
Định nghĩa. Cho G = ( V, E ) là đồ thị vô hướng.
Giả sử X E, X . Đồ thị con cảm sinh bởi X là đồ thị con nhỏ nhất của G với tập cạnh là X . (ký hiệu bởi )
Đồ thị con H của G được gọi là đồ thị con cảm sinh cạnh ( edge-induced subgraph) nếu H = đối với một tập con nào đó X E .
Ví dụ:
Đồ thị con cảm sinh cạnh Edge Induced Subgraph
G
u
v
w
x
y
Cho X = {( u,v ),( v,w )}
u
v
w
Ví dụ. Cho G =( V,E ) là đồ thị vô hướng.
Nếu H =, thì có thể suy ra H = được không?
No
G
u
v
w
H
v
w
Đồ thị con cảm sinh cạnh và cảm sinh đỉnh
Dễ thấy, G = .
Ví dụ trên cho thấy không nhất thiết trùng với G
Định nghĩa. Đồ thị con H G được gọi là đồ thị con bao trùm của G nếu tập đỉnh của H là tập đỉnh của G : V ( H ) = V ( G ).
Định nghĩa. Ta viết H = G + {( u,v ), ( u,w )} hiểu là E ( H ) = E ( G ) ∪ {( u,v ), ( u,w )}, trong đó ( u,v ), ( u,w ) E ( G ).
Đồ thị con bao trùm Spanning Subgraph
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
48
Hợp của hai đồ thị
Hợp G 1 G 2 của hai đơn đồ thị G 1 =( V 1 , E 1 ) và G 2 =( V 2 , E 2 ) là đơn đồ thị ( V 1 V 2 , E 1 E 2 ) .
a
b
c
d
e
a
b
c
d
f
49
Hợp của các đồ thị
Nếu S 1 , S 2 , S 3 , S 4 , S 5 , S 6 là các hình vuông, khi đó Q 3 là hợp của các diện của nó: Q 3 = S 1 S 2 S 3 S 4 S 5 S 6
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
50
Chương 1 CÁC KHÁI NIỆM CƠ BẢN
1.1. Đồ thị trong thực tế
1.2. Các loại đồ thị
1.3. Bậc của đỉnh
1.4. Đồ thị con
1.5. Đồ thị đẳng cấu
1.6. ... time = time+1;
f[u] = time;
end;
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
230
Phân tích thuật toán DFS
Mỗi đỉnh được thăm đúng 1 lần, việc thăm mỗi đỉnh đòi hỏi chi phí thời gian O (1), suy ra thao tác thăm đỉnh đòi hỏi thời gian O (| V |).
Vòng lặp trong DFS(u) thực hiện việc duyệt cạnh của đồ thị
Mỗi cạnh được duyệt qua đúng một lần nếu đồ thị là có hướng và 2 lần nếu đồ thị là vô hướng
Như vậy tổng số lần lặp là O (| E| ).
Vậy, thuật toán có thời gian O (| V|+|E| )
Đối với đồ thị, thuật toán có đánh giá như vậy gọi là thuật toán thời gian tuyến tính
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
231
Ví dụ: DFS
Đỉnh xuất phát tìm kiếm (Source vertex)
a
d
e
h
g
f
c
b
Để hoạt động của thuật toán là xác định, giả thiết rằng ta duyệt các đỉnh trong danh sách kề của một đỉnh theo thứ tự từ điển
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
232
Ví dụ: DFS
1 |
|
|
|
|
|
|
|
sourcevertex
d [ v ] f [ v ]
a
b
f
e
h
g
d
c
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
233
Ví dụ: DFS
1 |
|
|
|
|
|
2 |
|
sourcevertex
a
g
f
e
h
d
c
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
234
Ví dụ: DFS
1 |
|
|
|
|
3 |
2 |
|
sourcevertex
a
g
h
f
d
e
c
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
235
Ví dụ: DFS
1 |
|
|
|
|
3 | 4
2 |
|
sourcevertex
a
h
g
f
e
d
c
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
236
Ví dụ: DFS
1 |
|
|
|
5 |
3 | 4
2 |
|
sourcevertex
a
h
g
f
e
d
c
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
237
Ví dụ: DFS
1 |
|
|
|
5 | 6
3 | 4
2 |
|
sourcevertex
a
g
f
e
h
d
c
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
238
Ví dụ: DFS
1 |
8 |
|
|
5 | 6
3 | 4
2 | 7
|
sourcevertex
a
h
f
g
e
d
b
c
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
239
Ví dụ: DFS
1 |
8 |
|
|
5 | 6
3 | 4
2 | 7
|
sourcevertex
a
g
f
e
h
d
c
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
240
Ví dụ: DFS
1 |
8 |
|
|
5 | 6
3 | 4
2 | 7
9 |
sourcevertex
c
a
b
g
h
f
d
e
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
241
Ví dụ: DFS
1 |
8 |
|
|
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
a
f
b
c
d
e
g
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
242
Ví dụ: DFS
1 |
8 |11
|
|
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
a
b
e
c
f
d
h
g
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
243
Ví dụ: DFS
1 |12
8 |11
|
|
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
a
c
b
d
e
g
f
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
244
Ví dụ: DFS
1 |12
8 |11
13|
|
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
a
e
b
c
g
d
h
f
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
245
Ví dụ: DFS
1 |12
8 |11
13|
14|
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
a
e
b
g
d
c
h
f
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
246
Ví dụ: DFS
1 |12
8 |11
13|
14|15
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
a
e
b
d
c
g
f
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
247
Ví dụ: DFS
1 |12
8 |11
13|16
14|15
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
a
e
b
d
c
g
f
h
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
248
DFS: Các loại cạnh
DFS(G) sinh ra một cách phân loại các cạnh của đồ thị đã cho:
Cạnh của cây ( Tree edge ) : là cạnh mà theo đó từ một đỉnh ta đến thăm một đỉnh mới (cạnh đi vào đỉnh trắng)
Các cạnh này tạo thành một rừng gọi là rừng tìm kiếm DFS .
Các đỉnh được thăm khi thực hiện DFS(v) và các cạnh của cây tạo thành cây được gọi là cây DFS ( v )
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
249
Ví dụ: Rừng DFS
1 |12
8 |11
13|16
14|15
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex a
Tree edges
Cây DFS ( a )
sourcevertex g
Cây DFS ( g )
a
e
d
c
g
f
h
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
250
DFS: Cạnh ngược
DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:
Cạnh của cây ( Tree edge ) : là cạnh mà theo đó từ một đỉnh ta đến thăm một đỉnh mới (cạnh đi vào đỉnh trắng)
Cạnh ngược ( Back edge ) : đi từ con cháu (descendent) đến tổ tiên (ancestor)
Đi vào đỉnh xám (đi từ đỉnh xám đến đỉnh xám)
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
251
Ví dụ: DFS Cạnh ngược
1 |12
8 |11
13|16
14|15
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
Tree edges
Back edges
a
d
e
c
g
f
h
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
252
DFS: Cạnh tới
DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:
Cạnh của cây ( Tree edge ) : là cạnh mà theo đó từ một đỉnh ta đến thăm một đỉnh mới (cạnh đi vào đỉnh trắng)
Cạnh ngược ( Back edge ) : đi từ con cháu (descendent) đến tổ tiên (ancestor)
Cạnh tới ( Forward edge ) : đi từ tổ tiên đến con cháu
Không là cạnh của cây
Đi từ đỉnh xám đến đỉnh đen
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
253
Ví dụ: DFS Cạnh tới
1 |12
8 |11
13|16
14|15
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
Tree edges
Back edges
Forward edges
a
d
c
g
f
h
e
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
254
DFS: Cạnh vòng
DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:
Cạnh của cây ( Tree edge ) : là cạnh mà theo đó từ một đỉnh ta đến thăm một đỉnh mới (cạnh đi vào đỉnh trắng)
Cạnh ngược ( Back edge ) : đi từ con cháu (descendent) đến tổ tiên (ancestor)
Cạnh tới ( Forward edge ) : đi từ tổ tiên đến con cháu
Cạnh vòng ( Cross edge ) : cạnh nối hai đỉnh không có quan hệ họ hàng
Không là cạnh của cây, và giống như cạnh vòng cũng
Đi từ đỉnh xám đến đỉnh đen
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
255
Ví dụ: DFS Cạnh vòng
1 |12
8 |11
13|16
14|15
5 | 6
3 | 4
2 | 7
9 |10
sourcevertex
Tree edges
Back edges
Forward edges
Cross edges
a
f
d
h
g
c
e
b
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
256
DFS: Các loại cạnh
DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:
Tree edge : cạnh theo đó từ một đỉnh đến thăm đỉnh mới (trắng)
Back edge : đi từ con cháu đến tổ tiên
Forward edge : đi từ tổ tiên đến con cháu
Cross edge : giữa hai đỉnh không có họ hàng
Chú ý: Cạnh của cây & cạnh ngược là quan trọng; nhiều thuật toán không đòi hỏi phân biệt cạnh tới và cạnh vòng
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
257
DFS: Các loại cạnh
Định lý: Nếu G là đồ thị vô hướng, thì DFS chỉ sản sinh ra cạnh của cây và cạnh ngược.
Chứng minh bằng phản chứng:
Giả sử có cạnh tới (forward edge)
Nhưng khi đó F phải là cạnh ngược (back edge)?!
sourc e
F?
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
258
DFS: Các loại cạnh
Giả sử có cạnh vòng (cross edge)
Khi đó C không thể là cạnh vòng bởi vì:
Nó phải được khảo sát từ một trong hai đỉnh đầu mút và trở thành cạnh của cây trước khi đỉnh kia được khảo sát
Do đó bức tranh bên là không đúngcả hai cạnh bên không thể là cạnh của cây
source
C?
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
259
DFS: Phân biệt các loại cạnh
Dễ dàng phân biệt các loại cạnh nhê ph©n tÝch mµu cña c¸c ®Ønh vµ/hoÆc xÐt c¸c gi¸ trÞ cña c¸c mèc thêi gian d vµ f .
Khi ta duyệt cạnh e =( u, v ) từ đỉnh u , căn cứ vào màu của v ta có thể biết cạnh này thuộc loại cạnh nào:
1. WHITE cho biết e là cạnh của cây
2. GRAY cho biết e là cạnh ngược
BLACK cho biết e là cạnh tới hoặc vòng
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
260
Phân tích DFS
(* Main Program*)
1. for u V do
2. color [ u ] white
3. [ u ] NIL
4. time 0
5. for u V do
6. if color [ u ] = white
7. then DFS-Visit( u )
Các biến time, color , là toàn cục .
DFS-Visit( u )
color [ u ] GRAY (* Thăm đỉnh u *)
time time + 1
d [ u ] time
for each v Adj [ u ] do
if color [ v ] = WHITE
then [ v ] u
DFS-Visit( v )
color [ u ] BLACK (* Đỉnh u đã duyệt xong *)
f [ u ] time time + 1
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
261
Phân tích DFS
Vòng lặp trên các dòng 1-2 và 5-7 đòi hỏi thời gian (| V| ) , chưa tính thời gian thực hiện lệnh DFS(v).
DFS(v) thực hiện đối với mỗi đỉnh trắng v V và ngay sau khi được thăm nó được tô màu xám. Các dòng 3-6 của DFS(v) sẽ thực hiện |Adj[ v ]| lần. Vậy thời gian tổng cộng của DFS(v) là v V |Adj[ v ]| = (| E| )
Do đó thời gian của DFS là (| V|+|E| ) .
Thuật toán trên đồ thị có đánh giá thời gian như trên gọi là thuật toán thời gian tuyến tính
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
262
CÁC ỨNG DỤNG CỦA DFS
Tính liên thông của đồ thị
Tìm đường đi từ s đến t
Phát hiện chu trình
Kiểm tra tính liên thông mạnh
Định hướng đồ thị
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
263
Bài toán về tính liên thông
Bài toán: Cho đồ thị vô hướng G = ( V,E ). Hỏi đồ thị gồm bao nhiêu thành phần liên thông, và từng thành phần liên thông gồm các đỉnh nào?
Giải: Sử dụng DFS (BFS) :
Mỗi lần gọi đến DFS (BFS) ở trong chương trình chính sẽ sinh ra một thành phần liên thông
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
264
DFS giải bài toán liên thông
(* Main Program*)
1. for u V do
2. id [ u ] 0
3. cnt 0 (* cnt – số lượng tplt *)
4. for u V do
5. if id [ u ] = 0
then cnt cnt +1
DFS-Visit( u )
DFS-Visit( u )
id [ u ] cnt
for each v Adj [ u ] do
if id [ v ] = 0
then DFS-Visit( v )
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
265
Tìm đường đi
Bài toán tìm đường đi
Input: Đồ thị G = ( V,E ) xác định bởi danh sách kề và hai đỉnh s, t .
Đầu ra: Đường đi từ đỉnh s đến đỉnh t , hoặc khẳng định không tồn tại đường đi từ s đến t .
Thuật toán: Thực hiện DFS(s) (hoặc BFS(s)).
Nếu [t] = NIL thì không có đường đi, trái lại ta có đường đi
t [t] [ [ t]] . . . s
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
266
DFS giải bài toán đường đi
(* Main Program*)
1. for u V do
2. color [ u ] white
3. [ u ] NIL
4. DFS-Visit( s )
DFS-Visit( u )
color [ u ] GRAY (* Thăm đỉnh u *)
for each v Adj [ u ] do
if color [ v ] = WHITE
then [ v ] u
DFS-Visit( v )
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
267
DFS và Chu trình
Bài toán: Cho đồ thị G =( V,E ). Hỏi G có chứa chu trình hay không?
Định lý: Đồ thị G là không chứa chu trình khi và chỉ khi trong quá trình thực hiện DFS ta không phát hiện ra cạnh ngược .
Chứng minh:
Nếu G không chứa chu trình thì rõ ràng không có cạnh ngược (bởi vì sự tồn tại cạnh ngược dẫn đến phát hiện chu trình)
Nếu không có cạnh ngược thì G là không chứa chu trình (acyclic). Thực vậy
Không có cạnh ngược tức là chỉ có cạnh của cây
Nếu chỉ có cạnh của cây thì G chỉ là cây hoặc rừng
Vậy G không chứa chu trinh
Như vậy DFS có thể áp dụng để giải bài toán đặt ra.
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
268
DFS và chu trình
(* Main Program*)
1. for u V do
2. color [ u ] white
3. [ u ] NIL
4. time 0
5. for u V do
6. if color [ u ] = white
7. then DFS-Visit( u )
DFS( u )
color [ u ] GRAY (* Thăm đỉnh u *)
time time + 1
d [ u ] time
for each v Adj [ u ] do
if color [ v ] = WHITE
then [ v ] u
DFS-Visit( v )
color [ u ] BLACK (* Đỉnh u đã duyệt xong *)
f [ u ] time time + 1
Cần phải điều chỉnh như thế nào để phát hiện chu trình?
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
269
DFS và chu trình
Câu hỏi: Thời gian tính là bao nhiêu?
Trả lời: Chính là thời gian thực hiện DFS : O (| V|+|E |).
Câu hỏi: Nếu G là đồ thị vô hướng thì có thể đánh giá thời gian tính sát hơn nữa được không?
Trả lời: Thuật toán có thời gian tính O (| V| ), bởi vì:
Trong một rừng (đồ thị không chứa chu trình) | E | | V | - 1
Vì vậy nếu đồ thị có | V | cạnh thì chắc chắn nó chứa chu trình, và thuật toán kết thúc.
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
270
Kiểm tra tính liên thông mạnh
Bài toán: Hỏi đồ thị có hướng G có là liên thông mạnh?
Mệnh đề: Đồ thị có hướng G= ( V,E ) là liên thông mạnh khi và chỉ khi luôn tìm được đường đi từ một đỉnh v đến tất cả các đỉnh còn lại và luôn tìm được đường đi từ tất cả các đỉnh thuộc V \ { v } đến v.
Chứng minh: Hiển nhiên
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
271
Thuật toán kiểm tra tính liên thông mạnh
Thuật toán.
Chän v V lµ mét ®Ønh tuú ý
Thùc hiÖn DFS( v ) trªn G . NÕu tån t¹i ®Ønh u kh«ng ®îc th¨m th× G kh«ng liªn th«ng m¹nh vµ thuËt to¸n kÕt thóc. Tr¸i l¹i thùc hiÖn tiÕp
Thùc hiÖn DFS( v ) trªn G T = ( V, E T ), víi E T thu ®îc tõ E bëi viÖc ®¶o ngîc híng c¸c cung. NÕu tån t¹i ®Ønh u kh«ng ®îc th¨m th× G kh«ng liªn th«ng m¹nh, nÕu tr¸i l¹i G lµ liªn th«ng m¹nh.
Thời gian tính: O (| V |+| E |)
c
a
d
e
b
f
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
272
Thuật toán kiểm tra tính liên thông mạnh
Đồ thị G Đồ thị G T
c
a
d
e
b
f
c
a
d
e
b
f
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
273
Định hướng đồ thị
Bµi to¸n: Cho ®å thÞ v« híng liªn th«ng G = ( V, E ). H·y t×m c¸ch ®Þnh híng c¸c c¹nh cña nã ®Ó thu ®îc ®å thÞ cã híng liªn th«ng m¹nh hoÆc tr¶ lêi G lµ kh«ng ®Þnh híng ®îc.
ThuËt to¸n ®Þnh híng : Trong qu¸ tr×nh thùc hiÖn DFS(G) ®Þnh híng c¸c c¹nh cña c©y DFS theo chiÒu tõ tæ tiªn ®Õn con ch¸u, c¸c c¹nh ngîc theo híng tõ con ch¸u ®Õn tæ tiªn. Ký hiÖu ®å thÞ thu ®îc lµ G ( )
Bæ ®Ò. G lµ ®Þnh híng ®îc khi vµ chØ khi G ( ) lµ liªn th«ng m¹nh.
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
274
Ví dụ: Định hướng đồ thị
Đồ thị G Đồ thị G ( )
c
a
d
e
b
f
c
a
d
e
b
f
a
Phần 2. LÝ THUYẾT ĐỒ THỊ
Nguyễn Đức Nghĩa- Bộ môn KHMT, ĐHBK Hà nội
275
Questions?
File đính kèm:
bai_giang_toan_roi_rac_phan_2_ly_thuyet_do_thi_chuong_1_cac.pptx

