Tải bản đầy đủ (.ppt) (15 trang)

Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN CÂY KHUNG NHỎ NHẤT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (303.88 KB, 15 trang )

CÂY KHUNG NHỎ NHẤT
Nội dung trình bày

Định nghĩa cây khung

Phát biểu bài toán

Xây dựng bài toán

Thuật toán Kruskal

Thuật toán Prim

Cài đặt chương trình
Định nghĩa cây khung

Trong đồ thị liên thông G, nếu ta loại bỏ cạnh
nằm trên chu trình nào đó thì ta sẽ được đồ thị vẫn
là liên thông. Nếu cứ loại bỏ các cạnh ở các chu
trình khác cho đến khi nào đồ thị không còn chu
trình (vẫn liên thông) thì ta thu được một cây nối
các đỉnh của G. Cây đó gọi là cây khung hay cây
bao trùm của đồ thị G.
Ví dụ:
b
f
c
d
h g
ia e
8 7


9
10
1 2
4
14
2
4
7 6
11
8
Phát biểu bài toán

Bài toán:
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à m(i,j) (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í là nhỏ
nhất. Bài toán tìm cây khung nhỏ nhất.
Xây dựng bài toán

Ta có thể mô hình hoá bài toán bằng một đồ thị
liên thông vô hướng G=(V,E) trong đó:

V là tập các đỉnh ứng với các máy tính

E là tập các cạnh ứng với các dây nối giữa các
máy tính, và mỗi cạnh (u,v) E∈ , trọng số w(u,v)
thể hiện chi phí (độ dài cần thiết) để nối u và v.


Vấn đề đặt ra: tìm được một tập cạnh T E ⊆ bao
gồm các cạnh không tạo thành chu trình sao cho
tổng trọng số w(T)= ∑
(u, v) ∈ T
w(u, v) là nhỏ nhất.

Tập T là một cây và được gọi là cây khung nhỏ
nhất => Bài toán tìm cây khung nhỏ nhất : Tìm T
Thuật toán Kruskal

Ý tưởng thuật toán

Thủ tục MST-KRUSKAL(G,w)

Ví dụ minh hoạ

Thời gian thực hiện thuật toán

Cài đặt thuật toán
Ý tưởng thuật toán

G=(V,E) đồ thị liên thông vô hướng

W là hàm trọng số trên E.

Bắt đầu từ đồ thị rỗng T

Sắp xếp các cạnh của G theo thứ tự không giảm
của trọng số.


Bắt đầu từ cạnh đầu tiên của dãy này, ta cứ thêm
dần các cạnh của dãy đã được xếp vào T theo
nguyên tắc cạnh thêm vào không được tạo thành
chu trình trong T

Lặp lại Bước 3 cho đến khi nào số cạnh trong T
bằng n−1, ta thu được cây khung nhỏ nhất cần
tìm.
Vấn đề cài đặt thuật toán

Câu hỏi đặt ra: Làm thế nào để kiểm tra một
cạnh thêm vào không tạo thành chu trình?

Giải quyết: Biểu diễn các tập rời nhau bằng rừng
(disjoint-set forest)

Ban đầu khởi tạo rừng T gồm n cây, mỗi cây tương
ứng với mỗi đỉnh của đồ thị bằng thủ tục MAKE-SET

Khi thêm một cạnh (u,v) vào T không tạo thành chu
trình thì cạnh đó phải nối hai cây khác nhau của rừng:
Kiểm tra FINDSET(u) <> FINDSET(v)?

Hợp hai cây thành một cây bằng thủ tục UNION(u,v)
Thủ tục MST-KRUSKAL(G,w)

A ∅

for each vertex v∈V[G]


do MAKE-SET(v)

sort the edges of E into nondecreasing order by
weight w

for each edge(u,v) ∈ E, taken in nondecreasing
order by weight

do if FIND-SET(u) ≠ FIND-SET(v)

then A  A ∪{(u,v)}

UNION(u,v)
Ví dụ minh hoạ
8 7
b
f
c
d
h g
ia e
9
10
1 2
4
14
2
4
7 6

11
8
Tìm cây khung nhỏ nhất của đồ thị trên
11
Thực hiện giải thuật Kruskal
b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(a)
b
f
c
d
h g
ia e
8 7

9
10
1 2
4
14
2
4
7 6
11
8
(b)
1 2 2 4 4 6 7 7 8 8 9 10 11 14
Thực hiện giải thuật Kruskal
b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8

(c)
b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(d)
b
f
c
d
h g
ia e
8 7
9
10
1 2
4

14
2
4
7 6
11
8
(e)
b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(f)
Thực hiện giải thuật Kruskal
b
f
c
d

h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(g)
b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11

8
(h)
8 7 8 7
b
f
c
d
h g
ia e
9
10
1 2
4
14
2
4
7 6
11
8
(i)
b
f
c
d
h g
ia e
9
10
1 2
4

14
2
4
7 6
11
8
(j)
Thực hiện giải thuật Kruskal
b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(k)
b
f
c
d

h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(l)
b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11

8
(m) b
f
c
d
h g
ia e
8 7
9
10
1 2
4
14
2
4
7 6
11
8
(n)
Thời gian thực hiện thuật toán

Nhận xét:

Giải thuật gọi lần |V| thao tác MAKE-SET

Gọi O(E) lần thao tác FINDSET và UNION

G liên thông nên |E| ≥ |V| - 1.

Thời gian thực hiện của MST-KRUSKAL


Gọi |V| thao tác MAKE-SET

Sắp xếp ở dòng 4 : 0(ElgE)

Dòng 5-8: O(E)
=> Thời gian thực hiện của MST-KRUSKAL: O(ElgE)

×