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

Tìm hiểu độ phức tạp một số thuật toán

44 285 0

Đ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

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - Nguyễn Thế Quyền TÌM HIỂU ĐỘ PHỨC TẠP MỘT SỐ THUẬT TOÁN LUẬN VĂN THẠC SĨ KHOA HỌC Hà Nội - 2013 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - Nguyễn Thế Quyền TÌM HIỂU ĐỘ PHỨC TẠP MỘT SỐ THUẬTTOÁN Chuyên ngành: Bảo đảm toán học cho máy tính và hệ thống tính toán Mã số: 60.46.35 LUẬN VĂN THẠC SĨ KHOA HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC PGS.TS NGUYỄN HỮU NGỰ Hà Nội - 2013 MỤC LỤC MỞ ĐẦU CHƯƠNG KIẾN THỨC CHUẨN BỊ 1.1 Máy Turing .4 1.1.1 Máy Turing 1.1.2 Máy Turing tất định .5 1.1.3 Máy Turing không tất định 1.2 Khái niệm thuật toán .8 1.2.1 Khái niệm thuật toán 1.2.2 Ví dụ thuật toán 1.2.3 Luận đề Church-Turing .10 1.3 Độ phức tạp thuật toán 11 1.3.1 Độ phức tạp thời gian 11 1.3.2 Ví dụ cách tính độ phức tạp 12 CHƯƠNG BÀI TOÁN VÀ ĐỘ PHỨC TẠP CỦA BÀI TOÁN .14 2.1 Bài toán là gì? .14 2.2 Một số bài toán quan trọng 15 2.3 Độ phức tạp bài toán 20 CHƯƠNG PHÂN LỚP CÁC BÀI TOÁN THEO ĐỘ PHỨC TẠP 21 3.1 Lớp bài toán P, NP và mối quan hệ lớp P và lớp NP 21 3.1.1 Lớp P 21 3.1.2 Lớp NP .21 3.1.3 Mối quan hệ lớp P và NP 21 3.2 Lớp bài toán NPC 21 3.2.1 Phép dẫn với thời gian đa thức 21 3.2.2 Lớp bài toán NPC .22 3.2.3 Mối quan hệ lớp bài toán P, NP và NPC 22 3.2.4 Một số bài toán lớp NPC 23 1) Bài toán SAT Định lý Cook .23 2) Bài toán 3SATIFIABILITY (3SAT) 30 3) Bài toán 3-DIMENSIONAL MATCHING (3DM) .33 4) Bài toán VERTEX COVER (VC) .37 5) Bài toán CLIQUE 39 6) Bài toán HAMILTON CIRCUIL (HC) .39 7) Bài toán PARTITION 39 8) Bài toán TRAVELING SALEMAN (TSP) 39 KẾT LUẬN .41 TÀI LIỆU THAM KHẢO 42 MỞ ĐẦU Lý thuyết độ phức tạp là một lĩnh vực trung tâm khoa học máy tính với kết liên quan chặt chẽ với phát triển và sử dụng thuật toán Nghiên cứu lý thuyết độ phức tạp giúp hiểu biết sâu sắc và khám phá ranh giới vấn để “có thể” tính toán với nguồn tài nguyên hợp lý Trong luận văn này, trước hết tìm hiểu một số khái niệm quan trọng lý thuyết thuật toán thuật toán và độ phức tạp thuật toán Trên sở đó, bước đầu tìm hiểu một số khái niệm quan trọng lý thuyết độ phức tạp khái niệm bài toán, độ phức tạp bài toán Cuối là tìm hiểu lớp phức tạp bài toán và mối quan hệ lớp phức tạp Trong đặc biệt quan tâm đến lớp phức tạp NP-đầy đủ Nội dung luận văn bao gồm ba chương: Chương 1: Trình bày tóm tắt kiến thức và trọng tâm lý thuyết thuật toán máy Turing đơn định, máy Turing không đơn định, thuật toán, độ phức tạp thuật toán Chương 2: Gồm có ba phần trình bày khái niệm bài toán, danh sách bài toán quan trọng và khái niệm độ phức tạp bài toán Chương 3: Gồm có hai phần trình bày lớp bài toán P, NP và lớp bài toán NP-đầy đủ Để hoàn thành luận văn này, đã nhận giúp đỡ tận tình thầy hướng dẫn – PGS.TS Nguyễn Hữu Ngự và bảo góp ý thầy cô Bộ môn Tin học, Khoa Toán – Cơ – Tin học và bạn đồng nghiệp Nhân đây, xin cảm ơn thầy cô và bạn đồng nghiệp đã giúp đỡ trình làm luận văn CHƯƠNG KIẾN THỨC CHUẨN BỊ Trước nói thuật toán, hãy xem xét một mô hình tính toán thể tốt thuật toán 1.1 Máy Turing (Turing machine) 1.1.1 Máy Turing Gồm có: 1) Tập trạng thái hữu hạn 2) Băng vô hạn hai phía (về lý thuyết kéo dài tuỳ ý hai phía) 3) Bảng tín hiệu vào, bảng tín hiệu băng và một đầu đọc-ghi 4) Bảng chuyển trạng thái q ↓ B B B B a1 a2 an B B B Một bước làm việc máy gồm: - Đầu đọc-ghi đọc tín hiệu băng - Căn vào trạng thái và tín hiệu đọc băng, đầu đọc-ghi ghi một tín hiệu băng, dịch chuyển sang phải sang trái một ô và chuyển sang một trạng thái nào Quy ước máy bắt đầu làm việc trạng thái là trạng thái đầu máy, với input hữu hạn băng, đầu đọc-ghi nằm ký tự bên trái input Các kết trung gian tính toán lưu băng tổ chức lưu vào trạng thái (nhưng ý là số trạng thái một máy phải hữu hạn) 1.1.2 Máy Turing tất định (DTM) Có thể định nghĩa một cách hình thức một máy Turing tất định sau: là một bộ: M = đó: - Γ: là bảng tín hiệu băng (hữu hạn) - Σ: là bảng tín hiệu vào (hữu hạn), Σ ⊂ Γ - Q: là tập trạng thái (trong) (hữu hạn) - F: là hàm chuyển F: Q x Γ → Q x Γ x {L,R} - q0: trạng thái ban đầu (q0 ∈ Q) - t1: trạng thái kết thúc (t1 ∈ Q) - B: ký tự trắng, B ∈ Γ, B ∉ Σ Ý nghĩa: - Σ là tín hiệu vào để ghi input - Γ là tín hiệu đọc và ghi băng Hàm chuyển F(q, a) = (q', a', D) cho bảng sau: a q (q', a', D) - Ban đầu tín hiệu băng là B, băng kéo dài vô hạn hai chiều: trái và phải Xâu a1a2 qai ak gọi là một hình trạng máy, a k∈ Γ, q∈Q, có nghĩa là đầu đọc-ghi đọc ô thứ i, tín hiệu đọc là Tại bước, máy trạng thái q, đầu đọc-ghi đọc tín hiệu a i ô băng, hình trạng máy có dạng a1a2 ai-1qai ak Theo hàm chuyển F(q, ai) = (q', c, D), máy chuyển sang trạng thái q', ghi c lên băng (thay cho ai), đầu đọc-ghi chuyển sang phải hay sang trái một ô tùy theo D là R L Ta nói máy M chuyển từ hình trạng: H = a1a2 ai-1qai ak sang hình trạng: H' = a1a2 q'ai-1cai+1 ak D = L H' = a1a2 ai-1cq'ai+1 ak D = R Ký hiệu H − H' Máy làm việc bước gặp hình trạng mà hàm chuyển F(s,a) không xác định gặp trạng thái kết thúc t1 Xâu x (input) bảng tín hiệu Σ (tức là x ∈ Σ*) gọi là đoán nhận máy M tồn dãy hình trạng H0, H1, , Hm cho: H0 − H1 − − Hm H0 là hình trạng ban đầu, input x ghi băng, đầu đọc-ghi nhìn vào ký tự input, trạng thái máy là q0, tức là: H0 = q0a1a2 ai-1ai an với x = a1a2 ai-1ai an Hm có trạng thái là t1 Tập N xâu (ngôn ngữ Σ) thuộc Σ* gọi là đoán nhận máy M N = {x | x∈Σ*, x đoán nhận máy M} Các bài toán có nhiều loại: - Đoán nhận một tính chất input - Tính toán một giá trị - Chú ý: Hàm chuyển F không xác định khắp nơi Máy dừng gặp trạng thái t1 kết thúc (cho trả lời "yes") dừng trạng thái khác t (cho trả lời "no") gặp bộ (s, a) F(s, a) không xác định (cũng cho trả lời "no") Tuy nhiên làm cho hàm chuyển F trở thành xác định khắp nơi thêm một trạng thái kết thúc phủ định qp, và với bộ (s, a) F(s, a) không xác định cho máy chuyển sang trạng thái qp F(s, a) = (qp, , ) Nếu khác ngầm định bảng tín hiệu vào là Σ = {0,1}, và chủ yếu ta xét ví dụ bài toán đoán nhận Ký hiệu q0 là trạng thái đầu, t1 là trạng thái kết thúc khẳng định Ví dụ: Máy Turing đoán nhận ngôn ngữ {x | x có độ dài chẵn} q0 q1 (q1, 0, R) (q0, 0, R) (q1, 0, R) (q0, 0, R) B (t1, B, ' ') - Với input 010110 ta có dãy hình trạng: (q0)010110 − 0(q1)10110 − 01(q0)0110 − 010(q1)110 − 0101(q0)10 − 01011(q1)0 − 010110(q0) − 010110(t1) trạng thái cuối là trạng thái kết thúc đoán nhận t1 1.1.3 Máy Turing không tất định (NTDM) Định nghĩa máy Turing tất định, hàm chuyển F là hàm đa trị nghĩa là F: Q x Σ → 2Q x Γ x {L,R} Tại bước, chuyển sang bước sau một khả tùy theo hàm chuyển F Nếu có một nhánh đoán nhận input x xem máy đoán nhận input Giả sử F(s, a) = {(si1, ai1, Di1), (si2, ai2, Di2), , (sim, aim, Dim)} là một tập (có thể rỗng) Với hình trạng H với trạng thái s và tín hiệu a đọc máy chuyển đến một hình trạng: H − Hi1, H − Hi2, , H − Him Hik có trạng thái sik và tín hiệu ghi là aik Có thể biểu diễn bước làm việc máy hàng đợi Ví dụ: (q0,1,R) q0 B (q2,0,L) (q0,1,R) (t1,' ',' ') (q1,1,R) q1 q2 Với w = 010 (q0)010 1(q0)10 1(q1)10 111(q0) 111(q1)B (t1) (q2)100 1(q0)00 11(q0)0 11(q1)0 1.2 Khái niệm thuật toán (algorithm) Bài toán xử lý thông tin: Input → Công cụ → Output Với liệu vào (input) công cụ tính toán và cho kết theo yêu cầu bài toán Nói chung ta phân biệt một số loại bài toán: - Những bài toán đoán nhận một tính chất (xét số nguyên n có phải nguyên tố hay không, ) - Những bài toán tính giá trị một hàm - Những bài toán tìm một lời giải (tìm đường đồ thị, tìm chu trình Hamilton, ) Để giải bài toán cần thuật toán Thuật toán là công cụ xử lý thông tin 1.2.1 Khái niệm Một cách không hình thức thuật toán là việc mô tả một cách xác trình thực đối tượng để nhằm đạt một kết nào theo một yêu cầu cho trước Cần ý đặc trưng hữu hạn thuật toán: - Đối tượng hữu hạn, thao tác hữu hạn { Q[i, j ] , Q[ i, j '] }, ≤ i ≤ p(n), ≤ j < j’ ≤ r G2 {H[i,-p(n)], H[i,-p(n)+1], , H[i,p(n)+1]}, ≤ i ≤ p(n) { H [i, j ] , H [ i, j '] }, ≤ i ≤ p(n), -p(n) ≤ j < j’ ≤ p(n)+1 G3 {S[i,j,0], S[i,j,1], , S[i,j,v]}, ≤ i ≤ p(n), -p(n) ≤ j≤ p(n)+1 { S [i, j, k ] , S [ i, j , k '] }, ≤ i ≤ p(n), -p(n) ≤ j ≤ p(n)+1, ≤ k≤ k’≤ v G4 {Q[0,0]}, {H[0,1]}, {S[0,0,0]}, {S[0,1,k1]}, {S[0,2,k2]}, …, {S[0,n,kn]}, {S[0,n+1,0]}, {S[0,n+2,0]}, …, {S[0,p(n)+1,0]} x = s k s k s k G5 n {Q[p(n),1]} Hình Năm nhóm mệnh đề fL(x) Nhóm lại G6 đảm bảo chuyển đổi từ một cấu hình sang cấu hình phù hợp với hàm chuyển δ cho M Với bộ (i, j, k, l), ≤ i < p(n), -p(n) ≤ j ≤ p(n)+1, ≤ k ≤ r, và ≤ l ≤ v, nhóm này gồm có mệnh đề sau: { H [i, j ] , Q[ i, k ] ], S [i, j , l ] , H[i+1, j+ ∆]} { H [i, j ] , Q[i, k ] ], S [i, j , l ] , Q[i+1, k’]} { H [i, j ] , Q[i, k ] ], S [i, j , l ] , S[i+1, j,l’]} qk ∈ Q-{qy, qN} giá trị ∆, k’, l’ thoả mãn δ(qk, sl) = (qk’, sl’, ∆), và qk ∈{qY, qN} ∆ = 0, k’ = k và l’ = l Không khó để thấy 6(p(n))(p(n) + 1)(r + 1)(v + 1) mệnh đề này áp đặt hạn chế mong muốn phép gán thoả Vì vậy, ta đã cho thấy cách xây dựng nhóm mệnh đề từ G tới G6 thực nhiệm vụ nói Nếu x ∈ L có một tính toán chấp nhận M x 28 có chiều dài p(n) hơn, và tính toán này bắt buộc một phép gán phải thoả mãn tất mệnh đề C = G1 ∪ G2 ∪ G3 ∪ G4 ∪ G5 ∪ G6 Ngược lại, việc xây dựng C là một phép gán thoả cho C phải tương ứng với một tính toán chấp nhận M x Nó kéo theo là f L(x) có một phép gán thỏa và x ∈ L Tất cần chứng tỏ là ngôn ngữ L cố định, f L(x) xây dựng từ x thời gian bị chặn một hàm đa thức n = |x| Cho trước L, chọn một chương trình NDTM nào là M đoán nhận L thời gian bị chặn một đa thức p Giới hạn đa thức việc tính toán tập biến U và tập mệnh đề C suy trực tiếp một chứng tỏ Length[fL(x)] là bị chặn một hàm đa thức n, Length[I] là độ dài một chuỗi mã hóa thể I theo một lược đồ mã hoá hợp lý Hàm Length “hợp lý” cho SAT cho trước, chẳng hạn |U|.|C| Không mệnh đề nào chứa nhiều 2.| U| literal (đó là tổng số literal), và số ký hiệu cần thiết để mô tả literal giới hạn đa thức Vì r và v cố định trước và thêm vào số vào |U| và |C|, có |U| = O(p(n) 2) và |C| = O(p(n)2) Do đó, Length[fL(x)] = |U|.|C| = O(p(n)4), và giới hạn một hàm đa thức n mong muốn Vì vậy, biến đổi fL tính một thuật toán thời gian đa thức và ta kết luận với L ∈ NP, fL là một biến đổi đa thức từ L SAT Vậy SAT là NPđầy đủ 29 2) Bài toán 3-SATIFIABILITY (3SAT) Bài toán 3SAT là một biến thể hạn chế bài toán SAT mệnh đề chứa ba literal Cấu trúc đơn giản 3SAT làm cho trở thành một bài toán sử dụng rộng rãi để chứng minh kết NP-đầy đủ khác - Đầu vào: Cho tập mệnh đề C = {c1, c2, , cm} dựa một tập hữu hạn biến U cho |ci| = với ≤ i ≤ m - Câu hỏi: Có tồn một phép gán cho U mà thỏa mãn tất mệnh đề C? Định lý 3SAT là NP-đầy đủ i) 3SAT ∈ NP Dễ dàng thấy 3SAT thuộc lớp NP thuật toán không tất định cần đoán một phép gán cho biến và kiểm tra thời gian đa thức phép gán thỏa tất mệnh đề có literal đã cho không ii) Ta xây dựng một phép biến đổi SAT thành 3SAT Giả sử ta có một đầu vào SAT là I = (U,C) với U = {u 1, , un} là tập biến và C = {c1, , cm} là tập mệnh đề U Chúng ta xây dựng một phép biến đổi biến đầu vào bài toán SAT là I thành đầu vào bài toán 3SAT là I’ = (U ’,C’) Tập C’ chứa mệnh đề có literal tập biến U’, cho C’ là thỏa và C là thỏa Việc xây dựng C' đơn giản là cần thay mệnh đề riêng biệt c j thuộc C một tập mệnh đề C j’ “tương đương” thuộc C’, dựa biến U và một vài biến bổ sung thêm Uj’ sử dụng mệnh đề Cj’ Ta biểu diễn điều này sau: m  U ' = U ∪ UU 'j   j =1  và 30 m C ' = UC 'j j =1 Vì thế, ta cần cách xây dựng Cj’ và Uj’ từ cj Giả sử cj = {z1, z2, , zk} với zi là tất literal dẫn xuất từ biến tập U Cách mà Cj' và Uj' xây dựng phụ thuộc vào giá trị k Trường hợp 1: k = 1: Uj' = { yj1, yj2} Cj' = {{z1, yj1, yj2}, {z1, yj1, y j }, {z1, y j , yj2}, {z1, y j , y j }} Trường hợp 2: k = 2: Uj' = {yj1} Cj' = {{z1, z2, yj1}, {z1, z2, y j }} Trường hợp 3: k = 3: Uj' = ∅; Cj' = {{cj}} Trường hợp 4: k > 3: Uj' = {yji : ≤ i ≤ k-3} i Cj' = {{z1, z2, yj1)}} ∪ {{ y j , zi+2, yji+1: ≤ i ≤ k-4}} k −3 ∪ {{ y j , zk-1, zk}} Tiếp theo, để chứng minh phép biến đổi là đắn, phải chứng tỏ tập C’ thỏa và tập C thỏa - C thỏa C’ thỏa được: Giả sử cho C thỏa phép gán t: U  {T,F} Ta chứng tỏ t mở rộng thành phép gán t ’: U’  {T,F} thỏa cho C’ Bởi biến U ’-U phân chia vào tập U j’ và biến Uj’ xuất mệnh đề thuộc Cj’, nên ta cần phép gán t mở rộng thành tập U j’ mệnh đề Cj’ nào, và trường hợp ta cần xác nhận lại tất mệnh đề tập C j’ tương ứng là thỏa Chúng ta làm sau: Với k ≤ 2: mệnh đề Cj’ thỏa t Vì mở rộng t tùy ý cho Uj’ (cho t’(y) = T với y ∈ Uj’) 31 Với k = 3: Uj’ là rỗng và mệnh đề Cj’ là thỏa t Với k > 3: Vì t là một phép gán thỏa cho C, nên phải có một số nguyên l cho literal zl là True t • Nếu z1 z2 là True (tức là l = l = 2) ta gán giá trị biến bổ sung là “False” (t’(yji) = F với ≤ i ≤ k-3) • Nếu zk-1 zk là True (tức là l = k-1 k) ta gán giá trị biến bổ sung là “True” (t’(yji) = T với ≤ i ≤ k-3) • Các trường hợp lại, ta gán giá trị t ’(yji) = T với ≤ i ≤ l-2 và gán t'(yji) = F với l-1 ≤ i ≤ k-3 Dễ dàng để xác định trường hợp lựa chọn này đảm bảo tất mệnh đề Cj’ thỏa được, tất mệnh đề C’ thỏa theo t’ - Ngược lại, t’ là một phép gán thỏa cho C’, dễ dàng để xác định thu hẹp t’ cho biến U là một phép gán thỏa cho C Do C ’ là thỏa và C thỏa iii) Phép biến đổi này thực thời gian đa thức Có: |U| = n; |C| = m Trường hợp 1: tạo mệnh đề Trường hợp 2: tạo mệnh đề Trường hợp 3: tạo mệnh đề Trường hợp 4: tạo k-1 mệnh đề mới, với k là số lượng literal mệnh đề ∈ I Do có tổng cộng m*(k-1) mệnh đề I’ Vì k ≤ 2n nên có nhiều 2mn mệnh đề I’ Vì số lượng mệnh đề C’ bị giới hạn hàm đa thức 2mn Do đó, kích thước thể 3SAT bị giới hạn một hàm đa thức với kích thước thể SAT Không khó để xác định là một phép biến đổi đa thức 32 3) Bài toán 3-DIMENSIONAL MATCHING (3DM) Bài toán đối sánh chiều xuất phát từ bài toán cổ "Bài toán hôn nhân": Cho n người đàn ông và n phụ nữ, tất chưa lập gia đình với một danh sách tất cặp nam nữ sẵn sàng hôn nhân, liệu để xếp n cuộc hôn nhân cho tránh chế độ đa thê (đa phu) và tất người nhận một người chồng (vợ) chấp nhận Tương tự, bài toán 3DM tập W, X, và Y tương ứng với giới tính khác nhau, và cặp ba tập M tương ứng với cuộc hôn nhân người mà chấp nhận với người tham gia Nhận xét bài toán 3DM là NP-đầy đủ, bài toán hôn nhân thông thường giải thời gian đa thức Bài toán 3DM mô tả sau: - Đầu vào: Một tập M ⊆ W x X x Y; với W, X, và Y là tập rời và có q phần tử - Câu hỏi: M có chứa một đối sánh là một tập M ’ ⊆ M cho |M’| = q và hai phần tử nào M’ có chung thành phần với nhau? Định lý 3DM là NP-đầy đủ Chứng minh: i) 3DM ∈ NP Dễ dàng thấy 3DM thuộc NP, thuật toán không tất định cần dự đoán một tập từ tập M có q = |W| = |X| = |Y| bộ ba và kiểm tra thời gian đa thức hai bộ ba nào có chung thành phần ii) Chúng ta xây dựng phép biến đổi 3SAT 3DM Cho một đầu vào 3SAT là I = (U,C), với U = {u1, u2, , un} là tập biến và C = {c1, c2, , cm) là tập mệnh đề Chúng ta phải xây dựng một phép biến đổi chuyển kiện thành kiện tương ứng bài toán 3DM gồm tập rời W, X, và Y với |W| = |X| = |Y| và tập M ⊆ W x X x Y cho M có chứa một đối sánh và C là thỏa 33 Tập M chứa bộ ba có thứ tự phân chia vào ba lớp (thành phần) riêng biệt, và nhóm lại theo chức dự định chúng là: “truth-setting and fan-out”, “satisfaction testing”, “garbage collection” Thành phần TSFO (truth-setting and fan-out) Mỗi thành phần TSFO tương ứng với một biến ui ∈ U, và cấu trúc phụ thuộc vào tổng số m mệnh đề C Trong đó, thành phần TSFO cho biến ui bao gồm phần tử "bên trong" ai[j] ∈ X và bi[j] ∈ Y, l ≤ j ≤ m, phần tử này không xuất bộ ba nào bên ngoài thành phần này, và phần tử “bên ngoài" ui[j], u i [ j ] ∈ W, ≤ j ≤ m, phần tử này xuất bộ ba khác Các bộ ba tạo nên thành phần này chia thành tập sau: Tit = {( u i [ j ] , ai[j], bi[j]): ≤ j ≤ m} Tif = {( ui[j], ai[j+1], bi[j]): ≤ j < m} ∪ {(ui[m], ai[1], bi[m])} Vì phần tử bên {ai[j], bi[j]): ≤ j ≤ m } không xuất bộ ba nào bên ngoài tập Ti = Tit ∪ Tfi, nên dễ dàng thấy đối sánh M’ nào bao gồm xác m bộ ba từ tập Ti (hoặc tất bộ ba thuộc Tit , tất thuộc tập Tfi ) Do coi thành phần Ti là một bắt buộc một đối sánh chọn lựa thiết lập ui true hay false Như vậy, một đối sánh M' ⊆ M xác định một phép gán cho U, với biến ui thiết lập true và M’ ∩ Ti = Tit Thành phần ST (satisfaction testing) Mỗi thành phần kiểm tra tính thỏa M tương ứng với một mệnh đề cj∈ C Nó bao gồm hai phần tử "bên trong" s1[j]∈ X và s2[j]∈Y, và phần tử bên j ngoài {ui[j], u i : ≤ i ≤ n} xác định literal xuất mệnh đề cj Tập bộ ba tạo nên thành phần này định nghĩa sau: j Cj = {(ui[j], s1[j], s2[j]): ui ∈ cj} ∪ {( u i , s1[j], s2[j]): u i ∈ cj} 34 Vì vậy, đối sánh M' ⊆ M nào phải chứa xác một bộ ba từ tập Cj Tuy nhiên, điều này thực ui[j] (hoặc u i [ j ] ) literal ui ∈cj ( u i ∈ cj ) không xuất bộ ba thuộc Ti ∩ M’, nghĩa là và phép gán xác định M là thoả mệnh đề cj Thành phần GC (garbage collection) Việc xây dựng hoàn thành một thành phần GC lớn là G, gồm có phần tử bên g1[k]∈ X và g2[k] ∈ Y, ≤ k ≤ m(n-1), và phần tử bên ngoài ui[j] và u i [ j ] từ W Nó là tập bộ ba sau: G = {(ui[j], g1[k], g2[k]),( u i [ j ] , g1[k], g2[k]): ≤ k ≤ m(n-1), ≤ i ≤ n, ≤ j ≤ m} Như cặp g1[k], g2[k] phải ghép với ui[j] u i [ j ] , và không xuất bộ ba nào thuộc M’ - G Như G đơn đảm bảo rằng, nào một tập M - G thỏa mãn tất ràng buộc thành phần TSFO, tập mở rộng thành một đối sánh cho M Tóm lại, thiết lập tập W, X, Y và M sau: W = {(ui[j], u i [ j ] ): 1≤ i ≤ n,1 ≤ j ≤ m} X = A ∪ S ∪ G1 đó: A = {ai[j]: 1≤ i ≤ n,1 ≤ j ≤ m} S1 = {s1[j]: ≤ j ≤ m} G1 = {g1[j]: ≤ j ≤ m(n-1)} Y = B ∪ S2 ∪ G2 đó: B = {ai[j]: 1≤ i ≤ n,1 ≤ j ≤ m} 35 S2 = {s1[j]: ≤ j ≤ m} G2 = {g1[j]: ≤ j ≤ m(n-1)} và  n  i =1    m  M = UTi  ∪ UC j  ∪ G  j =1  Chú ý bộ ba thuộc M là một phần tử thuộc W x X x Y theo yêu cầu Hơn nữa, M chứa 2mn + 3m + 2m2n(n-1) bộ ba, nên dễ dàng thấy M xây dựng thời gian đa thức iii) Bây ta phải phép biến đổi là đắn việc chứng minh M chứa một đối sánh M’ và C thỏa - Chứng minh C thỏa M chứa một đối sánh M’ nào Cho t: U→{T,F} là phép gán thỏa cho C Chúng ta xây dựng một đối sánh M' ⊆ M sau: Đối với mệnh đề cj ∈ C, lấy zj ∈ {ui, u i : ≤ i ≤ n} ∩ cj là một literal thiết lập giá trị true t (phải tồn t thỏa cj) Một tập M’ có cấu trúc sau    M =  UTi t  ∪  UTi f  t ( ui )=T   t ( ui ) = F  m   ∪ U{ z j [ j ], s1 [ j ], s [ j ]}  U G '    j =1 G’ là tập G chọn một cách xác, bao gồm tất g1[k], g2[k] và ui[j] và u i [ j ] lại Dễ dàng kiểm tra lại tập G’ chọn và kết là M ’ là một đối sánh - Chứng minh M chứa một đối sánh M’ C thỏa Giả sử ta có một đối sánh M’ thuộc M (với việc xây dựng trên) + Nếu Ti ∩ M’ = Tif t(ui) = False, t( u i ) = True Mặt khác, điều kiện xây dựng đối sánh M ’ nên lựa chọn bộ ba thuộc Cj phải chứa u i [ j ] (vì Tif chứa bộ ba có chứa phần tử ui[j]), nên cj thỏa 36 + Còn Ti ∩ M’ = Tit t(ui) = True, ta lập luận tương tự cj thỏa Do C là thỏa 4) Bài toán VERTEX COVER (VC) - Đầu vào: Cho đồ thị G = (V,E) và số nguyên dương k thoả mãn k ≤ |V| - Câu hỏi: Tồn hay không một tập V’ V cho |V’| ≤ k và cạnh {u, e} ∈ E một hai đỉnh u e phải thuộc V’ Định lý VC là NP-đầy đủ i) VC ∈ NP Dễ dàng thấy VC thuộc NP, thuật toán không tất định cần dự đoán một tập tập đỉnh và kiểm tra thời gian đa thức tập có chứa một đầu cạnh và có kích thước phù hợp ii) Chúng ta xây dựng phép biến đổi 3SAT VC Cho một đầu vào 3SAT là I = (U,C), với U = {u1, u2, , un} là tập biến và C = {c1, c2, , cm) là tập mệnh đề Chúng ta phải xây dựng một đồ thị G = (V,E) và một số nguyên dương K ≤ |V| cho G có một phủ đỉnh kích thước K bé và C thoả Với biến ui ∈ U, có một thành phần “truth-setting” là T i = (Vi,Ei) với Vi={ui, u i } và Ei = {{ui, u i }}, tức là hai đỉnh nối một cạnh Chú ý phủ đỉnh nào chứa ui u i để phủ cạnh Ei Với mệnh đề cj ∈ C, có một thành phần “satisfaction test” là Sj = (Vj’,Ej’), bao gồm đỉnh và cạnh kết nối chúng tạo thành một tam giác: Vj’ = {a1[j],a2[j],a3[j]} Ej’ = {{ a1[j],a2[j]}, {a1[j],a3[j]}, {a2[j],a3[j]}} Chú ý phủ đỉnh nào chứa hai đỉnh V j’ để phủ cạnh Ej’ 37 Phần lại việc xây dựng là tập cạnh kết nối Với mệnh đề c j ∈ C, ký hiệu literal cj là xj, yj và zj Khi cạnh kết nối bắt nguồn từ S j cho bằng: Ej” = {{a1[j],xj},{a2[j],yj},{a3[j],zj}} Việc xây dựng thể VC hoàn thành cách thiết lập K = n + 2m và G = (V,E) đó:  n   m ' V = UVi  ∪ UV j   i =1   j =1  và  n   m '   m " E = U Ei  ∪ U E j  ∪ U E j   i =1   j =1   j =1  Dễ dàng thấy cách xây dựng này thực thời gian đa thức Còn phải chứng tỏ C là thoả và G có một phủ đỉnh kích thước K bé Trước hết, giả sử V’ ⊆ V là một phủ đỉnh G với |V’| ≤ K Theo ý V’ phải chứa một đỉnh từ T i và chứa hai đỉnh từ S j Như tổng số là n + 2m = K đỉnh, nên thực là V ’ chứa xác một đỉnh từ Ti và xác hai đỉnh từ Sj Do sử dụng cách mà V’ giao với thành phần “truth-setting” để thu phép gán t: U→{T,F} Chúng ta cần cho t(ui) = T ui ∈V’ và t(ui) = F u i ∈V’ Để thấy phép gán này là thoả tất mệnh đề c j∈C, ta hãy xem xét ba cạnh Ej” Chỉ có hai cạnh chúng phủ đỉnh thuộc Vj’∩V’, một cạnh chúng phải phủ một đỉnh V i ∈V’ Nhưng điều này có nghĩa literal tương ứng là ui u i mệnh đề cj là theo t, và mệnh đề cj là thoả t Bởi điều này là với c j nên suy t là phép gán thoả cho C 38 Ngược lại, giử sử t: U→{T,F} là một phép gán thoả cho C Phủ đỉnh tương ứng V’ bao gồm một đỉnh từ Ti và hai đỉnh từ Sj Đỉnh từ Ti thuộc V’ là ui t(ui) = T, và là u i t(ui) = F Điều này đảm bảo một ba cạnh Ej” phủ, t thoả cj Vì vậy, ta cần bao gồm V ’ đỉnh cuối từ Sj hai cạnh lại Ej”, và là phủ đỉnh mong muốn 5) Bài toán CLIQUE - Đầu vào: Cho đồ thị G = (V,E) và số nguyên dương k thoả mãn k ≤ |V| - Câu hỏi: Tồn hay không một tập V’ V cho |V’| ≥ k mà cặp đỉnh V’ nối một cạnh E 6) Bài toán HAMILTON CIRCUIL (HC) Bài toán chu trình Hamilton là bài toán xác định xem với một đồ thị G = (V,E) cho trước có chứa một chu trình Hamilton (chu trình đơn chứa đỉnh G) Bài toán phát biểu dạng bài toán định sau: - Đầu vào: Cho đồ thị G = (V,E) - Câu hỏi: G có chứa một chu trình đơn qua đỉnh hay không? 7) Bài toán PARTITION - Instance: Một tập hữu hạn A và một “trọng số” s(a) ∈ Z+ cho a ∈ A - Question: Có tồn một tập A’ ⊂ A cho ∑ s (a ) = ∑ s (a) a∈A ' a∉A − A ' 8) Bài toán TRAVELING SALEMAN (TSP) Bài toán người bán hàng phát biểu dạng bài toán đồ thị là: Cho đồ thị G tham số k nguyên, cạnh e G có một trọng số nguyên c(e) Câu hỏi đặt là có tồn một chu trình qua tất đỉnh G (mỗi đỉnh một lần) mà tổng trọng số cạnh đã qua không vượt k không? Bài toán phát biểu dạng bài toán định sau: - Đầu vào: Cho tập n thành phố C = {c 1,…,cm} với khoảng cách d(ci,cj) ∈ Z+ và một số nguyên dương B 39 - Câu hỏi: Có tồn một hoán vị π {1, 2, , m} cho:  m−1   ∑ d (c Π (i ) , c Π (i + !) )  + d (c Π ( m) , c Π (1) ) ≤ B hay không?  i =1  Ta có sơ đồ để chứng minh một số bài toán là NPC sau: SAT Hình Sơ đồ chứng minh một số bài toán NPC 3SAT 3DM VC PARTITION CLIQUE HC TSP 40 KẾT LUẬN Như luận văn này, đã tìm hiểu một số khái niệm quan trọng lý thuyết thuật toán, lý thuyết độ phức tạp và phân lớp độ phức tạp bài toán Trong lý thuyết thuật toán nội dung trọng tâm thuật toán thông dụng và độ phức tạp thuật toán này, Trong lý thuyết độ phức tạp nội dung quan trọng phương pháp giải bài toán tối ưu tổ hợp và thuật toán xấp xỉ, xác suất, heuristics và ứng dụng Trong thời gian tới nghiên cứu tiếp nội dung này 41 TÀI LIỆU THAM KHẢO Tiếng Việt Nguyễn Hữu Điển, Một số bài toán thuật toán, NXB Giáo dục, Hà Nội, 2005 Phan Huy Khánh, Giáo trình Lý thuyết tính toán, ĐH Đà Nẵng, Đà Nẵng, 1999 Tiếng Anh Agrawal, M., Kayal, N and Saxena, N (2002) PRIMES is in P Tech Report Dept of Computer Science and Engineering Indian Inst of Technology Kanpur Ahuja, R.K., Magnanti, T.L and Orlin, J.B (1993) Network Flows Theory, Algorithms and Applications Prentice–Hall Dietzfelbinger, M (2004) Primality Testing in Polynomial Time LNCS 3000 Springer Garey, M.R and Johnson, D.B (1979) Computers and Intractability A Guide to the Theory of NP-Completeness W.H Freeman Homer, S (2001) Computability and Complexity Theory Springer Hopcroft, J.E., Motwani, R and Ullman, J.D (2001) Introduction to Automata Theory, Languages and Computation Addison-Wesley Longman Ingo Wegener (2005) Complexity Theory Springer 10 Martello, S and Toth, P (1990) Knapsack Problems Wiley 11 Motwani, R and Raghavan, P (1995) Randomized Algorithms Cambridge University Press 12 T Cormen, C Leiserson, R Rivest (1990) Introduction to Algorithms, Mc GrawHill 42 [...]... tính toán nào đó được biết cho đến nay đều có thể tính được trên máy Turing 10 1.3 Độ phức tạp của thuật toán Để đánh giá hiệu quả của một thuật toán, ta có thể đánh giá độ phức tạp của thuật toán về mặt thời gian, tức là thời gian máy tính làm việc và về không gian, tức là dung lượng bộ nhớ của máy tính cần thiết để thực hiện thuật toán Trong luận văn này, khi nói đến độ phức tạp của thuật toán. .. thuật toán ta luôn hiểu là độ phức tạp về thời gian 1.3.1 Độ phức tạp về thời gian Thời gian làm việc của máy tính khi chạy một thuật toán nào đó không chỉ phụ thuộc vào thuật toán, mà còn phụ thuộc vào máy tính được sử dụng Vì thế, để có một tiêu chuẩn chung, ta sẽ đo độ phức tạp của một thuật toán bằng số các phép tính phải thực hiện Khi thực hiện cùng một thuật toán, số các phép tính... cho độ phức tạp của thuật toán Tuy nhiên việc tính O dễ hơn việc tính θ Nếu T(n) = O(g(n)) (hoặc tốt hơn là Θ(g(n))) trong đó g(n) là một đa thức theo n thì ta nói rằng thuật toán làm việc với thời gian đa thức, gọi tắt là thuật toán đa thức Thuật toán đa thức thường được xem là tốt 1.3.2 Ví dụ cách tính độ phức tạp Ví dụ 1: Thuật toán tìm kiếm nhị phân Input: dãy số tăng a1, , an; số x Output:... Trong số này có các bài toán tối ưu và các bài toán với các giải pháp duy nhất như các bài toán đánh giá và các bài toán quyết định Các định dạng đầu vào khác nhau cho cùng một “bài toán sẽ đưa đến các bài toán khác nhau, nhưng thông thường những bài toán này về mặt thuật toán rất giống nhau 2.2 Một số bài toán quan trọng 1) Các bài toán về người bán hàng Bài toán người bán hàng (TSP): là bài toán tìm. .. của bài toán Đối với một bài toán có rất nhiều thuật toán để giải Ta ký hiệu: TA(n) = max {T(X), X đầu vào có độ dài n} là độ phức tạp của thuật toán A Độ phức tạp của bài toán B được định nghĩa như sau: TB(n) = inf {TA(n), A là thuật toán giải bải toán B} Rất khó tính được TB(n), mà thường chỉ biết được cận dưới và cận trên của TB(n) Nếu ta xây dựng được một thuật toán A giải bài toán B... thuyết số Mật mã học hiện đại có kết nối chặt chẽ với các bài toán lý thuyết số, trong đó các số rất lớn được sử dụng Đã từng được học trong trường, hầu hết chúng ta học thuật toán về cộng các phân số đòi hỏi chúng ta phải tính toán mẫu số chung và để làm được điều đó, chúng ta sẽ phân chia các mẫu số thành các thừa số nguyên tố Đây là bài toán tạo thừa số nguyên tố (FACT) 2.3 Độ phức tạp của... toán B thì T B(n) ≤ TA(n), có nghĩa là độ phức tạp của bài toán B nhỏ hơn hoặc bằng độ phức tạp của thuật toán A (một cận trên) Để chứng tỏ TB(n) ≥ f(n) (một cận dưới) thì ta phải chứng minh rằng bất kỳ thuật toán A nào giải bài toán B cũng đều có độ phức tạp lớn hơn hoặc bằng f(n) 20 CHƯƠNG 3 PHÂN LỚP CÁC BÀI TOÁN THEO ĐỘ PHỨC TẠP 3.1 Lớp các bài toán P, NP và mối quan hệ giữa lớp P và lớp... cỡ của bài toán, tức là độ lớn của đầu vào Vì thế, độ phức tạp của thuật toán sẽ là một hàm số phụ thuộc độ lớn của đầu vào Trong những ứng dụng thực tiễn, chúng ta không cần biết chính xác hàm này, mà chỉ cần biết “cỡ” của chúng, tức là cần có một ước lượng đủ tốt của chúng Giả sử A là một thuật toán Ký hiệu T(X) là thời gian tính toán với đầu vào X Độ phức tạp của thuật tính trong... phải thuộc lớp NP - Mọi bài toán thuộc lớp NP đều dẫn được về bài toán đó với thời gian đa thức 3.2.3 Mối quan hệ giữa các lớp bài toán P, NP và NPC Do bài toán P = NP chưa được giải quyết, nếu có thể quy một bài toán NP-đầy đủ Π2 về bài toán Π1 thì chưa có thuật toán thời gian đa thức nào cho Π1 Bởi vì nếu có thuật toán thời gian đa thức cho Π1 thì cũng có thuật toán thời gian đa thức cho Π2... - n*cn + n*cn = 2 - 1/2n-1 Trong khi đó độ phức tạp T(n) = n 13 CHƯƠNG 2 BÀI TOÁN VÀ ĐỘ PHỨC TẠP CỦA BÀI TOÁN 2.1 Bài toán là gì? Trong giới hạn của chúng ta, sẽ chỉ xem xét các bài toán là một vấn đề phù hợp với tính toán của máy tính và một tập hợp các kết quả chính xác Vấn đề về tìm kiếm một bản án thích đáng dành cho bị cáo không phải là bài toán vì nó phụ thuộc vào tư pháp và do đó

Ngày đăng: 18/06/2016, 19:31

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w