1. Trang chủ
  2. » Giáo án - Bài giảng

BÀI TOÁN CÂY KHUNG NHỎ NHẤT

25 814 18

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 624,04 KB

Nội dung

2.2 Bài toán tìm cây khung ngắn nhất 2.3 Thuật toán Kruskal 2.4 Thuật toán Prim GIỚI THIỆU VỀ CÂY VÀ CÂY KHUNG... Cây khung đồ thịCách tạo cây khung của đồ thị: - Thực hiện loại bỏ một

Trang 1

BÀI TOÁN CÂY KHUNG NHỎ NHẤT

Danh sách nhóm: -Hà Xuân Tùng

-Lê Thị Quỳnh Nga -Vi Đình Diệm

-Hà Thị Thu Trang

ĐỀ TÀI NHÓM 7

Trang 2

2.2 Bài toán tìm cây khung ngắn nhất

2.3 Thuật toán Kruskal

2.4 Thuật toán Prim

GIỚI THIỆU VỀ CÂY VÀ CÂY KHUNG

Trang 3

- Cây là một dạng của đồ thị được nhà toán học Anh, Arthur Cayley, phát biểu và sử dụng từ năm 1857 cho việc xác định những cấu trúc hợp chất hóa học.

1 Cây và các tính chất cơ bản

Arthur Cayley

(1821-1895)

isobutan

Trang 4

1 Cây và các tính chất cơ bản

Định nghĩa Cây:

Cho G=(V,E) là đồ thị vô hướng G được gọi là một Cây (tree)

nếu và nếu G liên thông và không có chu trình đơn

Trang 6

2- T không có chu trình đơn và có n-1 cạnh

3- Giữa hai đỉnh bất kỳ có đúng một đường đi đơn.

4- T liên thông và mỗi cạnh là một cầu.

Trang 7

2 Cây khung đồ thị

Cách tạo cây khung của đồ thị:

- Thực hiện loại bỏ một cạnh nằm trên một chu trình nào

đó sẽ tạo ra đồ thị G' vẫn có tính liên thông

- Thực hiện tiếp việc loại bỏ các cạnh ở các chu trình khác cho đến khi đồ thị T không còn chu trình nhưng vẫn liên thông

=> Chúng ta thu được một cây nối tất cả các đỉnh của G - gọi là cây khung của đồ thị

Định nghĩa: Cho G là đồ thị vô hướng liên thông Ta gọi đồ thị con T của G là một cây khung nếu T thỏa mãn hai điều kiện:

-T là một cây;

- Tập đỉnh của T bằng tập đỉnh của

Trang 8

F A

C

H

B

G D

E

F A

C

H

Trang 9

Bài toán tìm cây khung nhỏ nhất:

Cho G=(V,E) là đồ thị vô hướng, liên thông có trọng số

Giả sử H=(V,T) là một cây khung của đồ thị G

Độ dài c(H) của cây khung H là tổng trọng số các cạnh của cây:

Bài toán:

Trong số tất cả các cây khung của đồ thị G, hãy tìm ra cây khung

có độ dài nhỏ nhất

Trang 10

Các bài toán thực tế:

1- Bài toán nối mạng máy tính:

Với mạng máy tính gồm n máy Biết chi phí nối máy i với máy j là m(i,j) (chi phí 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

2- Bài toán xây dựng hệ thống đường sắt:

Chúng ta muốn xây dựng một hệ thống đường sắt nối n

thành phố để hành khách từ một thành phố có thể đi đến bất

kỳ các thành phố còn lại Yêu cầu thiết kế để chi phí xây

dựng hệ thống đường đi là nhỏ nhất

Trang 11

1 Thuật toán Kruskal (năm 1956)

- Đồ thị G=(V,E), liên thông, có trọng số

- Cây khung H=(V,T), với T  E

Thuật toán Kruscal tìm cây khung ngắn nhất

B0: T = ø;

B1: Sắp xếp các cạnh của G theo thứ tự tăng dần của trọng số

B2: Xuất phát từ tập cạnh T = ø;

Lần lượt duyệt trong danh sách các cạnh đã được sắp xếp từ nhỏ đến lớn

để tìm ra cạnh bổ sung nó vào T mà không tạo thành chu trình

Until |T|=n-1 thì kết thúc

Trang 12

Giả mã thuật toán Kruskal

Void Kruskal ( void )

if (|T| < n-1)

Đồ thị không liên thông;

}

  

Trang 13

2.4 Thuật toán Kruskal

Trang 14

Thêm vào cạnh (v3, v5) vào T; |T|=1

Xét lực lượng của T, |T|<5, nên tiếp tục quá trình xét nạp:

- nạp cạnh (v4, v6) vào T; |T|=2

- nạp cạnh (v4, v5) vào T; |T|=3

- không nạp cạnh (v5, v6) vào T vì tạo chu trình.

- không nạp cạnh (v3, v4) vào T vì tạo chu trình.

- nạp cạnh (v1, v3) vào T; |T|=4

- nạp cạnh (v2, v3) vào T; |T|=5

Kết thúc vì |T|=5

Trang 15

Thuật toán Kruskal

Ví dụ:

Tìm cây khung ng n nh t c a đ th G trong hình dắn nhất của đồ thị G trong hình dưới ất của đồ thị G trong hình dưới ủa đồ thị G trong hình dưới ồ thị G trong hình dưới ị G trong hình dưới ướii

Trang 16

-Dùng để tìm cây bao trùm nhỏ nhất của đồ thị vô hướng có trọng số liên thông.

-Được tìm ra bởi Vojtěch Jarník (Cộng hòa Séc) vào năm

1930, sau đó được phát triển bởi Robert.C.Prim vào năm 1957.

-Còn được gọi là thuật toán DJP, thuật toán Jarník, hay thuật toán Prim–Jarník.

Thuật toán Prim (năm 1957)

Trang 17

Ý tưởng thuật toán:

 Bắt đầu tại một đỉnh tùy ý s của đồ thị, nối s với đỉnh y sao cho trọng số cạnh

Trang 18

Giải mã thuật toán Prim

void Prim()

{ Chọn s là một đỉnh nào đó của đồ thị;

VH = [s]; T = 0; D[s] = 0; near[s] = s; for (v thuộc V\VH )

Trang 19

while (not stop)

{ tìm u thuộc V\VH thỏa mãn: d[u] = min {d[v]: u thuộc V\VH};

VH = VH hợp [u];

T = T hợp {(u, near[u])};

if (|VH| = n) { H = (VH, T) là cây khung nhỏ nhất của đồ thị;

Stop = true;}

else for (v thuộc V\VH )

Trang 20

8

8

Trang 21

 Lấy D,C,A là đỉnh xét tiếp theo

 Xét [D,B] = 8 ,[C,B] = 7, [A,B] = 9 => chọn đỉnh B (nạp [C,B] = 5)

 Số cạnh lúc này là 3 = 4-1 Kết thúc thuật toán

Trang 22

Ví dụ 2:

Tìm cây khung ngắn nhất của đồ thị G trong hình dưới thị G trong hình dướii.

Trang 23

Lời giải:

8

7

64

Trang 24

Lấy đỉnh a làm đỉnh xuất phát.

Ngày đăng: 18/05/2020, 08:44

TỪ KHÓA LIÊN QUAN

w