You are on page 1of 27

Trường Đại học Công nghệ Thông tin, ĐHQG HCM

Môn học LÝ THUYẾT ĐỒ THỊ

CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT

NỘI DUNG • • • • Giới thiệu về cây. Cây bao trùm (cây khung). Cây bao trùm (cây khung) nhỏ nhất. Các giải thuật tìm cây bao trùm (cây khung) nhỏ nhất : - Giải thuật Prim. - Giải thuật Kruskal. • Các bài toán ứng dụng.

GIỚI THIỆU CÂY
• Định nghĩa: Cây còn gọi là cây tự do (free tree) là một đồ thị liên thông không có chu trình.

Ví dụ 3 cây T1, T2, T3

GIỚI THIỆU CÂY
Định nghĩa: Xét một cây có gốc T. • Mức (level) của một đỉnh v trong T là khoảng cách từ gốc đến v. • Mức lớn nhất của một đỉnh bất kỳ trong cây gọi là chiều cao của cây. • Nếu xy là cạnh của T thì ta gọi x là cha (parent) của y và y là con (child) của x. Hai đỉnh cùng cha gọi là anh em của nhau. Nếu có một đường (có hướng) đi từ bv đến w thì gọi là đỉnh trước của w, w gọi là đỉnh sau của v.

GIỚI THIỆU CÂY
Định nghĩa: Xét một cây có gốc T (tiếp theo) • Những đỉnh không có con gọi là lá (leaves), những đỉnh không là lá được gọi là đỉnh trong. • Một tập hợp gồm nhiều cây đôi một không có đỉnh chung gọi là rừng. • Mỗi đỉnh x của cây T là gốc một cây con của T gồm x và các đỉnh sau của nó. Như vậy, nếu hủy gốc khỏi cây T ta sẽ được một rừng.

GIỚI THIỆU CÂY

GIỚI THIỆU CÂY
• Định lý: Cho T là một cây thì giữa hai đỉnh bất kỳ của T luôn luôn tồn tại một và chỉ một đường trong T nối chúng. • Chứng minh: • Gọi x,y là 2 đỉnh trong cây T. Vì T liên thông nên ít nhất một đường trong cây T nối x và y. Giả sử có hai đường khác nhau cùng nối x và y: • P1=A0A1…An ; P2= B0B1…Bn trong đó A0=B0 =x và An=Bn=y.

GIỚI THIỆU CÂY
• Chứng minh: (tt) • Gọi i là chỉ số nhỏ nhất sao cho A1A(i+1) khác BiB(i+1). • Gọi j là chỉ số nhỏ nhất >=i sao cho có k>i để Bk= Aj. • Dễ thấy I, j, k tồn tại và AiAi+1…AjB(k-1)Bi là chu trình trong T, điều này là vô lý.

GIỚI THIỆU CÂY
• Định lý : Nếu cây có n đỉnh thì cây có n-1 cạnh. • Chứng minh: • Ta có thể giả sử là cây có gốc. Mỗi đỉnh khác gốc đều có bậc trong bằng 1, còn gốc có bậc trong bằng 0. Mà ta có tất cả n-1 đỉnh khác gốc, vậy có n-1 cạnh.

GIỚI THIỆU CÂY
Định lý (Daisy Chain Theorem) : Giả sử T là một đồ thị có n đỉnh thì 6 mệnh đề sau đây tương đương : • (1) : T là một cây. • (2) : T không có chu trình và có n-1 cạnh. • (3) T liên thông và nếu hủy bất kỳ một cạnh nào của nó cũng làm mất tính liên thông. • (4) Giữa 2 đỉnh bất kỳ của T luôn luôn tồn tại một đường duy nhất nối chúng. • (5) T không có chu trình và nếu thêm một cạnh mới nối 2 đỉnh bất kỳ của T thì sẽ tạo ra một chu trình. • (6) T liên thông và có n-1 cạnh.

CÂY m-Phân
Định nghĩa: Cho một cây có gốc T. • Nếu số con tối đa của một đỉnh trong T là m và có ít nhất một đỉnh có đúng m con thì T gọi là một cây m –phân. • Nếu mọi đỉnh trong của T đều có đúng m con thì T gọi là một cây m-phân đầy đủ.

Cây nhị phân

CÂY BAO TRÙM (CÂY KHUNG)
Định nghĩa: Cho một đồ thị vô hướng G. Một cây T được gọi là cây bao trùm (cây khung – spanning tree) của G nếu T là một đồ thị con chứa mọi đỉnh của G.

Ví dụ cây bao trùm (cây khung) của đồ thị

CÂY BAO TRÙM (CÂY KHUNG)
Định lý: Đồ thị G có cây bao trùm (cây khung) nếu và chỉ nếu đồ thị G liên thông. Chứng minh: Sách Lý thuyết đồ thị - Nguyễn Cam, Chu Đức Khánh trang 87.

CÂY BAO TRÙM (CÂY KHUNG)
Định lý: Cho một cây bao trùm T của một đồ thị G. - Thêm vào T một cạnh của G (không thuộc T), ta được một chu trình trong T. - Hủy một cạnh bất kỳ trên chu trình này khỏi T, ta nhận được một cây bao trùm mới của G Chứng minh: Hiển nhiên.

