1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế

80 568 1
Tài liệu đã được kiểm tra trùng lặp

Đ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 80
Dung lượng 1,48 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LỜI CAM ĐOAN Em xin cam đoan: Luận v n th c s Khoa học máy tính “ Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế” này là công trình nghiên cứu thự

Trang 1

ĐẠI HỌC THÁI NGUYÊN

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

Trang 2

ĐẠI HỌC THÁI NGUYÊN

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Trương Hà Hải

Thái Nguyên - 2015

Trang 3

LỜI CAM ĐOAN

Em xin cam đoan: Luận v n th c s Khoa học máy tính “ Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế” này

là công trình nghiên cứu thực sự của cá nhân em, được thực hiện trên cơ sở nghiên cứu lý thuyết và dưới sự hướng dẫn khoa học của Tiến s Trương Hà

Hải, Trường Đ i học Công nghệ Thông tin và Truyền thông

Em xin chịu trách nhiệm về lời cam đoan này

Thái Nguyên, ngày tháng n m 2015

Tác giả

Vũ Minh Tiệp

Trang 4

LỜI CẢM ƠN

Để hoàn thành luận v n, em xin chân thành cảm ơn Trường Đ i học Công nghệ Thông tin và Truyền thông, Phòng Đào t o, các thầy, cô giáo giảng d y lớp cao học Khoa học máy tính K12E đã quan tâm, t o điều kiện thuận lợi, tận tình giảng d y và giúp đỡ em trong thời gian theo học t i trường

Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc đến TS Trương Hà Hải,

người đã dành nhiều thời gian, tâm huyết hướng dẫn em trong suốt quá trình nghiên cứu và hoàn thành luận v n

Em cũng xin cảm ơn các cán bộ, giảng viên đồng nghiệp ở Trường Trung Cấp Kỹ Thuật V nh Phúc đã t o điều kiện về thời gian để em có thể học tập và hoàn thành luận v n

Mặc d đã cố gắng hết sức hoàn thiện luận v n, tuy nhiên chắc chắn vẫn còn nhiều thiếu s t, rất mong sự g p qu báu của quý thầy cô và các b n

Xin trân trọng cảm ơn

u n n t n n m 5

Tác giả

Vũ Minh Tiệp

Trang 5

MỤC LỤC

Đặt vấn đề 1

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT VỀ ĐỒ THỊ VÀ ĐỘ PHỨC TẠP THUẬT TOÁN 4

1.1 CÁC KHÁI NIỆM CƠ BẢN 4

1.1.1 Khái niệm đồ thị 4

1.1.2 Các lo i đồ thị 5

1.1.3 Biểu diễn đồ thị 11

1.2 ĐỘ PHỨC TẠP TÍNH TOÁN VÀ TÍNH HIỆU QUẢ CỦA THUẬT TOÁN 16

1.2.1 Định ngh a thuật toán 16

1.2.2 Phân tích độ phức t p của thuật toán 17

1.2.3 Tối ưu thuật toán 18

1.3 MỘT SỐ THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ 19

1.3.1 Thuật toán tìm kiếm theo chiều sâu (DEPTH FIRST SEARCH) 19

1.3.2 Thuật toán tìm kiếm theo chiều rộng (BREADTH FIRST SEARCH) 21

CHƯƠNG 2 BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ VÀ CÁC THUẬT TOÁN 24

2.1 ĐỒ THỊ HAI PHÍA 24

2.1.1 Định ngh a 24

2.1.2 Các bài toán trên đồ thị hai phía 26

2.2 BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA 26

2.2.1 Bài toán ghép đôi không trọng và các khái niệm 26

2.2.2 Thuật toán đường mở 28

2.2.3 Độ phức t p của thuật toán 29

2.3 BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI VỚI TỔNG TRỌNG SỐ CỰC ĐẠI HOẶC CỰC TIỂU TRÊN ĐỒ THỊ HAI PHÍA 29

2.3.1 Bài toán phân công 29

2.3.2 Thuật toán tìm cặp ghép với tổng trọng số trên các c nh là lớn nhất hoặc nhỏ nhất 30

2.3.3 Thuật toán Hung-ga-ri 33

Trang 6

2.3.4 Phương pháp đối ngẫu Kuhn-Munkres 37

2.3.5 Đánh giá độ phức t p và cải tiến thuật toán 39

2.4 BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ TỔNG QUÁT 42

2.4.1 Các khái niệm 42

2.4.2 Thuật toán Edmonds (1965) 44

2.4.3 Thuật toán Lawler (1973) 46

CHƯƠNG 3 MỘT SỐ BÀI TOÁN ỨNG DỤNG TRONG THỰC TẾ 50

3.1 BÀI TOÁN ĐIỀU HÀNH TAXI 50

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

3.1.2 Phân tích bài toán và xây dựng thuật toán 50

3.2 BÀI TOÁN XẾP LỚP HỌC THEO TÍN CHỈ 60

3.2.1 Mô hình đào t o theo học chế tín chỉ 60

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

3.2.3 Phân tích bài toán và xây dựng thuật toán 62

TÀI LIỆU THAM KHẢO 73

Trang 7

DANH MỤC C C H NH V

Hình 1: Ví dụ về mô hình đồ thị 4

Hình 2: Đơn đồ thị vô hướng và không phải đơn đồ thị vô hướng 5

Hình 3: Đa đồ thị vô hướng 6

Hình 4: Đơn đồ thị c hướng và không phải đơn đồ thị c hướng 7

Hình 5: Đa đồ thị c hướng 8

Hình 6: Đơn đồ thị vô hướng 9

Hình 7: Đồ thị c hướng 10

Hình 8: Ví dụ biểu diễn đồ thị danh sách c nh 12

Hình 9: Ví dụ biểu diễn đồ thị danh sách liền kề 13

Hình 10: Ví dụ biểu diễn đồ thị ma trận kề 14

Hình 11: Ví dụ biểu diễn đồ thị ma trận liên thuộc 16

Hình 12: Quá trình tìm kiếm theo chiều sâu 20

Hình 13: Cây BFS 21

Hình 14: Quá trình tìm kiếm theo chiều rộng 23

Hình 15: Ví dụ về đồ thị hai phía và không phải là đồ thị hai phía 24

Hình 16: Đồ thị hai phía 28

Hình 17: Ví dụ bài toán tìm bộ ghép cực đ i trên đồ thị 43

Hình 18: Phép chập Blossom 45

Hình 19: Nở Blossom để dò đường xuyên qua Blossom 46

