(Tuần 5) Slides

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 43

LÝ THUYẾT ĐỒ THỊ

Chương 6. Cây
❑ Định nghĩa cây
❑ Cây khung đồ thị
❑ Cây khung nhỏ nhất
❑ Thuật toán Prim
❑ Thuật toán Kruskal
❑ Cây có gốc
Đặt vấn đề
❑ Hệ thống đường sắt
❑ Có thể đi bất kỳ
thành phố nào
❑ Chi phí thấp nhất
❑ Mạng máy tính
❑ Có thể kết nối 2 thiết
bị bất kỳ
❑ Dây cáp ít tốn nhất
1.1 Định nghĩa cây
❑ Cây (tree) là một đơn đồ thị vô hướng, liên thông và
không có chu trình sơ cấp
Ví dụ
❑ Xác định các đồ thị sau có phải cây không?
1.2 Rừng
❑ Rừng (forest) là đồ thị vô hướng, không liên thông và
không có chu trình. Rừng gồm nhiều cây
Ví dụ: rừng có 3 cây
1.3 Định lý về cây
❑ Cho T là đơn đồ thị vô hướng có 𝑛 ≥ 2 đỉnh. Các mệnh đề
sau là tương đương
1) T là một cây
2) T liên thông và có n−1 cạnh
3) T không chứa chu trình và có n−1 cạnh
4) T liên thông và mỗi cạnh là cầu
5) Giữa hai đỉnh phân biệt bất kỳ của T luôn có duy nhất
một đường đi đơn
6) T không chứa chu trình nhưng khi thêm một cạnh mới thì
có được một chu trình duy nhất
1) T là một cây
2) T liên thông và có n−1 cạnh
3) T không chứa chu trình và có
n−1 cạnh
4) T liên thông và mỗi cạnh là cầu
5) Giữa hai đỉnh phân biệt bất kỳ
của T luôn có duy nhất một đường
đi đơn
6) T không chứa chu trình nhưng
khi thêm một cạnh mới thì có được
một chu trình duy nhất
2. Cây khung của đồ thị
❑ Định nghĩa

❑ Xây dựng cây khung


❑ Bằng DFS
❑ Bằng BFS
2.1 Định nghĩa
❑ Cây khung/cây bao trùm (spanning tree): cây khung
của một đồ thị G là một đồ thị con của G, chứa tất cả
các đỉnh của G, liên thông và không có chu trình
❑ G = (V,E), cây T(V,F) với F ⊂ E được gọi là cây khung
2.2 Định lý Cayley
❑ Số cây khung của đồ thị Kn là nn-2
2.3 Xây dựng cây khung
❑ Xây dựng cây khung DFS

Input:
Đồ thị G lưu dưới dạng danh sác kề Mảng Ke[]
Output:
Cây khung T của đồ thị

Mảng ChuaXet[] dùng để đánh đấu các đỉnh đã được xét hay
chưa.
2.3.1 Xây dựng
theo chiều sâu
Ví dụ Input:

Output: (1,2), (2,4), (4,3), (3,5), (5,6), (4,7), (7,8), (8,9), (9,10)
Bài tập
❑ Xây dựng cây khung
đồ thị sau dùng thuật
toán dfs. Xuất phát từ
đỉnh 1
2.3.2 Xây dựng
theo chiều
rộng
Ví dụ

(1,2), (1,3), (2,4), (3,5), (3,6), (4,7), (4,8), (8,9), (8,10)


Bài tập
❑ Xây dựng cây khung cho đồ thị sau dùng DFS và BFS

dfs bắt đầu từ i, d, f


bfs bắt đầu từ d, f, g
Bài tập
❑ Xây dựng cây khung cho đồ thị sau dùng DFS và BFS

dfs bắt đầu từ h, bắt đầu từ g


bfs bắt đầu từ a, bắt đầu từ k
Bài tập
❑ Xây dựng cây khung cho các đồ thị sau dùng DFS và BFS
a b c a b c

d e f d e f

g h i g h i
dfs bắt đầu từ e,f dfs bắt đầu từ i, bắt đầu từ g
bfs bắt đầu từ e,f bfs bắt đầu từ i, bắt đầu từ g
3. Cây khung nhỏ nhất
❑ Định nghĩa: cây khung
nhỏ nhất MST (minimum
spanning tree) là cây
khung có tổng trọng số
của nó là nhỏ nhất

❑ Xây dựng MST


❑ Thuật toán Kruskal
❑ Thuật toán Prim
3.1 Thuật toán Kruskal
❑ Đồ thị G=(V, E), xây dựng tập cạnh F của T=(V, F)
theo từng bước:
1. Sắp xếp các cạnh của G theo thứ tự trọng số (độ dài)
tăng dần
2. Bắt đầu với F = Ø bổ sung dần các cạnh của G vào F
với điều kiện không tạo nên chu trình trong T
3. Thuật toán dừng lại khi có n-1 cạnh được chọn
෍ = 33
Ví dụ

