Thuật toán để giải một bài toán P là một thủ tụcxác định, được chia ra thành các phép toán cơ bản, biến đổi một dãy cácdấu hiệu diễn tả các dữ liệu, không quan trọng ở chỗ thuộc bản chất
Trang 1ĐẠI HỌC THÁI NGUYÊNTRƯỜNG ĐẠI HỌC KHOA HỌC
ĐOÀN NGỌC LÀNH
MỘT SỐ BÀI TOÁNTỐI ƯU TỔ HỢP TRÊN ĐỒ THỊ
LUẬN VĂN THẠC SĨ TOÁN HỌC
Thái Nguyên - 2012
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trang 2ĐẠI HỌC THÁI NGUYÊNTRƯỜNG ĐẠI HỌC KHOA HỌC
ĐOÀN NGỌC LÀNH
MỘT SỐ BÀI TOÁNTỐI ƯU TỔ HỢP TRÊN ĐỒ THỊ
Chuyên ngành: TOÁN ỨNG DỤNG
Mã số : 60.46.36
LUẬN VĂN THẠC SĨ TOÁN HỌC
Người hướng dẫn khoa học: TS VŨ MẠNH XUÂN
Thái Nguyên - 2012
Trang 3Mục lục
1.1 Thuật toán và độ phức tạp của thuật toán 5
1.1.1 Thuật toán 5
1.1.2 Độ phức tạp của thuật toán 7
1.1.3 Đánh giá thời gian tốt nhất, tồi nhất và trung bình của một thuật toán 10
1.2 Tối ưu tổ hợp 13
1.2.1 Bài toán tối ưu tổ hợp 13
1.2.2 Một số bài toán cụ thể 14
1.2.3 Bài toán lớp P và lớp N P 16
2 Một số bài toán tối ưu tổ hợp trên đồ thị 18 2.1 Một số khái niệm 18
2.1.1 Đồ thị vô hướng 18
2.1.2 Đồ thị có hướng 19
2.1.3 Đường đi, chu trình Đồ thị liên thông 20
2.2 Thuật toán tìm kiếm trên đồ thị 22
2.2.1 Thuật toán tìm kiếm theo chiều sâu trên đồ thị 22
2.2.2 Tìm kiếm theo chiều rộng trên đồ thị 25
2.3 Bài toán đường đi ngắn nhất 29
2.3.1 Đường đi ngắn nhất xuất phát từ một đỉnh đến các đỉnh còn lại_Thuật toán Dijkstra 31
2.3.2 Đường đi ngắn nhất giữa tất cả các cặp đỉnh_Thuật toán Floyd 37
2.4 Bài toán luồng cực đại trong mạng và ứng dụng 41
2.4.1 Mạng Luồng trong mạng Bài toán luồng cực đại 41
1
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trang 42.4.2 Lát cắt Đường tăng luồng Định lí Ford - Fulkerson 432.4.3 Thuật toán tìm luồng cực đại trong mạng 462.4.4 Một số bài toán luồng tổng quát 542.4.5 Một số ứng dụng trong tổ hợp từ bài toán luồng 57
Trang 5Mở đầu
Lý thuyết đồ thị là một lĩnh vực nghiên cứu có ý nghĩa thực tiễn cao
đã bắt đầu từ lâu Tuy nhiên, do việc tính toán trên đồ thị thường là cầnkhối lượng tính toán cũng như không gian nhớ lớn, vì vậy gần đây cùngvới sự phát triển mạnh mẽ của kỹ thuật máy tính điện tử, các bài toán tối
ưu trên đồ thị ngày càng được quan tâm và đã đạt được nhiều kết quả khảquan Đáng chú ý, việc chứng minh giả thuyết bốn màu có thể xem nhưmột minh chứng rõ nét về việc chứng minh bài toán nhờ máy tính điện
tử Mặc dù có ý nghĩa thực tiễn cao nhưng lý thuyết đồ thị cũng chỉ mớiđược đưa vào chương trình giảng dạy và nói chung còn sơ sài Đề tài nàyđặt vấn đề nghiên cứu những vấn đề cơ bản về thuật toán, độ phức tạpthuật toán, m ột số bài toán tối ưu cụ thể trên đồ thị và trình bày thuậttoán cũng như kết quả tính toán với những bài toán cụ thể
Nội dung của bản Luận văn gồm 2 chương
Chương 1 trình bày khái quát về thuật toán, độ phức tạp của thuậttoán, nêu một số bài toán có độ phức tạp đa thức và không đa thức.Chương 2 trình bày một số thuật toán giải một lớp những bài toán:duyệt đồ thị, bài toán tìm đường đi ngắn nhất, bài toán luồng cực đại
và minh họa trên những ví dụ cụ thể
Dù đã rất cố gắng, nhưng chắc chắn nội dung được trình bày trong luậnvăn không tránh khỏi thiếu sót nhất định, em rất mong nhận được sự góp
ý của các thầy cô giáo và các bạn
Luận văn này được hoàn thành dưới sự chỉ bảo và hướng dẫn tận tìnhcủa TS Vũ Mạnh Xuân Thầy đã dành nhiều thời gian hướng dẫn và giảiđáp các thắc mắc của tôi trong suốt quá trình làm luận văn Em xin đượcbày tỏ lòng biết ơn sâu sắc đến Thầy
Tôi xin cảm ơn Sở Nội vụ, Sở Giáo dục và Đào tạo Tuyên Quang, trườngTHPT Xuân Vân, Tổ Toán trường THPT Xuân Vân đã giúp đỡ tạo điềukiện cho tôi hoàn thành khóa học này
3
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trang 6Em xin gửi tới các thầy cô khoa Toán, phòng đào tạo sau đại học TrườngĐại học Khoa Học, Đại học Thái Nguyên cũng như các Thầy cô đã thamgia giảng dạy khóa cao học 2010 - 2012, lời cảm ơn sâu sắc nhất về cônglao dạy dỗ trong suốt quá trình giáo dục, đào tạo của Nhà trường.
Thái Nguyên, ngày 15 tháng 7 năm 2012
Người thực hiệnĐoàn Ngọc Lành
Trang 7Chương 1
Tối ưu tổ hợp
Chương này trình bày về lớp bài toán tối ưu tổ hợp, thuật toán và mô tảthuật toán bằng ngôn ngữ tựa Passcal, đánh giá độ phức tạp của thuậttoán Nêu một số bài toán cụ thể thuộc lớp bài toán tối ưu tổ hợp, từ đóđưa ra khái niệm bài toán lớp P và lớp NP
Khái niệm thuật toán bắt đầu từ thuật ngữ “Algorithm” (thuật toán) là tênnhà toán học Arập: Aba Ja’fa Mohamedibn Musaal Khowarizmi, người đãviết cuốn sách về các chữ số Hindu - cơ sở của kí hiệu số thập phân hiệnđại Ban đầu từ algorism được dùng để chỉ các quy tắc thực hiện các phéptính số học với các con số được viết trên hệ thập phân Sau đó, Algorismchuyển thành Algorithm vào thế kỷ XIX Với sự quan tâm ngày càng tăngđối với các máy tính, khái niệm thuật toán đã được định nghĩa một cáchhình thức chính xác thông qua máy Turing Tuy nhiên trong Luận văn nàykhái niệm thuật toán được hiểu trực quan như sau
Định nghĩa 1.1.1 Thuật toán để giải một bài toán (P) là một thủ tụcxác định, được chia ra thành các phép toán cơ bản, biến đổi một dãy cácdấu hiệu diễn tả các dữ liệu, không quan trọng ở chỗ thuộc bản chất gìcủa bài toán (P) thành một dãy các dấu hiệu đặc trưng cho các kết quảcủa (P)
Thuật toán có những đặc trưng sau:
• Đầu vào (Input): Một thuật toán nhận các giá trị đầu vào từ mộttập hợp đã được chỉ rõ (tập đã xác định)
5
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trang 8• Đầu ra (Output): Từ mỗi tập có các giá trị đầu vào, thuật toán sẽtạo ra các giá trị đầu ra tương ứng Các giá trị đầu ra chính là nghiệm(lời giải) của bài toán.
• Tính chính xác (Precision): Các bước của thuật toán phải được mô
tả chính xác Ở mỗi bước, các thao tác phải hết sức rõ ràng, khônggây nên sự nhập nhằng, lộn xộn, tùy tiện, đa định nghĩa Nói rõ hơn,trong cùng một điều kiện hai bộ xử lý cùng thực hiện một bước củathuật toán phải cho những kết quả như nhau
• Tính hữu hạn hay tính dừng (Finiteness): Sau một số hữu hạnbước thuật toán phải cho kết quả với mọi đầu vào
• Tính đơn trị (Uniqueness): Các kết quả trung gian của từng bướcthực hiện thuật toán được xác định một cách đơn trị, chỉ phụ thuộcđầu vào và các kết quả của các bước trước Với hai bộ dữ liệu giốngnhau cho trước làm input, thuật toán đơn định sẽ thi hành các mã lệnhgiống nhau và cho kết quả giống nhau, còn thuật toán ngẫu nhiên cóthể thực hiện theo những mã lệnh khác nhau và cho kết quả khácnhau
• Tính tổng quát (Generality): Thuật toán có thể giải bất kỳ một bàitoán nào trong lớp các bài toán đang xét Với thuật toán có đầu vào
là các bộ dữ liệu khác nhau trong một miền xác định thì có thể vậndụng được thuật toán
• Tính hiệu quả (The effectiveness): Hiệu quả về thời gian: Thuậttoán phải được thực hiện trong thời gian cho phép, điều này khác vớilời giải toán (chỉ cần chứng minh là kết thúc sau hữu hạn bước) Tínhhiệu quả về bộ nhớ: Kích thước của thuật toán phải đủ nhỏ để phùhợp với khả năng lưu trữ
Mô tả thuật toán: Có nhiều cách trình bày thuật toán, như dùng ngônngữ tự nhiên, ngôn ngữ lưu đồ (sơ đồ khối), ngôn ngữ lập trình, ngôn ngữphỏng trình Trong đề tài này các thuật toán được trình bày bằng ngônngữ tựa Pascal, trong đó cho phép vừa mô tả thuật toán bằng ngôn ngữthông thường, vừa sử dụng những cấu trúc lệnh tương tự như của ngônngữ lập trình Pascal
Trang 9Ví dụ 1.1.2 Mô tả thuật toán tìm phần tử lớn nhất trong một dãy hữuhạn các số nguyên.
a) Dùng ngôn ngữ tự nhiên để mô tả các bước cần thực hiện
1 Đặt giá trị cực đại tạm thời bằng số nguyên đầu tiên trong dãy (Cựcđại tạm thời sẽ là số nguyên lớn nhất đã được kiểm tra ở một giai đoạnnào đó của thủ tục.)
2 So sánh số nguyên tiếp sau với giá trị cực đại tạm thời, nếu nó lớn hơngiá trị cực đại tạm thời thì đặt cực đại tạm thời bằng số nguyên đó
3 Lặp lại bước trước nếu còn các số nguyên trong dãy
4 Dừng khi không còn số nguyên nào nữa trong dãy Cực đại tạm thời ởđiểm này chính là số nguyên lớn nhất của dãy
b) Thuật toán mô tả tựa Passcal
Input: Dãy gồm n số nguyên a1, a2, , an
Output: Max là số lớn nhất trong dãy
Procedure Max(a1, a2, , an : integer);
Thuật toán này trước hết gán số hạng đầu tiên a1 của dãy cho biến M ax.Vòng lặp for được dùng để kiểm tra lần lượt các số hạng của dãy Nếumột số hạng lớn hơn giá trị hiện thời của M ax thì nó được gán làm giátrị mới của M ax
Để đánh giá khả năng ứng dụng của chương trình ta cần phân tích tínhhiệu quả của thuật toán Phân tích thuật toán là quá trình tìm ra nhữngđánh giá về thời gian tính cũng như dung lượng bộ nhớ cần thiết để thựchiện thuật toán Để đo tính hiệu quả của một thuật toán đã cho, ta thiếtlập mối quan hệ giữa thời gian tiến hành thuật toán, được diễn tả bởi sốcác phép toán cơ bản với kích thước của bài toán đang xét, hoặc được diễn
tả bởi số các dấu hiệu cần thiết để mã hóa các dữ liệu của bài toán
Có ba câu hỏi được đặt ra khi đánh giá thuật toán:
7
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trang 101) Những phép toán cơ bản đang nói đến là những phép toán nào?2) Bộ mã hóa nào của các dữ liệu cho phép ta đo kích thước của bàitoán?
3) Những hàm nào liên kết kích thước với số các phép toán cơ bản mà
có thể giúp ta nói rằng một thuật toán là hiệu quả?
Có thể cho rằng việc trả lời câu hỏi thứ ba cho phép ta trả lời hai câu hỏiđầu
Thước đo hiệu quả của một thuật toán là thời gian mà máy tính sử dụng
để giải bài toán theo thuật toán đang xét, khi các giá trị đầu vào có mộtkích thước xác định Một thước đo thứ hai là dung lượng bộ nhớ đòi hỏi
để thực hiện thuật toán khi các giá trị đầu vào có kích thước xác định.Các vấn đề như thế liên quan đến độ phức tạp tính toán của một thuậttoán
Định nghĩa 1.1.3 Độ phức tạp tính toán của một thuật toán là lượngthời gian và bộ nhớ cần thiết để thực hiện thuật toán (ta gọi là thời giantính của thuật toán)
Vì việc xem xét độ phức tạp không gian gắn liền với các cấu trúc dữ liệuđặc biệt được dùng để thực hiện thuật toán nên ở đây ta sẽ tập trung xemxét độ phức tạp thời gian tính của thuật toán Chúng ta sẽ quan tâm đến:
• Thời gian tính tốt nhất của thuật toán với đầu vào kích thức n, là thờigian tối thiểu cần thiết để thực hiện thuật toán
• Thời gian tính tồi nhất của thuật toán với đầu vào kích thước n, làthời gian nhiều nhất cần thiết để thực hiện thuật toán
• Thời gian tính trung bình của thuật toán, là thời gian trung bình cầnthiết để thực hiện thuật toán, trên tập hữu hạn các đầu vào kích thướcn
Để tính toán thời gian tính của thuật toán ta sẽ đếm số câu lệnh mà nóphải thực hiện, hoặc trong một số trường hợp cụ thể đếm số các phép tính
số học, so sánh, gán, mà thuật toán đòi hỏi thực hiện Đây là tiêu chuẩnkhách quan để đánh giá tính hiệu quả của thuật toán
Ví dụ 1.1.4 Kiểm tra số nguyên dương n có phải là nguyên tố không?
Trang 11data error !!! can't not
read
Trang 12data error !!! can't not
read
Trang 13data error !!! can't not
read
Trang 14data error !!! can't not
read
Trang 15data error !!! can't not
read
Trang 17data error !!! can't not
read
Trang 18data error !!! can't not
read
Trang 19data error !!! can't not
read
Trang 20data error !!! can't not
read
Trang 21data error !!! can't not
read
Trang 22data error !!! can't not
read
data error !!! can't not
read
Trang 23data error !!! can't not
read
data error !!! can't not
read
Trang 24data error !!! can't not
read
data error !!! can't not
read
Trang 26data error !!! can't not
read
Trang 27data error !!! can't not
read