Trang 8

Đặt vấn đề

Ngày nay việc giải quyết các bài toán lớn cho hệ thống đòi hỏi sự hợp tác chặt chẽ giữa các chuyên gia trong các l nh vực chuyên môn, như các chuyên gia Toán, Toán ứng dụng và các chuyên gia Tin học, kỹ sư lập trình Việc thiết lập được một mô hình hợp lý, phản ánh được bản chất của bài toán thực tế đồng thời khả thi về phương diện tính toán luôn là điều đáng được quan tâm

Đặc biệt trong các chuyên ngành liên quan thì toán học là chuyên ngành rất được quan tâm, một trong số đ là L thuyết đồ thị Đồ thị biểu diễn được rất nhiều cấu trúc, nhiều bài toán thực tế có thể được biểu diễn bằng đồ thị Ví dụ, cấu trúc liên kết của một website có thể được biểu diễn bằng một

đồ thị c hướng như sau: các đỉnh là các trang web hiện có t i website, tồn t i một c nh c hướng nối từ trang A tới trang B khi và chỉ khi A có chứa 1 liên kết tới B Do vậy, sự phát triển của các thuật toán xử l đồ thị là một trong các mối quan tâm chính của khoa học máy tính

Mặc dù Lý thuyết đồ thị đã được khoa học phát triển từ rất lâu nhưng l i

có nhiều ứng dụng hiện đ i, đặc biệt là các thuật toán trên đồ thị đã có nhiều ứng dụng trong nhiều l nh vực khác nhau như: M ng máy tính, Lý thuyết mã, Tối ưu hoá, Kinh tế học .Những tưởng cơ bản của lý thuyết đồ thị được nhà toán học Thụy s Leonhard Euler đưa ra từ thế kỷ 18 Ông đã d ng l thuyết đồ thị để giải quyết bài toán cầu Konigsberg nổi tiếng

Đồ thị cũng được d ng để giải nhiều bài toán thuộc những l nh vực rất khác nhau như: người ta có thể dùng đồ thị để biểu diễn sự c nh tranh của các loài trong môi trường sinh thái, dùng đồ thị biểu diễn ai có ảnh hưởng đến ai trong một tổ chức nào đ và cũng c thể dùng đồ thị để giải các bài toán như bài toán tính số các tổ hợp khác nhau của các chuyến xe giữa hai thành phố trong một m ng giao thông, bài toán đi tham quan tất cả các phố của một

Trang 9

thành phố sao cho mỗi phố đi qua đúng một lần, hay bài toán tìm số màu cần thiết để tô các vùng khác nhau của một bản đồ, Đồ thị với các trọng số được gán cho các c nh của nó có thể d ng để giải các bài toán như bài toán tìm đường đi ngắn nhất giữa hai thành phố trong một m ng giao thông, bài toán phân công lao động sao cho tổng lợi nhuận thu được là lớn nhất Đặc biệt, nhiều bài toán trong thực tế sử dụng mô hình đồ thị và các thuật toán trên đồ thị được giải quyết rất hiệu quả như: bài toán điều hành taxi, bài toán xếp lớp học theo tín chỉ có thể đưa về mô hình bài toán tìm bộ ghép cực đ i trên đồ thị

và sử dụng các thuật toán tương ứng

Chính vì đồ thị có thể được sử dụng để giải quyết nhiều bài toán thuộc nhiều l nh vực khác nhau một cách dễ dàng và phổ biến như vậy nên đồ thị giữ một vai trò hết sức quan trọng trong cuộc sống, đặc biệt là trong l nh vực công nghệ thông tin, dựa vào đồ thị và các thuật toán trên đồ thị người ta có thể xây dựng nên các phần mềm hữu ích giải các bài toán thực tế một cách nhanh chóng và tối ưu

Nhận thấy tính thiết thực của vấn đề này và được sự gợi ý của giảng

viên hướng dẫn, tôi đã chọn nội dung nghiên cứu về ―Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế.” làm đề tài

cho luận v n tốt nghiệp của mình

Luận v n được bố cục thành 3 chương:

Chương 1 Cơ sở về lý thuyết đồ thị và độ phức tạp thuật toán: C ươn

này trình bày các khái niệm cơ bản về Lý thuyết đồ thị v độ phức tạp thuật toán

Chương 2 Bài toán tìm bộ ghép cực đại trên đồ thị và các thuật toán:

C ươn n p t b ểu các dạng bài toán tìm bộ ghép cực đạ tr n đồ thị, trình bày các thuật toán v đ n độ phức tạp của các thuật toán

Chương 3 Một số bài toán ứng dụng trong thực tế: Tìm hiểu một số bài

toán ứng dụng trong thực tế: B to n đ ều hành taxi, bài toán xếp lớp học theo tín

Trang 10

chỉ … xâ dựn c ươn trìn t ử nghiệm giải các bài toán này ứng dụng bài toán xếp lớp học theo tín chỉ tạ trường Trung cấp Kỹ thuật Vĩn P úc

Trang 11

Đồ thị là một cấu trúc rời r c gồm các đỉnh và các c nh nối các đỉnh đ

Đồ thị đƣợc k hiệu là G = (V, E), trong đ V là tập đỉnh và E là tập c nh Có thể coi E là tập các cặp(u,v) với u và v là hai đỉnh của V

Một số hình ảnh của đồ thị

Hình 1: Ví dụ về mô ìn đồ t ị

Trang 12

Ví dụ

a) Đơn đồ thị vô hướng b) Không phải đơn đồ

thị vô hướng do c các cặp c nh nối c ng một

cặp đỉnh

c) Không phải đơn đồ thị vô hướng do c c nh nối một đỉnh với chính n

Hìn : Đơn đồ t ị vô ướn v k ôn p ả đơn đồ t ị vô ướn

Trang 13

Tuy nhiên, trên thực tế, cũng c thể trong một hệ thống giao thông vẫn tồn t i nhiều con đường đi nối c ng hai địa điểm, hoặc cũng c thể c một con đường để đi từ một địa điểm nào đ rồi l i quay về chính n (đây c thể

là một con đường nội bộ của một trung tâm mua sắm, …) Khi đ , tính chất của đơn đồ thị vô hướng như định ngh a trên không cho phép n biểu diễn được hệ thống giao thông trong trường hợp này Muốn vậy, ta phải d ng một

lo i đồ thị tổng quát hơn, đ là: đa đồ thị vô hướng

- Các c nh nối c ng một cặp đỉnh được gọi là các c nh song song

