Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 68 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
68
Dung lượng
1,49 MB
Nội dung
TRẦN THỊ DƯƠNG VỀ CÁC BÀI TOÁN NP-C VÀ MỘT SỐ PHƯƠNG PHÁP GIẢI Chuyên ngành : Khoa học máy tính Mã số : 60480101 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Thái Nguyên - 2014 MỞ ĐẦU Ngày nay, với phát triển mạnh mẽ khoa học công nghệ, đặc biệt máy tính, người ta có khả giải nhiều tốn phức tạp Tuy nhiên, cịn vấn đề ―không giải được‖ cho dù kỹ thuật máy tính có phát triển có vấn đề xem ―quá phức tạp‖, vượt khả tính tốn thực tế q nhiều thời gian Việc nghiên cứu độ phức tạp thuật toán cho phép phân loại lớp toán theo mức độ phức tạp khác nhau, ranh giới lớp tốn giải lớp tốn khơng thể giải thời gian đa thức Trong lý thuyết độ phức tạp tính tốn, lớp NP - C (NP - đầy đủ) lớp toán định Một toán L NP - C nằm lớp NP (lời giải cho L kiểm chứng thời gian đa thức) NP Hard (mọi tốn NP quy L thời gian đa thức) Mặc dù lời giải cho tốn kiểm chứng nhanh chóng, chưa có cách tìm lời giải cách hiệu Thời gian thực thi tất thuật toán cho toán tăng nhanh theo kích thước tốn Vì trường hợp có kích thước tương đối lớn đòi hỏi thời gian hàng tỷ năm để giải Các toán lớp NP - C tập hợp toán NP - Hard NP Các toán lớp NP - C quan tâm nghiên cứu khả kiểm chứng nhanh chóng lời giải (NP) dường có liên hệ với khả tìm kiếm nhanh chóng lời giải (P) Hiện chưa biết tốn NP giải nhanh chóng hay khơng (đây toán P so với NP) Tuy nhiên, tốn NP - C giải nhanh chóng, theo định nghĩa NP - C, toán NP giải nhanh chóng Các toán NP- C xuất thường xuyên thực tế nên, chưa có giải thuật thời gian đa thức cho chúng, nhà nghiên cứu tìm cách giải chúng thơng qua phương pháp khác thuật toán xấp xỉ, thuật toán gần nhân tử hóa, v.v Việc tìm hiểu nghiên cứu phương pháp giải toán lớp NP- C toán mở khoa học máy tính Vì em chọn đề tài: Về toán NP-C số phương pháp giải để làm luận văn tốt nghiệp Cấu trúc luận văn gồm: Phần mở đầu, phần kết luận chương nội dung, cụ thể: Chương 1: Khái niệm lớp toán P, NP, NP-C Trong chương em giới thiệu chung lớp toán P, NP, NP – C, minh họa ví dụ cụ thể đưa mối quan hệ lớp P, NP NP-C Chương 2: Phương pháp tham phương pháp nhánh cận giải số toán NP-C Trong chương em trình bày phương pháp tham giải toán đồ thị phương pháp nhánh cận giải tốn Ba lơ, tốn tìm đường ngắn Chương 3: Chương trình thử nghiệm Chương thể chương trình cài đặt thuật tốn nhánh cận giải tốn Ba lơ Chƣơng 1: KHÁI NIỆM CÁC LỚP BÀI TOÁN P, NP, NP – C 1.1 Vài khái niệm lý thuyết độ phức tạp 1.1.1 Máy Turing tất định không tất định Máy Turing máy tính trừu tượng mơ tả q trình tính tốn máy tính Máy Turing có hai loại: Máy Turing tất định (Deterministic Turing Machine) Máy Turing không tất định (Nondeterministic Turing Machine) mô tả sau: Máy Turing tất định Mô tả cách làm việc máy: Máy Turing tất định gồm điều khiển hữu hạn trạng thái, đầu đọc ghi, băng vô hạn chia thành vng, lưu giữ ký hiệu thuộc tập hữu hạn ký hiệu Hình 1.1 Mơ tả máy tính Turing tất định Khởi đầu, xâu Input đặt băng, chuỗi ký hiệu có chiều dài hữu hạn chọn từ chữ Những cịn lại băng vô hạn theo hai bên phải trái, chứa ký hiệu đặc biệt ký hiệu trống ( diễn tả trạng thái khơng có ký hiệu nào) Có đầu đọc – ghi ln vào băng Ta nói máy Turing đọc – ghi Lúc khởi hoạt, đầu đọc – ghi nằm tận bên trái xâu Input Một bước hoạt động máy Turing quy định hàm phụ thuộc trạng thái điều khiển ký hiệu đọc chuyển vị Trong bước hoạt động, máy Turing sẽ: - Thay đổi trạng thái Trạng thái trạng thái - Ghi ký hiệu băng vào ô quét Ký hiệu băng thay ký hiệu băng có ô vuông Ký hiệu ghi ký hiệu - Di chuyển đầu đọc – ghi sang trái sang phải Một cách khơng hình thức, ta định nghĩa sau: Định nghĩa 1.1 Một máy Turing M tất định M = (Q, Σ, Γ, δ, q0, B, F) Trong thành phần M có ý nghĩa sau: Q: tập hữu hạn trạng thái điều khiển hữu hạn Σ: Tập hữu hạn chữ Γ: Tập đầy đủ kí hiệu băng; Σ ln tập Γ : Hàm chuyển vị, : Γ ×Q x {1, 0, 1}.Đối (q, X) trạng thái q kí hiệu băng X Giá trị (q, X) định nghĩa ba (p, Y, D) đó: p: trạng thái Y: Một ký hiệu thuộc Γ ghi vào ô quét, thay cho ký hiệu D: Một hai ký hiệu L (sang trái) R (sang phải) để hướng di chuyển đầu đọc – ghi q0: Trạng thái bắt đầu, phần tử Q trạng thái khởi đầu điều khiển B: ký tự trắng (blank) B Γ F: Tập kiểm hợp trạng thái kết thúc, tập Q - Các chức đặc trưng máy Turing tất định: Ngôn ngữ xác định máy Turing ngơn ngữ đốn nhận Cho M = ( Q, Σ, Γ , δ, q0, B, F) máy tính Turing Một hình trạng máy tính Turing M từ có dạng aqb, a Γ*, b Γ*, biểu thị nội dung: băng có từ ab, đầu đọc - ghi nhìn kí tự đầu b máy trạng thái q Hàm chuyển δ dho ta quy tắc chuyển đổi hình trạng Nếu máy tính Turing M bắt đầu làm việc với hình trạng q0w (trong w Z*) chuyển đổi liên tiếp sau số hữu hạn bước đến hình trạng kết thúc aFb trạng thái chấp nhận F, ta nói máy tính Turing M chấp nhận từ vào w Ta ký hiệu LM = {w\ w Z*, M chấp nhận w) Định nghĩa 1.2 Ngôn ngữ LM gọi ngôn ngữ xác định máy Turing hay cịn gọi ngơn ngữ tương ứng với máy tính Turing M Định nghĩa 1.3 Cho L ngôn ngữ bảng chữ Σ Ngôn ngữ L gọi đốn nhận máy tính Turing tồn M cho LM = L (tức tồn máy tính Turing cho ngơn ngữ tương ứng trùng với ngơn ngữ cho trước L) Ta nói máy tính Turing đốn nhận ngơn ngữ L Máy tính Turing khơng tất định Máy tính Turing tất định dạng đặc biệt máy tính Turing khơng tất định Hình 1.2 Mơ tả máy tính Turing khơng tất định Nhưng máy tính Turing khơng tất định có hàm chuyển vị cho trạng thái q ký hiệu đọc (q, X) ba {(q1, Y1, D1), (q2, Y2, D2),… (qk, Yk, Dk), k số nguyên hữu hạn Tại bước máy tính Turing khơng tất định chọn ba để thực bước chuyển Tuy nhiên khơng thể lấy trạng thái từ ba này, ký hiệu băng từ ba khác hướng lại từ ba khác So sánh hai định nghĩa ta thấy máy tính Turing khơng tất định định nghĩa cách hình thức giống máy tính Turing tất định có thêm mơđun đốn, nhằm để chọn bước thực thi tùy ý tập cho trước lệnh có khả xử lý song song đoán 1.1.2 Bài toán định ngôn ngữ tƣơng ứng Định nghĩa 1.4 Cho tập kiện (instance) câu hỏi (question) kiện thuộc tập Bài tốn định tốn mà câu trả lời ―Yes‖ hay ―No‖ (tương ứng với True/1 hay False/0) Sau vài ví dụ minh họa cho tốn định: Ví dụ 1.1: Bài tốn kiểm tra số nguyên tố Instance: số nguyên n > Question: n có phải số ngun tố hay khơng? Ví dụ 1.2: Bài toán HC ( Hamilton Cycle) Instance: đồ thị vô hướng G = (V, E) Question: đồ thị vô hướng G = (V, E) có chu trình Hamilton hay khơng? Về ngun tắc tốn biểu diễn lại toán định tương ứng Ngơn ngữ tƣơng ứng với tốn định: Giả sử cho toán định π với tập kiện I biểu diễn xâu bảng chữ Σ đó, với question Q tập I Ký hiệu L(π) tập xâu (thuộc Σ* ) biểu diễn kiện mà câu hỏi Q có trả lời “đúng” Khi ta nói ngơn ngữ L(π) ngơn ngữ tương ứng với tốn π 2.3.1 Thời gian tính máy tính Turing Cho trước tốn định π với tập kiện I biểu diễn xâu bảng chữ Σ đó, với câu hỏi Q tập I Ký hiệu L(π) tập xâu (thuộc Z* ) biểu diễn kiện instance cụ thể toán π Ta biết ngôn ngữ L(π) ngôn ngữ tương ứng với toán π Với instance I cụ thể, ta có input biểu diễn nó, mà ta ký hiệu x(I) Bây ta biểu diễn thời gian tính tốn π máy tính Turing cho trước Với input x(I) L(π), máy tính chạy lúc dừng trạng thái ―Yes/No‖ Thời gian tính x(I) số bước đoán nhận xâu x(I) máy máy dừng lại Thông thường số bước chạy máy phụ thuộc vào I, tất nhiên hàm số độ dài biểu diễn I, tức độ dài xâu x(I) Bằng cách ta định nghĩa: TM(n):= max{m: tồn xâu x Z* với |x| = n mà thời gian đoán nhận xâu m} Một máy tính Turing (hay chương trình tính tốn sở máy tính Turing) nói có thời gian tính tốn đa thức (gọi tắt thời gian đa thức) tồn đa thức p(n) cho số tự nhiên n ta có TM(n) ≤ p(n) Khi ta nói chương trình máy tính Turing có độ phức tạp tính tốn khơng vượt q p(n) 1.1.4 Lớp P, NP mối quan hệ lớp P lớp NP Định nghĩa l.5 ( Lớp P - Polynomial time) Ta gọi lớp P lớp toán định giải máy tính Turing tất định thời gian đa thức Một toán định π giải thời gian đa thức, ngơn ngữ L(π) tương ứng với thuộc lớp P, tức đốn nhận thời gian đa thức Như vậy, lớp P gần tương ứng với lớp toán định giải thời gian đa thức, mặt lý thuyết, xem lớp tốn dễ Ví dụ 1.3: Bài toán kiểm tra số nguyên tố Instance: số nguyên n > Question: n có phải số nguyên tố hay khơng? Ví dụ 1.4: Thuật tốn Kruskal tìm khung bé đồ thị có m nút e cạnh Instance: đồ thị có m nút e cạnh Question: tìm khung bé nhất? Định nghĩa l.6 ( Lớp NP - Nondeterministic Polynomial) Ta gọi lớp NP lớp toán định giải máy tính Turing khơng tất định khoảng thời gian đa thức Một cách không hình thức, nói ngơn ngữ L thuộc lớp NP có máy tính Turing khơng tất định độ phức tạp thời gian T(n) cho L = LM M cho nguyên liệu có chiều dài n khơng có dãy bước chuyển M vượt T(n) bước chuyển Ví dụ 1.5: Bài tốn chu trình Hamilton Instance: đồ thị vô hướng G = (V, E) Question: đồ thị vô hướng G = (V, E) có chu trình Hamilton hay khơng? Để nói mối quan hệ lớp P lớp NP ta thấy máy tính Turing tất định trường hợp đặc biệt máy tính Turing khơng tất định nên tốn thuộc lớp P thuộc lớp NP Tuy P NP hiển nhiên song ta chưa biết P = NP hay không, hầu hết nhà nghiên cứu tin P NP Từ ta có mơ hình mơ sau: NP P Hình 1.3 Mối quan hệ lớp P NP 1.1.5 Phép dẫn với thời gian đa thức (Polynomial Time Reduction) Giả sử ta muốn giải tốn π1 ( π1: I1 —> {Yes/ No}) mà ta có thuật tốn cho tốn π2 (trong π2: I2 —> {Yes/ No}, giả sử ta có hàm f: I1 —> I2 mà kiện x π1 sinh kiện f(x) cho π2 cho câu trả lời cho π1 x ―Yes‖ câu trả lời cho π2 f(x) ―Yes‖ ngược lại, ta sử dụng thuật tốn cho π2 để giải toán π1 Định nghĩa 1.7 Cho π1 π2 hai toán định, πi (Y) lớp Instance ứng với YES, πi (N) lớp Instance ứng với No 53 3.2 Sơ lƣợc chƣơng trình Demo Chương trình mơ thuật tốn nhánh cận giải tốn Ba lơ xây dựng dựa Framework Microsoft NET 4.5 ngơn ngữ lập trình C# sử dụng cơng cụ lập trình Visual Studio 2010 Visual C# 2010 Express phần mềm nằm dải sản phẩm Visual Studio 2010 Express với chức cung cấp công cụ cho người sử dụng Windows để tạo ứng dụng tùy chỉnh kèm thiết lập nâng cao Cùng với đơn giản, mạnh mẽ, an toàn nhiều cải tiến, Visual C# thiết kế để xây dựng ứng dụng khác chạy NET Framework cho hiệu Hình 3.2 Giới thiệu phần mềm Visual C# 2010 Express C# ngôn ngữ đơn giản: C Shap loại bỏ vài phức tạp ngôn ngữ Java c++, bao gồm việc loại bỏ macro, template, đa kế thừa, lớp sở ảo Chúng nguyên nhân gây 54 nhầm lẫn hay dẫn đến vấn đề cho người phát triển C++ Ngôn ngữ C# đơn giản dựa tảng C C++ C# giống C C++ diện mạo, cú pháp, biểu thức, toán tử chức khác lấy trực tiếp từ ngôn ngữ C C++, cải tiến để làm cho ngôn ngữ đơn giản hơn, loại bỏ dư thừa, hay thêm vào cú pháp thay đổi C# ngôn ngữ hƣớng đối tƣợng : Những đặc điểm ngơn ngữ hướng đối tượng đóng gói, kế thừa, đa hình C# hỗ trợ tất đặc tính C# ngơn ngữ mạnh mẽ mềm dẻo : C# sử dụng cho nhiều dự án khác tạo ứng dụng xử lý văn bản, ứng dụng đồ họa, tính, hay chí trình biên dịch cho ngôn ngữ khác C# ngôn ngữ sử dụng giới hạn từ khóa : Phần lớn từ khóa sử dụng để mơ tả thơng tin C# ngôn ngữ hƣớng module : Mã nguồn C# viết phần gọi lớp, lớp chứa phương thức thành viên Những lớp phương thức sử dụng lại ứng dụng hay chương trình khác Bằng cách truyền mẫu thơng tin đến lớp hay phương tạo mã nguồn dùng lại có hiệu C# ngôn ngữ phổ biến : C# sử dụng Microsoft Nhiều sản phẩm công ty đa chuyển đổi viết lại C# Bằng cách sử dụng ngôn ngữ Microsoft xác nhận khả C# cần thiết cho người lập trình 55 Ngồi hai lý ngơn ngữ C# trở nên phổ biến đặc tính ngôn ngữ đề cập mục trước như: đơn giản, hướng đối tượng, mạnh mẽ 3.3 Chƣơng trình Demo Giao diện chương trình 56 Hình 3.3 Giao diện chương trình tốn Ba lơ Chạy thử nghiệm chương trình Demo Chương trình chạy thử nghiệm với 18 liệu từ số lượng đồ vật n = số lượng đồ vật n = 40 cho kết xác Đối với liệu với số lượng đồ vật n nhỏ, thời gian chạy thuật toán tương đối nhanh.Tuy nhiên, tùy thuộc vào liệu đầu vào ( trọng lượng giá trị đồ vật) mà thời gian chạy thuật tốn có khác 57 KẾT LUẬN Sau thời gian nghiên cứu hoàn thành luận văn phương pháp phân tích tổng hợp tài liệu, luận văn đưa sở lý thuyết chung toán lớp NP-C, số phương pháp giải tốn lớp NP-C cài đặt chương trình thử nghiệm giải tốn ba lơ phương pháp nhánh cận Luận văn thực tất nội dung đạt mục tiêu đề đề cương duyệt Các kết đạt bao gồm: Giới thiệu lớp tốn P, NP, NP – C: việc tìm hiểu, nghiên cứu khái niệm lớp toán P, NP NP-C minh họa ví dụ để làm rõ dấu hiệu đặc trưng khái niệm nhằm làm bật khác toán NP-C lớp toán P, NP Tìm hiểu số thuật tốn xấp xỉ để giải toán lớp NP-C: Trong khoa học máy tính việc tìm nghiệm tốn NP-C với kích cỡ đầu vào n tương đối lớn khó khăn độ phức tạp nói hàm mũ Vì thay cho tìm lời giải việc tìm nghiệm gần mà chấp nhận thuật toán xấp xỉ Giới thiệu phương pháp tham phương pháp nhánh cận giải số toán NP-C: Sử dụng phương pháp tham giải toán đồ thị phương pháp nhánh cận giải tốn ba lơ, tốn tìm đường ngắn nhất, toán mở khoa học máy tính nên có ý nghĩa khoa học 58 Xây dựng chương trình cụ thể cho việc giải tốn ba lơ theo phương pháp nhánh cận: Dựa kiến thức mơn học Các phương pháp tốn học cơng nghệ thơng tin, tìm hiểu rõ tốn ba lô phương pháp nhánh cận để xây dựng chương trình giải tốn ba lơ theo phương pháp nhánh cận ngơn ngữ lập trình Visual C# 2010 Mặc dù tác giả có nhiều nỗ lực nghiên cứu thực đề tài, thời gian trình độ có hạn, chắn luận văn khơng tránh khỏi nhiều thiếu sót Tác giả hy vọng việc tìm hiểu tốn lớp NPC số phương pháp giải đề tài tiếp tục nhận nhiều quan tâm nghiên cứu phát triển mạnh mẽ thời gian tới./ 59 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Đặng Quang Á,(2009), Tập giảng Các phương pháp toán học công nghệ thông tin [2] Nguyễn Văn Ba (2006), Lý thuyết ngơn ngữ tính tốn, Nhà XB Đại hc quc gia H Ni [3] Nguyễn Hữu Điển (2006), Một số vấn đề thuật toán, Nhà XB Giáo dơc, Hµ Néi [4] Lê Mạnh Thạnh (1998) Nhập mơn ngơn ngữ hình thức Ơtơmat hữu hạn, NXB Giáo dục, Đà Nẵng Tiếng Anh [5] Du, Ding-Zhu; Ko, Ker-I (2000), Theory of Computational Complexity, John Wiley & Sons, ISBN 978-0-471-34506-0 [6] Garey M.R Johnson, DS (1979) ―Computers and Intractability: A Guide to the Theory of NP-Completeness" New York:W H Freeman [7] M Dorigo, Optimization (1992), Learning and Natural Algorithms: Elitist Ant System [8] Leiserson, and Rivest (1990), Introduction to Algorithms Cormen, Chapter 16 "Greedy Algorithms" p 329 [9] Papadimitriou, Christos (1994), Computational Complexity , Addison Wesley, ISBN 0201530821 [10] Sanjeev Arora, Boaz Barak, Sanjeev; Barak, Boaz (2009), Computational Complexity: A Modern Approach, Cambridge, ISBN 978-0-521-42426-4 60 [11] Sipser, Michael (2006), Introduction to the Theory of Computation, USA: Thomson Course Technology, ISBN 0534950973 [12] Van Leeuwen, Jan (1990), Handbook of theoretical computer science (vol A): algorithms and complexity, MIT Press, ISBN 978-0-444-88071-0 Website [13] http://en.wikipedia.org/wiki/NP-complete [14] http://en.wikipedia.org/wiki/List_of_NP-complete_problems [15] http://www.seas.gwu.edu/~ayoussef/cs212/npcomplete.html 61 PHỤ LỤC Code tốn Ba lơ Lớp Đồ Vật namespace BaLo { public class DoVat_Info { #region Attribute private System.Int32 _TrongLuong; private System.String _TenDoVat; private System.Int32 _GiaTri; #endregion #region Contructor public DoVat_Info() { _TrongLuong = 0; _TenDoVat = String.Empty; _GiaTri = 0; } #endregion #region propertiese public System.Int32 TrongLuong { get { return _TrongLuong; } set { _TrongLuong = value; 62 } } public System.String TenDoVat { get { return _TenDoVat; } set { _TenDoVat = value; } } public System.Int32 GiaTri { get { return _GiaTri; } set { _GiaTri = value; } } #endregion } } Chương trình using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; 63 namespace BaLo { public partial class BaLo : Form { public BaLo() { InitializeComponent(); } static int max = 100; static int[ ] v, w; static bool[ ] daxet; static int vi, wi, vmax; static int n, W; static int[ ] x; static int[ ] pa; private void btn_OK_Click(object sender, EventArgs e) { ArrayList ds = new ArrayList(); int SoDoVat = int.Parse(txt_SL.Text); for (int i = 1; i