෍ = 14

* Giả sử hai cạnh có trọng số bằng nhau, ưu tiên đi theo cạnh có tên đầu
mút nhỏ hơn hoặc đứng trước theo alphabet
3.2 Thuật toán Prim
❑ Cho đồ thị G=(V, E). Xây dựng tập đỉnh VT và tập cạnh F của cây
khung T=(VT, F) theo từng bước:

1. Bắt đầu với VT = s (đỉnh xuất phát bất kỳ) và T= ∅. Trong tất cả
các cạnh có 1 đỉnh ∉ VT và 1 đỉnh ∈ VT chọn cạnh có trọng số nhỏ
nhất.
2. Bổ sung cạnh đó vào F và đỉnh tương ứng vào VT
3. Thuật toán dừng lại khi có n-1 cạnh được chọn (hoặc VT = V)
Bài tập
❑ Xây dựng cây khung cho đồ thị sau dùng thuật toán
❑ Kruskal
❑ Prim, xuất phát từ f,c ; g,d
28
a b
10 16
14

f g c
24 18
25 12
e d
22
Bài tập
❑ Xây dựng cây khung cho đồ thị sau dùng thuật toán
❑ Kruskal
❑ Prim, xuất phát từ bất kỳ đỉnh nào
Bài tập
❑ Xây dựng cây khung cho đồ thị sau dùng thuật toán
❑ Kruskal
❑ Prim, xuất phát từ bất kỳ đỉnh nào
2 2
a b c
3 3 3
3 3
2 2
d e f
3 4 3
5 1

g h i
3 3
Bài tập
❑ Dùng Kruskal
❑ Dùng Prim
❑ Xuất phát từ đỉnh 8
❑ Xuất phát từ đỉnh 4
Bài tập
❑ Dùng Kruskal 40
b g
❑ Dùng Prim 30 6 35
8
❑ Xuất phát từ đỉnh a
a 19 d 11 z
❑ Xuất phát từ đỉnh z 12 23
50 20
c f
10
Bài tập
❑ Dùng Kruskal b
5
d
5
f
❑ Dùng Prim 4
3
7
❑ Xuất phát từ đỉnh a a 2 1 2 z
❑ Xuất phát từ đỉnh z 4
3
c e 5 g
6
4. Cây có gốc
4.1 Các khái niệm
❑ T là một cây có gốc
❑ x, y, z là các đỉnh trong T
❑ v0, v1, …, vn là một đường đi
đơn trong T
❑ Vn-1 là cha (parent ) của vn
❑ v0 ,v1 ,…,vn-1 là các tiền bối
(ancestor) của v n
❑ vn là con (child) của vn-1
❑ Nếu x là tiền bối của y thì y là
hậu duệ (descendant ) của x
❑ Nếu y, z là con của x thì y và z
là anh em (siblings)
Ví dụ
❑ Cha của c là b
❑ Con của g là h, i, j
❑ Các tiền bối của e là c, b, a
❑ Các hậu duệ của b là c, d, e
❑ Anh em: d, e
4.1 Các khái niệm
❑ Nếu x không có con thì x là lá
(leaf)
❑ Nếu x không là lá thì x là đỉnh
trong (branch vertex)
❑ Mức (level) của đỉnh x
❑ Chiều cao (height)
❑ Cây con (subtree) của T gốc
tại x là đồ thị con của T mà
❑ Tập đỉnh gồm x và tất cả các
hậu duệ của x
❑ Tập các cành gồm mọi cành
nối tới các hậu duệ của x
❑ Các đỉnh trong: : a, b, c, g, h, j, k
❑ Các lá : d, e, f, l, m, i, o
❑ Mức của c là 2, của k là 3
❑ Chiều cao của cây là 4
❑ Cây con gốc g
4.2 Các phương pháp duyệt cây
❑ Thuật toán viếng thăm mọi đỉnh của một cây có gốc
có thứ tự đúng 1 lần một cách có hệ thống gọi là
thuật toán duyệt cây

❑ Có 3 thuật toán phổ thông:


❑ Duyệt tiền tự (Preorder traversal) NLR
❑ Duyệt trung tự (Inorder traversal) LNR
❑ Duyệt hậu tự (Postorder traversal) LRN
Ví dụ

❑ Duyệt tiền tự: a, b, c, d, e, f, g, h, o, k, l, m, n, p, q, s, t


❑ Duyệt trung tự: d, c, e, b, a, g, f, h, m, l, n, k, o, p, s, q, t
❑ Duyệt hậu tự: d, e, c, b, g, h, f, m, n, l, k, p, s, t, q, o, a
Bài tập
❑ Duyệt trung tự:
j,e,
n,k,o,p,
b,f,
a,
c,
l,g,m,
d,
h,i
Bài tập
❑ Duyệt hậu tự:
j,
n,o,p,k,
e,
f,b,
c,
l,m,g,
h,i,
d,
a

You might also like