- Các c nh nối từ một đỉnh với chính n được gọi là khuyên

Ví dụ

a) Đa đồ thị vô hướng: e1 và e2 là

các c nh song song

b) Đa đồ thị vô hướng: e là khuyên

Hìn 3: Đa đồ t ị vô ướn

e1

e2

e

Trang 14

Điểm chung của hai lo i đồ thị đã được định ngh a ở trên là tính chất

vô hướng (hai chiều) của các c nh Trong thực tế, cũng c khi ta phải chú trọng đến tính c hướng của các c nh nối này (chẳng h n như biểu diễn các con đường một chiều) Từ đ , ta c thêm lo i đồ thị: Đơn đồ thị c hướng và

đa đồ thị c hướng Về cơ bản, hai lo i này cũng tương tự như hai lo i mà ta định ngh a ở trên, chỉ thêm sự khác biệt là tính chất c thứ tự của các c nh

c) Không phải đơn đồ thị c hướng do c cung nối một

Trang 15

- E là một họ các cặp c thứ tự của V gọi là các cung

Các cung nối c ng một cặp đỉnh được gọi là các cung song song

Ví dụ

a) Đa đồ thị c hướng: e1 và e2 là các

cung song song

b) Đa đồ thị c hướng: e là khuyên

Hìn 5: Đa đồ t ị có ướn

Định nghĩa 5:

Một giả đồ thị G = (V, E) gồm một tập các đỉnh V, một tập các c nh E và một hàm f từ E tới {{u,v} | u,v  V } Một c nh là một khuyên nếu f(e) = {u} với một đỉnh u nào đ

Một số thuật ngữ cơ bản

+ Cho đồ thị vô hướng G = <V,E>

- Hai đỉnh u và v của đồ thị được gọi là kề nhau nếu (u,v) là một c nh của đồ thị

- Nếu e = (u,v) là c nh của đồ thị thì ta n i c nh này là liên thuộc với hai đỉnh u và v C nh được n i là nối đỉnh u và v Đỉnh u và v được gọi là đỉnh đầu của c nh e

+ Cho đồ thị vô hướng G = <V,E> Bậc của đỉnh v trong đồ thị, k hiệu là

e2 e1

e

Trang 16

deg(v), là số c nh liên thuộc với n Đỉnh c bậc 0 được gọi là đỉnh cô lập,đỉnh c bậc 1 gọi là đỉnh treo

Ví dụ

Cho đồ thị vô hướng G = <V,E> sau:

Hìn 6: Đơn đồ t ị vô ướn

- V = {1, 2, 3, 4, 5, 6}

- E = {(1,2), (2,3), (1,4), (1,5), (2,5), (4,5), (2,4)}

- Bậc của các đỉnh:

- deg(1) = 3 deg(2) = 4 deg(3) = 1

- deg(4) = 3 deg(5) = 3 deg(6) = 0

Trang 17

- Hai đỉnh u và v của đồ thị đƣợc gọi là kề nhau nếu (u,v) là một cung của đồ thị

- Nếu e=(u,v) là cung của đồ thị thì ta n i cung này đi ra khỏi đỉnh u và

đi vào đỉnh v Đỉnh u đƣợc gọi là đỉnh đầu của cung e và đỉnh v đƣợc gọi là đỉnh cuối của cung e

Trang 18

- Bán bậc ra: deg+(1)=2 deg+(2)=2 deg+(3)=1

deg+(4)=1 deg+(5)=2 deg+(6)=2

- Bán bậc vào: deg-(1)=1 deg-(2)=2 deg-(3)=2

deg-(4)=2 deg-(1)=2 deg-(1)=1 Tương tự như đồ thị vô hướng, đối với đồ thị c hướng ta cũng c kết quả gần tương tự về bậc của các đỉnh của đồ thị

+ Cho G = <V,E> là đồ thị c hướng Tổng bán bậc ra của các đỉnh bằng tổng bán bậc vào của các đỉnh và bằng số c nh của đồ thị

Lý thuyết đồ thị được ứng dụng trong rất nhiều l nh vực khác nhau Để

sử dụng được đồ thị hiệu quả và nhanh ch ng hơn, chúng ta phải biểu diễn và

xử l được đồ thị với máy tính Cách biểu diễn thông thường bằng hình vẽ và

mô tả tập hợp sẽ không ph hợp với cách thức lưu trữ dữ liệu và xử l trên máy tính Chúng ta phải tìm một cấu trúc dữ liệu thích hợp để biểu diễn đồ thị trên máy tính

C nhiều phương pháp khác nhau để biểu diễn đồ thị trên máy tính Sau đây chúng ta sẽ lần lượt tìm hiểu một số phương pháp thông dụng

Trang 19

(u, v) tương ứng với một c nh của đồ thị (Trong trường hợp đồ thị c hướng thì mỗi cặp (u, v) tương ứng với một cung, u là đỉnh đầu và v là đỉnh cuối của cung) Danh sách được lưu trong bộ nhớ dưới d ng mảng hoặc danh sách m c nối

Ví dụ với đồ thị dưới đây:

Ưu đ ểm của dan s c cạn :

• Trong trường hợp đồ thị thưa (c số c nh tương đối nhỏ: chẳng h n

m < 6n), cách biểu diễn bằng danh sách c nh sẽ tiết kiệm được không gian lưu trữ, bởi n chỉ cần 2m ô nhớ để lưu danh sách c nh

• Trong một số trường hợp, ta phải xét tất cả các c nh của đồ thị thì

1

3

4

Trang 20

cài đặt trên danh sách c nh làm cho việc duyệt các c nh dễ dàng hơn (Thuật toán Kruskal chẳng h n)

ược đ ểm của dan s c cạn :

• Nhược điểm cơ bản của danh sách c nh là khi ta cần duyệt tất cả các đỉnh kề với đỉnh v nào đ của đồ thị, thì chẳng c cách nào khác là phải duyệt tất cả các c nh, lọc ra những c nh c chứa đỉnh v và xét đỉnh còn l i Điều đ khá tốn thời gian trong trường hợp đồ thị dày (nhiều c nh)

Ưu đ ểm của dan s c kề:

• Đối với danh sách kề, việc duyệt tất cả các đỉnh kề với một đỉnh v cho trước là hết sức dễ dàng, cái tên "danh sách kề" đã cho thấy rõ điều này Việc duyệt tất cả các c nh cũng đơn giản vì một c nh thực ra là nối một đỉnh với một đỉnh khác kề n

Trang 21