CÂY BAO TRÙM (CÂY KHUNG)
Tìm cây bao trùm (cây khung) của một đồ thị: - Dùng giải thuật duyệt đồ thị theo chiều sâu ( DFS - Depth First Search). - Cây bao trùm (cây khung) nhận được bằng phương pháp này gọi là cây bao trùm (cây khung) theo bề sâu ( Depth First Spanning Tree).

CÂY BAO TRÙM (CÂY KHUNG)
Tìm cây bao trùm (cây khung) của một đồ thị: - Dùng giải thuật duyệt đồ thị theo chiều rộng ( BFS Breadth First Search). - Cây bao trùm (cây khung) nhận được bằng phương pháp này gọi là cây bao trùm (cây khung) theo bề rộng (Breadth First Spanning Tree).

- Xem lại giải thuật DFS, BFS trong bài giảng 1.

CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Định nghĩa 1: Cho một đồ thị G. Giả sử mỗi cạnh của G được gán với một con số gọi là trọng số (weight) của cạnh ấy, khi đó đồ thị G được gọi là một đồ thị có trọng số (weighted graph).

CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Định nghĩa 2: Tổng trọng số tất cả các cạnh của một đường đi (chu trình, đồ thị con) gọi là trọng số của đường đi (chu trình, đồ thị con) ấy.

Đường đi từ đỉnh 1 đến 2 theo các cạnh : 13, 32 có trọng số 17 + 18 = 35.

CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Bài toán cây bao trùm (cây khung) có trọng số nhỏ nhất (minimal spanning tree : MST) là tìm cây bao trùm có trọng số nhỏ nhất của một đồ thị có trọng số liên thông.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 1: Giải thuật Prim Cho G là một đồ thị có trọng số liên thông. Giải thuật Prim xây dựng đồ thị con T của G, như sau: - B1: Chọn tùy ý một đỉnh của G đặt vào T. - B2: Nếu mọi đỉnh của G đều đã nằm trong T thì dừng. - B3: Nếu không, tìm một cạnh có trọng số nhỏ nhất nối một đỉnh trong T với một đỉnh ngoài T. Thêm cạnh này vào T. Quay lại bước 2.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 1: Giải thuật Prim (tt) - Chứng minh tính đúng đắn giải thuật Prim: Sách Lý thuyết đồ thị - Nguyễn Cam, Chu Đức Khánh trang 96,97. - Mã giả giải thuật và ví dụ: Sách Lý thuyết đồ thị Nguyễn Thanh Hùng chương 5.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 2: Giải thuật Kruskal Cho G=(V,E) là một đồ thị có trọng số liên thông. Giải thuật Kruskal xây dựng đồ thị con T của G, như sau: - B1: T = (V, Rỗng) - B2: Nếu T liên thông thì dừng. - B3: Nếu không, chọn một cạnh có trọng số nhỏ nhất không có trong T sao cho khi thêm cạnh này vào T thì không tạo ra chu trình. Đặt cạnh này vào T. Quay lại bước 2.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 2: Giải thuật Kruskal (tt) - Chứng minh tính đúng đắn giải thuật Prim: Sách Lý thuyết đồ thị - Nguyễn Cam, Chu Đức Khánh trang 98,99. - Mã giả giải thuật và ví dụ: Sách Lý thuyết đồ thị Nguyễn Thanh Hùng chương 5.

ỨNG DỤNG CỦA BÀI TÓAN CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Bài toán xây dựng hệ thống đường sắt : - Giả sử ta muốn xây dựng một hệ thống đường sắt nối n thành phố sao cho hành khách có thể đi từ bất kỳ một thành phố nào đến bất kỳ một trong các thành phố còn lại. - Mặt khác trên quan điểm kinh tế đòi hỏi là chi phí xây dựng hệ thống đường phải nhỏ nhất. - Rõ ràng đồ thị mà đỉnh là các thành phố còn các cạnh là các tuyến đường sắt nối các thành phố tương ứng với phương án xây dựng tối ưu phải là cây. - Vì vây, bài toán đặt ra dẫn về bài toán tìm cây khung nhỏ nhất trên đồ thị đầy đủ n đỉnh, mỗi đỉnh tương ứng với một thành phố, với độ dài trên các các cạnh chính là chi phí xây dựng đường ray nối hai thành phố tương ứng.

ỨNG DỤNG CỦA BÀI TÓAN CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Bài toán nối mạng máy tính: - Cần nối mạng một hệ thống gồm n máy tính đánh số từ 1 đến n. Biết chi phí nối máy i với máy j là c[i,j], i,j = 1, 2, . . . ,n ( thông thường chi phí này phụ thuộc vào độ dài cáp nối cần sử dụng). - Hãy tìm cách nối mạng sao cho tổng chi phí nối mạng là nhỏ nhất.

ỨNG DỤNG CỦA BÀI TÓAN CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Bài toán xây dựng đường ống nước: - Có một trạm cấp nước và N điểm dân cư. - Hãy xây dựng chương trình thiết kế tuyến đường ống nước cung cấp đến mọi nhà sao cho tổng chiều dài đường ống phải dùng là ít nhất. - Giả sử rằng các đường ống chỉ được nối giữa 2 điểm dân cư hoặc giữa trạm cấp nước với điểm dân cư.