ược đ ểm của dan s c kề

• Về l thuyết, so với hai phương pháp biểu diễn trên, danh sách kề tốt hơn hẳn Chỉ c điều, trong trường hợp cụ thể mà ma trận kề hay danh sách c nh không thể hiện nhược điểm thì ta nên d ng ma trận kề (hay danh sách c nh) bởi cài đặt danh sách kề c phần dài dòng hơn

c Ma trận liền kề

Giả sử G = (V, E) là một đồ thị đơn trong đ |V| = n và các đỉnh được liệt kê tuỳ v1,…,vn Ma trận liền kề A của G ứng với danh sách các đỉnh này là ma trận không - một cấp n*n c phần tử hàng i, cột j bằng 1 nếu vi và

vj liền kề nhau, và bằng 0 nếu chúng không được nối với nhau

3 Nếu G là đồ thị c hướng và A là ma trận liền kề tương ứng thì trên ma trận A:

Trang 22

• Tổng các số trên hàng i = Bán bậc ra của đỉnh i = deg+(i)

• Tổng các số trên cột i = Bán bậc vào của đỉnh i = deg-(i)

Trong trường hợp G là đơn đồ thị, ta c thể biểu diễn ma trận liền kề A tương ứng là các phần tử logic.Aij = TRUE nếu (i, j)  E và aij = FALSE nếu (i, j) ∉ E

Ưu đ ểm của ma trận l ền kề:

• Đơn giản, trực quan, dễ cài đặt trên máy tính

• Để kiểm tra xem hai đỉnh (u, v) của đồ thị c kề nhau hay không, ta chỉ việc kiểm tra bằng một phép so sánh: auv ≠ 0

ược đ ểm của ma trận l ền kề:

• Bất kể số c nh của đồ thị là nhiều hay ít, ma trận liền kề luôn luôn đòi hỏi n2 ô nhớ để lưu các phần tử ma trận, điều đ gây lãng phí bộ nhớ dẫn tới việc không thể biểu diễn được đồ thị với số đỉnh lớn

Với một đỉnh u bất kỳ của đồ thị, nhiều khi ta phải xét tất cả các đỉnh v khác kề với n , hoặc xét tất cả các c nh liên thuộc với n Trên ma trận liền

kề việc đ được thực hiện bằng cách xét tất cả các đỉnh v và kiểm tra điều kiện auv ≠ 0 Như vậy, ngay cả khi đỉnh u là đỉnh cô lập (không kề với đỉnh nào) hoặc đỉnh treo (chỉ kề với 1 đỉnh) ta cũng buộc phải xét tất cả các đỉnh

và kiểm tra điều kiện trên dẫn tới lãng phí thời gian

Trang 23

mij = 0 nếu c nh ej không nối với

1.2.1 Định nghĩa thuật toán

Thuật toán là một dãy hữu h n các bước, mỗi bước mô tả chính xác các phép toán hoặc hành động cần thực hiện để cho ta lời giải của bài toán

- Thao tác , hay còn gọi là tác vụ, phép toán ( Operation ) hay lệnh (Command), chỉ thị (Instruction) là một hành động cần được thực hiện bởi

cơ chế thực hiện thuật toán

Mỗi thao tác biến đổi bài toán từ một tr ng thái trước (hay tr ng thái nhập) sang tr ng thái sau (hay tr ng thái xuất).Thực tế mỗi thao tác thường sử dụng một số đối tượng trong tr ng thái nhập (các đối tượng nhập )và sản sinh

ra các đối tượng mới trong tr ng thái xuất (các đối tượng xuất) Quan hệ giữa

2 tr ng thái xuất và nhập cho thấy tác động của thao tác Dãy các thao tác của thuật toán nối tiếp nhau nhằm biến đổi bài toán từ tr ng thái ban đầu đến tr ng thái kết quả

Trang 24

Mỗi thao tác có thể phân tích thành các thao tác đơn giản hơn Trình tự thực hiện các thao tác phải được xác định rõ ràng trong thuật toán Cùng một tập hợp thao tác nhưng xếp đặt theo trình tự khác nhau sẽ cho kết quả khác nhau

1.2.2 Phân tích độ phức tạp của thuật toán

Trong khi giải một bài toán c thể c một số giải thuật khác nhau, vấn

đề là cần phải đánh giá các giải thuật đ để lựa chọn một giải thuật tốt nhất Thông thường người ta c n cứ vào các tiêu chuẩn sau:

- Tiêu chuẩn về tính đúng đắn của thuật toán, thuật toán c cho lời giải đúng của bài toán hay không ?

- Tiêu chuẩn về tính đơn giản của thuật toán Thường ta mong muốn c được một thuật toán đơn giản, dễ hiểu, dễ lập trình Đặc biệt là những thuật toán chỉ d ng một vài lần ta cần coi trọng tính chất này, vì công sức và thời gian bỏ ra để xây dựng thuật toán thường lớn hơn rất nhiều so với thời gian thực hiện n

- Tiêu chuẩn về thời gian: Thời gian ch y của thuật toán c nhanh không? Khi một chương trình được sử dụng nhiều lần thì yêu cầu tiết kiệm thời gian thực hiện chương trình l i rất quan trọng, đặc biệt đối với những bài toán mà dữ liệu đầu vào lớn thì tiêu chuẩn này là rất quan trọng

Trong phần này ta quan tâm chủ yếu đến độ phức t p thời gian của thuật toán

Các bước trong quá trình phân tích đánh giá thời gian chạy của thuật toán:

- Bước đầu tiên trong việc phân tích thời gian ch y của thuật toán là quan tâm đến kích thước dữ liệu, sẽ được d ng như dữ liệu nhập của thuật toán và quyết định phân tích thuật toán nào là thích hợp Ta c thể xem thời gian ch y của thuật toán là một hàm theo kích thước của dữ liệu nhập Nếu

Trang 25

gọi n là kích thước của dữ liệu nhập thì thời gian thực hiện T của thuật toán được biểu diễn như một hàm theo n, k hiệu là: T(n) Người ta thường coi T(n) là thời gian thực hiện chương trình trong trường hợp xâu nhất trên dữ liệu vào c kích thước n, tức là: T(n) là thời gian lớn nhất để thực hiện chương trình đối với mọi dữ liệu vào c cúng kích thước n

- Bước thứ hai trong việc phân tích thời gian ch y của một thuật toán là nhân ra các thao tác trừu tượng của thuật toán để tách biệt sự phân tích và sự cài đặt Bởi vì ta biết rằng tốc độ xử l của máy tính và các bộ dịch của ngôn ngữ lập trình cao cấp đều ảnh hưởng đến thời gian ch y của thuật toán, nhưng những thao tác này không đồng đều trên các lo i máy trên đ cài đặt thuật toán, vì vậy không thể dựa và chúng để đánh giá thời gian ch y của thuật toán Chẳng h n ta tách biệt sự xem xét xem c bao nhiêu phép toán so sánh trong một thuật toán sắp xếp khỏi sự xác định cần bao nhiêu micro giây ch y trên một máy tính cụ thể Yếu tố thứ nhất được xác định bởi tính chất của thuật toán, còn yếu tố thứ hai được xác định bởi tính n ng của máy tính Điều này cho thấy rằng T(n) không thể được biểu diễn bằng giây, phút … được; cách tốt nhất là biểu diễn theo số các chỉ thị trong thuật toán

1.2.3 Tối ưu thuật toán

Tiến trình tổng quát của việc t o ra các sửa đổi ngày càng tiến bộ hơn cho một thuật toán để sinh ra một phiên bản khác ch y nhanh hơn được gọi là tối ưu thuật toán Khi tối ưu một thuật toán ta thường dựa vào một nguyên lý,

đ là nguyên l Profile : ― Tìm điểm mất thời gian nhiều nhất của thuật toán ― Một số kỹ thuật thường d ng để tối ưu thuật toán là:

Kỹ thuật tố ưu c c vòn lặp và tố ưu v ệc rẽ nhánh

Đây là điểm quan tâm đầu tiên khi cải tiến thuật toán,vì vòng lặp là câu lệnh thường làm t ng độ phức t p của thuật toán Việc cải tiến tập trung vào :

- Cố gắng giảm các vòng lặp lồng nhau

Trang 26

- T ng số lệnh thực hiện trong một bước lặp để giảm số lượng các bước lặp

- Tách các lệnh không phụ thuộc vào chỉ số lặp ra khỏi vòng lặp

1.3 MỘT SỐ THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ

1.3.1 Thuật toán tìm kiếm theo chiều sâu (DEPTH FIRST SEARCH)

a Ý tưởng

Tư tưởng của thuật toán có thể trình bày như sau: Trước hết, mọi đỉnh x

kề với S tất nhiên sẽ đến được từ S Với mỗi đỉnh x kề với S đ thì tất nhiên những đỉnh y kề với x cũng đến được từ S Điều đ gợi ý cho ta viết một thủ tục đệ quy DFS(u) mô tả việc duyệt từ đỉnh u bằng cách thông báo th m đỉnh

u và tiếp tục quá trình duyệt DFS(v) với v là một đỉnh chưa th m kề với u

- Để không một đỉnh nào bị liệt kê tới hai lần, ta sử dụng kỹ thuật đánh dấu, mỗi lần th m một đỉnh, ta đánh dấu đỉnh đ l i để các bước duyệt đệ quy kế tiếp không duyệt l i đỉnh đ nữa

- Để lưu l i đường đi từ đỉnh xuất phát S, trong thủ tục DFS(u), trước khi gọi đệ quy DFS(v) với v là một đỉnh kề với u mà chưa đánh dấu,

ta lưu l i vết đường đi từ u tới v bằng cách đặt TRACE[v] := u, tức

là TRACE[v] lưu l i đỉnh liền trước v trong đường đi từ S tới v Khi quá trình tìm kiếm theo chiều sâu kết thúc, đường đi từ S tới F sẽ là:

Trang 27

begin

Trace[v] := u; {Lưu vết đường đi, đỉnh mà từ đ tới v là u}

DFS(v); {Gọi đệ quy duyệt tương tự đối với v}

< Nếu F chưa bị đánh dấu thì không thể c đường đi từ S tới F >;

< Nếu F đã bị đánh dấu thì truy theo vết để tìm đường đi từ S tới F >;

end

Ví dụ: Với đồ thị sau đây, đỉnh xuất phát S = 1: quá trình duyệt đệ quy có thể

vẽ trên cây tìm kiếm DFS sau (Mũi tên u→v chỉ thao tác đệ quy: DFS(u) gọi

Trang 28

1.3.2 Thuật toán tìm kiếm theo chiều rộng (BREADTH FIRST SEARCH)

Cơ sở của phương pháp cài đặt này là "lập lịch" duyệt các đỉnh Việc

th m một đỉnh sẽ lên lịch duyệt các đỉnh kề nó sao cho thứ tự duyệt là ưu tiên chiều rộng (đỉnh nào gần S hơn sẽ được duyệt trước) Ví dụ: Bắt đầu ta th m đỉnh S Việc th m đỉnh S sẽ phát sinh thứ tự duyệt những đỉnh (x1, x2, , xp)

kề với S (những đỉnh gần S nhất) Khi th m đỉnh x1 sẽ l i phát sinh yêu cầu duyệt những đỉnh (u1, u2 , uq) kề với x1 Nhưng rõ ràng các đỉnh u này

"xa" S hơn những đỉnh x nên chúng chỉ được duyệt khi tất cả những đỉnh x đã duyệt xong Tức là thứ tự duyệt đỉnh sau khi đã th m x1 sẽ là: (x2, x3 , xp, u1, u2, , uq)

Hình 13: Cây BFS

Giả sử ta c một danh sách chứa những đỉnh đang "chờ" th m T i mỗi bước, ta th m một đỉnh đầu danh sách và cho những đỉnh chưa "xếp hàng" kề với n xếp hàng thêm vào cuối danh sách Chính vì nguyên tắc đ nên danh sách chứa những đỉnh đang chờ sẽ được tổ chức dưới d ng hàng đợi (Queue)

Ta sẽ dựng giải thuật như sau:

Trang 29

Bước 1: Khởi t o:

• Các đỉnh đều ở tr ng thái chưa đánh dấu, ngo i trừ đỉnh xuất phát S

là đã đánh dấu

• Một hàng đợi (Queue), ban đầu chỉ c một phần tử là S Hàng đợi

d ng để chứa các đỉnh sẽ được duyệt theo thứ tự ưu tiên chiều rộng

Bước 2: Lặp các bước sau đến khi hàng đợi rỗng:

• Lấy u khỏi hàng đợi, thông báo th m u (Bắt đầu việc duyệt đỉnh u)

• Xét tất cả những đỉnh v kề với u mà chưa được đánh dấu, với mỗi đỉnh v đ :

9

Trang 30

Hàng đợi Đỉnh u

(lấy ra từ hàng đợi)

Hàng đợi (sau khi lấy u ra)

Để thứ tự các phần tử lấy ra khỏi hàng đợi, ta thấy trước hết là 1; sau đ

đến 2, 3; rồi mới tới 4, 5; cuối c ng là 6 Rõ ràng là đỉnh gần S hơn sẽ được

duyệt trước Và như vậy, ta c nhận xét: nếu kết hợp lưu vết tìm đường đi thì

đường đi từ S tới F sẽ là đường đi ngắn nhất (theo ngh a qua ít c nh nhất)

Trang 31

CHƯƠNG 2 BÀI TO N T M BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ

VÀ C C THUẬT TO N 2.1 ĐỒ THỊ HAI PHÍA

Phần này được tham khảo trong các tài liệu [1], [7], [10]

2.1.1 Định nghĩa

Một đơn đồ thị vô hướng G = (V, E) được gọi là đồ thị hai phía nếu tập các đỉnh V c thể phân thành hai tập con không rỗng, rời nhau X và Y sao cho mỗi c nh của đồ thị nối một đỉnh của X với một đỉnh của Y

Khi đ , người ta còn ký hiệu G là ( X Y, E) và gọi một tập (giả sử

là tập X) là tập c c đỉn tr và tập còn l i là tập c c đỉn p ả của đồ thị

hai phía G Các đỉnh thuộc X còn gọi là các X_đỉnh, các đỉnh thuộc Y gọi là các Y_đỉnh

Đồ thị hai phía Không phải đồ thị hai phía

Hình 15: Ví dụ về đồ t ị a p ía v k ôn p ả l đồ t ị a p ía

Để kiểm tra một đồ thị liên thông c phải là đồ thị hai phía hay không, ta

c thể áp dụng thuật toán sau:

Với một đỉnh v bất kỳ:

Trang 32

X := {v}; Y := ∅;

repeat

Y := Y ∪ Kề(X);

X := X ∪ Kề(Y);

until (X∩Y ≠ ∅) or (X và Y là tối đ i - không bổ sung được nữa);

if X∩Y ≠ ∅ then < Không phải đồ thị hai phía >

else <Đây là đồ thị hai phía, X là tập các đỉnh trái: các đỉnh đến được từ v qua một số chẵn c nh, Y là tập các đỉnh phải: các đỉnh đến được từ v qua một số

lẻ c nh>;

Đồ thị hai phía gặp rất nhiều mô hình trong thực tế Chẳng h n quan hệ hôn nhân giữa tập những người đàn ông và tập những người đàn bà, việc sinh viên chọn trường, thầy giáo chọn tiết d y trong thời khoá biểu, bài toán xếp lớp học theo học chế tín chỉ v.v

Tính chất

• một đồ thị là hai phía khi và chỉ khi n không chứa chu trình lẻ

• kích thước của phủ đỉnh nhỏ nhất bằng kích thước của cặp ghép lớn nhất

• kích thước của tập độc lập lớn nhất cộng kích thước của cặp ghép lớn nhất bằng số đỉnh

• trong đồ thị hai phía liên thông, kích thước của phủ c nh nhỏ nhất bằng kích thước tập độc lập lớn nhất

• trong đồ thị hai phía liên thông, kích thước của phủ c nh nhỏ nhất cộng kích thước của phủ đỉnh nhỏ nhất bằng số đỉnh

• một đồ thị là hai phía khi và chỉ khi c thể tô n bằng hai màu

Trang 33

2.1.2 Các bài toán trên đồ thị hai phía

Đồ thị hai phía thường được d ng để mô hình các bài toán ghép cặp (matching problem) Ví dụ như bài toán phân công công việc, giả sử ta c một

nh m người P và một tập công việc J, trong đ không phải ai cũng hợp với mọi công việc Ta c thể mô hình bài toán bằng một đồ thị với tập đỉnh là P +

J Nếu người pi c thể làm công việc ji, đồ thị sẽ c một c nh nối giữa pi và ji Định l hôn nhân cung cấp một đặc điểm của đồ thị hai phía: tồn t i cặp ghép hoàn hảo (perfect matching)

Đồ thị hai phía được sử dụng trong l thuyết mã h a (coding theory) hiện đ i, đặc biệt khi giải mã các codeword nhận được từ kênh Đồ thị nhân tử (factor graph) và đồ thị Tanner là các ví dụ

Đồ thị hai phía được ứng dụng rất nhiều trong thực tế Chính vì vậy

c rất nhiều bài toán trên đồ thị hai phía đã được phát biểu Một số các bài toán đ là :

- Bài toán ghép đôi không trọng

- Bài toán phân công

- Bài toán tìm bộ ghép cực đ i với tổng trọng số cực đ i hoặc cực tiểu trên đồ thị hai phía

- …

2.2 BÀI TO N T M BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA

Phần này được tham khảo trong các tài liệu [6], [7]

2.2.1 Bài toán ghép đôi không trọng và các khái niệm

Cho một đồ thị hai phía G = ( X Y, E) ở đây X là tập các đỉnh trái và Y là tập các đỉnh phải của G, X = { x[l], x[2], , x[m] }, Y = { y[l], y[2 ],y[n ] } Một bộ ghép của G là tập hợp các c nh của G đôi một không c đỉnh chung

Trang 34

Bài toán ghép đôi là tìm một bộ ghép lớn nhất (ngh a là c số c nh lớn nhất) của G

đỉnh nh t gọi là đường pha (alternating path), một đường đi từ một

x_đỉnh là đỉnh nh t tới một Y_đỉnh là đỉnh nh t gọi là đường mở

(augmenting path)

Một cách dễ hiểu, c thể quan niệm như sau:

• Một đường pha là một đường đi đơn trong G bắt đầu bằng một x_đỉnh

là đỉnh nh t, đi theo một c nh nh t sang Y rồi đến một c nh đậm về X, rồi l i đến một c nh nh t sang Y cứ xen kẽ nhau như vậy

• Một đường mở là một đường pha Bắt đầu từ một x_đỉnh là đỉnh nh t kết thúc bằng một Y_đỉnh là đỉnh nh t

Ví dụ: Với đồ thị hai phía trong hình 16 với bộ ghép M = {(x[l],y[1]), (x[2],

y[2])}

x[3] và y[3] là những đỉnh nh t, các đỉnh khác là đỉnh đậm

Đường (x[3], y[2], x[2], y[l]) là đường pha

Đường (x[3], y[2], x[2], y[l], x[l], y[3]) là đường mở

Trang 35

Bước :

Tìm một đường mở

Bước 3:

 Nếu bước 2 tìm được đường mở thì mở rộng bộ ghép M: Trên đường mở, lo i bỏ những c nh đã ghép (c nh đậm) khỏi M và thêm vào M những c nh chưa ghép (c nh nh t) Sau đ lặp l i bước 2

 Nếu bước 2 không tìm được đường mở thì thuật toán kết thúc

Ví dụ: Như ví dụ trên, với bộ ghép hai c nh M = {(X1, Y1), (X2, Y2)}

Trang 36

2.2.3 Độ phức tạp của thuật toán

Vì đường mở bắt đầu từ một đỉnh chưa ghép thuộc tập X, đi theo một

c nh chưa ghép sang tập Y, rồi theo một c nh đã ghép về tập X,…cuối c ng

là c nh chưa ghép tới một đỉnh thuộc tập Y chưa ghép Nên ta thấy độ dài đường mở là lẻ và trên đường mở số c nh thuộc M ít hơn số c nh không thuộc M là 1 c nh Ta c thể sử dụng thuật toán tìm kiếm theo chiều rộng (BFS) để đường mở tìm được là đường đi ngắn nhất, giảm bớt công việc cho bước t ng cặp ghép Người ta đã chứng minh được chi phí thời gian thực hiện giải thuật này trong trường hợp xấu nhất sẽ là 0(n3) đối với đồ thị dày và 0(n(n+m)logn) đối với đồ thị thưa (trong đ n là số đỉnh và m là số c nh của

đồ thị)

2.3 BÀI TO N T M BỘ GHÉP CỰC ĐẠI VỚI TỔNG TRỌNG SỐ CỰC ĐẠI HOẶC CỰC TIỂU TRÊN ĐỒ THỊ HAI PHÍA

2.3.1 Bài toán phân công

Đây là một d ng bài toán phát biểu như sau: C m người (đánh số 1, 2, , m) và n công việc (đánh số 1, 2, , n), mỗi người c khả n ng thực hiện một

số công việc nào đ Để giao cho người i thực hiện công việc j cần một chi

Trang 37

phí là c[i, j] ≥ 0 Cần phân cho mỗi thợ một việc và mỗi việc chỉ do một thợ thực hiện sao cho số công việc c thể thực hiện được là nhiều nhất và nếu c

≥ 2 phương án đều thực hiện được nhiều công việc nhất thì chỉ ra phương án chi phí ít nhất

Dựng đồ thị hai phía G = (X Y, E) với X là tập m người, Y là tập n việc và (u, v) E với trọng số c[u, v] nếu như người u làm được công việc v Bài toán đưa về tìm bộ ghép nhiều c nh nhất của G c trọng số nhỏ nhất

Gọi k = max(m, n) Bổ sung vào tập X và Y một số đỉnh giả để |X|=|Y|= k Gọi M là một số dương đủ lớn hơn chi phí của mọi phép phân công c thể Với mỗi cặp đỉnh (u, v): u  X và v  Y Nếu (u, v) ∉ E thì ta bổ sung c nh (u, v) vào E với trọng số là M

Khi đ ta được G là một đồ thị hai phía đầy đủ (Đồ thị hai phía mà giữa một đỉnh bất kỳ của X và một đỉnh bất kỳ của Y đều c c nh nối) Và nếu như ta tìm được bộ ghép đầy đủ k c nh mang trọng số nhỏ nhất thì ta chỉ cần lo i bỏ khỏi bộ ghép đ những c nh mang trọng số M vừa thêm vào thì sẽ được kế

ho ch phân công 1 người ↔ 1 việc cần tìm Điều này dễ hiểu bởi bộ ghép đầy

đủ mang trọng số nhỏ nhất tức là phải ít c nh trọng số M nhất, tức là số phép phân công là nhiều nhất, và tất nhiên trong số các phương án ghép ít c nh trọng số M nhất thì đây là phương án trọng số nhỏ nhất, tức là tổng chi phí trên các phép phân công là ít nhất

2.3.2 Thuật toán tìm cặp ghép với tổng trọng số trên các cạnh là lớn nhất hoặc nhỏ nhất

* Thuật toán tìm cặp ghép với tổng trọng số trên các c nh là lớn nhất:

Bước 1:

+ T o đồ thị hai phía (X là phía máy c M đỉnh, Y là phía người c N đỉnh)

Trang 38

C cung (i,j) với trọng số C[i,j] nếu công nhân i làm việc trên máy j t o lợi nhuận C[ij]

+ T o nhãn ban đầu chấp nhận được Fx và Fy theo quy tắc:

Fx[i] = Max( C[i,j], Vj: 1 <= j <= M) Fy[j]=0,Vj: 1 < = j < = M

(FX, FY gọi là chấp nhận được nếu thoả mãn bất đẳng thức Fx[i] + Fy[j] >= C[ij])

Nếu Fx[i] + Fy[j] = C[i,j] thì ta coi c nh (i,j) là c nh đậm (là đã ghép máy i cho công nhân j), các c nh còn l i là c nh nh t Hai đầu c nh đậm là đỉnh đậm, các đỉnh còn l i là đỉnh nh t

Vậy bằng cách t o nhãn ban đầu như trên chúng ta c cặp ghép M ban đầu (ghép được một số máy với công nhân t o lợi nhuận trên các máy đ ) Bước 2:

Tìm dây chuyền (bằng logic hoặc đệ qui)

Nếu không c dây chuyền thì sửa nhãn

Ngược l i t ng cặp ghép trên dây chuyền này

C o đến k tìm được dâ c u ền;

End;

Trang 39

Trong thuật toán trên phải thực hiện các thao tác: tìm dây chuyền, sửa nhãn và t ng cặp ghép

Sửa n ãn: Phải thực hên khi dây chuyền không kết thúc đƣợc bằng

đỉnh nh t bên Y mà kết thúc bằng đỉnh đậm bên X (ta gọi là dây chuyền ―dở dang‖) Trên các cung nối một đỉnh bên X đã n p vào dây chuyền tới các đỉnh j thuộc Y chƣa thuộc dây chuyền, chọn giá trị bé nhất trong các giá trị:

Fx[i] + Fy[j] – C[i,j]. Giá tri này đƣợc chọn làm lƣợng sửa nhãn (kí hiệu là m) Sửa nhãn theo cách nhƣ sau: Nhãn các đỉnh của X thuộc dây chuyền sẽ giảm đi một lƣợng là m, nhãn các đỉnh của Y thuộc dây chuyền sẽ t ng thêm một lƣợng là m, để đảm bảo Fx[i] + Fy[ị] – C[i,j] >= 0 Sau khi các đỉnh thuộc dây chuyền ―dở dang‖ đã đƣợc sửa nhãn thì n c khả n ng mới kết hợp với các đỉnh j bên Y t o nên một dây chuyền hoàn chỉnh (vì sẽ xuất hiện những cặp (i,j) mới mà Fx[i] + Fy[j] = C[i,j])

n cặp ép: Đổi màu các cung, bắt đầu từ cung nh t cuối c ng của

dây chuyền đổi ngƣợc dần về cung nh t đầu tiên của dây chuyền

ìm dâ c u ền: C thể tìm kiếm theo chiều sâu hoặc tìm kiếm theo

chiều rộng Yêu cầu dây chuyền xuất phát từ một đỉnh nh t của X, kết thúc bằng một đỉnh nh t của Y, đồng thời các cung nh t và đậm liên tiếp xen kẽ nhau (đo cung đầu và cung cuối đều nh t, nên số cung nh t lớn hơn số cung đậm là 1)

* Nếu là bài toán tìm tổng nhỏ nhất thì đổi dấu C[i,j] và cuối c ng đổi dấu tổng hoặc khởi trị C[i,j] = vô c ng, nhãn ban đầu  i  X: Fx[i] = Min { C[i,j]  j  Y}, Fy[j] = 0,  j Y Lƣợng sửa nhãn m = Min { C[i,j] – Fx[i] – Fy[j] }

Trang 40

2.3.3 Thuật toán Hung-ga-ri

 Hoặc không tìm thấy đường mở thì c thể xác định được

VisitedX = {Tập những X_đỉnh c thể đến được từ x* bằng một đường pha}

VisitedY = {Tập những Y_đỉnh c thể đến được từx* bằng một đường pha}

Gọi ∆ là trọng số nhỏ nhất của các c nh nối giữa một đỉnh thuộc VisitedX với một đỉnh không thuộc VisitedY Dễ thấy ∆> 0 bởi nếu ∆= 0 thì tồn t i một 0_c nh (x, y) với x∈VisitedX và y∉VisitedY Vì x* đến được x bằng một đường pha và (x, y) là một 0_c nh nên x* cũng đến được y bằng một đường pha, dẫn tới

y ∈VisitedY, điều này vô lý

Biến đổi đồ thị G như sau: Với ∀x ∈VisitedX, trừ ∆ vào trọng số những c nh liên thuộc với x, Với ∀y ∈VisitedY, cộng ∆ vào trọng

số những c nh liên thuộc với y

Lặp l i thủ tục tìm kiếm trên đồ thị thử tìm đường mở xuất phát ở

Ngày đăng: 13/12/2016, 09:52

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Lê Minh Hoàng, Giải thuật và lập trình, Đ i học sƣ ph m Hà Nội 1999-2002 [2] Nguyễn Cam, Chu Đức Khánh, Lý t u ết đồ t ị, NXB Thành phố Hồ Chí Minh,1999 Sách, tạp chí
Tiêu đề: Giải thuật và lập trình", Đ i học sƣ ph m Hà Nội 1999-2002 [2] Nguyễn Cam, Chu Đức Khánh, "Lý t u ết đồ t ị
Nhà XB: NXB Thành phố Hồ Chí Minh
[3] Đinh M nh Tường, Cấu trúc dữ liệu và thuật toán, NXB KH&amp;KT, 2001 Sách, tạp chí
Tiêu đề: Cấu trúc dữ liệu và thuật toán
Nhà XB: NXB KH&KT
[4] Nguyễn Đức Ngh a – Nguyễn Tô Thành, Toán rời rạc, NXB Đ i học Quốc Gia Hà Nội, 2003 Sách, tạp chí
Tiêu đề: Toán rời rạc
Nhà XB: NXB Đ i học Quốc Gia Hà Nội
[5] Kenneth H.Rosen – Toán rời rạc ứng dụng trong Tin học (Bản dịch), NXB Khoa học và Kỹ thuật, 2003.Tiếng Anh Sách, tạp chí
Tiêu đề: Toán rời rạc ứng dụng trong Tin học
Nhà XB: NXB Khoa học và Kỹ thuật
[6] S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani, Algorithms, 2006 Sách, tạp chí
Tiêu đề: Algorithms
[7] Edmonds, Jack (1965). "Paths, trees, and flowers". Canad. J. Math. 17: 449– Sách, tạp chí
Tiêu đề: Paths, trees, and flowers
Tác giả: Edmonds, Jack
Năm: 1965
[8] Hopcroft,JohnE.;RajeevMotwani,JeffreyD.Ullman, Introduction to Automata Theory, Languages and Computation,1stedition,Addison-Wesley,1979 Sách, tạp chí
Tiêu đề: Introduction to Automata "Theory
[9] Narsingh Deo "Graph Theory with Applications to Engineering and Computer Science", New Delhi-110001, 2006 Sách, tạp chí
Tiêu đề: Graph Theory with Applications to Engineering and Computer Science
[10] Aho A., The design and analysis of computer algorithms. Addison Wesley Pub. Comp, London 1976 Sách, tạp chí
Tiêu đề: The design and analysis of computer algorithms

HÌNH ẢNH LIÊN QUAN

Đồ thị là một cấu trúc rời r c gồm các đỉnh và các c nh nối các đỉnh đ . - Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế
th ị là một cấu trúc rời r c gồm các đỉnh và các c nh nối các đỉnh đ (Trang 11)
Hình 13: Cây BFS - Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế
Hình 13 Cây BFS (Trang 28)
Hình 14: Qu  trìn  tìm k ếm t eo c  ều rộn - Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế
Hình 14 Qu trìn tìm k ếm t eo c ều rộn (Trang 30)
Đồ thị hai phía  Không phải đồ thị hai phía - Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế
th ị hai phía Không phải đồ thị hai phía (Trang 31)
Hình  6: Đồ t ị  a  p ía - Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế
nh 6: Đồ t ị a p ía (Trang 35)
Hình 18: P ép c ập Blossom - Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế
Hình 18 P ép c ập Blossom (Trang 52)
Hình 19:  ở Blossom để dò đườn  xu  n qua Blossom - Bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế
Hình 19 ở Blossom để dò đườn xu n qua Blossom (Trang 53)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w