MỞ ĐẦU Lý thuyết độ phức tạp là một lĩnh vực trung tâm của khoa học máy tính với các kết quả liên quan chặt chẽ với sự phát triển và sử dụng các thuật toán.. Trong chương này chúng tôi c
Trang 1ĐẠ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
BẢN TÓM TẮT LUẬN VĂN THẠC SĨ KHOA HỌC
Hà Nội - 2013
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
NGƯỜI HƯỚNG DẪN KHOA HỌC
PGS.TS NGUYỄN HỮU NGỰ
Hà Nội - 2013
Trang 3MỞ ĐẦU
Lý thuyết độ phức tạp là một lĩnh vực trung tâm của khoa học máy tính với các kết quả liên quan chặt chẽ với sự phát triển và sử dụng các thuật toán Nghiên cứu về lý thuyết độ phức tạp sẽ giúp chúng ta hiểu biết sâu sắc và khám phá ra ranh giới của những vấn để “có thể” tính toán với các nguồn tài nguyên hợp lý
Bản luận văn này gồm có 3 chương Trong đó, chương 1 trình bày tóm tắt kiến thức về lý thuyết độ phức tạp như: máy Turing, thuật toán, Chương 2 trình bày các khái niệm bài toán, độ phức tạp của bài toán trong
lý thuyết độ phức tạp Trong chương này chúng tôi cũng liệt kê một số nhóm bài toán quan trọng trong lý thuyết độ phức tạp như bài toán người bán hàng, bài toán xếp ba lô, Trong chương 3, chúng tôi trình bày về việc phân lớp các bài toán bao gồm các bài toán lớp P, NP và NPC Chúng tôi quan tâm đặc biệt đến lớp NPC, trong đó chúng tôi đi chứng minh một
số bài toán thuộc lớp NPC dựa trên một khái niệm quan trọng đó là phép dẫn đa thức
Bây giờ chúng tôi xin được trình bày lần lượt từng chương, bắt đầu
từ chương 1
CHƯƠNG 1: KIẾN THỨC CHUẨN BỊ
Chúng tôi bắt đầu với khái niệm máy Turing
1.1 Máy Turing
Máy Turing gồm có:
- Tập trạng thái trong hữu hạn
- Băng vô hạn hai phía (về lý thuyết có thể kéo dài tuỳ ý cả hai phía), bảng tín hiệu vào, bảng tín hiệu trên băng, một đầu đọc-ghi
q
↓
B B B B a1 a2 ai an B B B Một bước làm việc của máy gồm:
- Đầu đọc-ghi đọc tín hiệu trên băng
Trang 4- Căn cứ vào trạng thái trong và tín hiệu đọc trên băng, đầu đọc-ghi
sẽ ghi một tín hiệu trên băng, dịch chuyển sang phải hoặc sang trái một ô,
và chuyển sang một trạng thái trong nào đó
Quy ước khi máy bắt đầu làm việc thì trạng thái là trạng thái đầu của máy, với input hữu hạn trên băng, đầu đọc-ghi nằm ở ký tự bên trái nhất của input
Tiếp theo, ta xét hai mô hình máy Turing tất định và máy Turing không tất định
1.2 Máy Turing tất định (deterministic)
Có thể định nghĩa một cách hình thức một máy Turing tất định như sau: là một bộ M = (Q, Σ, Γ, F, q0, B, t1 ) trong đó:
- Γ: là bảng tín hiệu trên 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)
H = a1a2 ai-1qai aksang hình trạng
H' = a1a2 q'ai-1cai+1 ak nếu D = L hoặc
Trang 5H' = a1a2 ai-1cq'ai+1 ak nếu D = R
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}
trạng thái cuối cùng là trạng thái kết thúc đoán nhận t1
1.3 Máy Turing không tất định (non deterministic)
Định nghĩa như máy Turing tất định, trong đó hàm chuyển F là hàm
đa trị, nghĩa là F : Q x Σ → 2Q x Γ x {L,R}
Tại mỗi bước, có thể chuyển sang bước sau bằng một trong các khả năng tùy theo hàm chuyển F Nếu có một nhánh đoán nhận input x thì xem như 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 đọc máy có thể chuyển đến một trong các hình trạng
Trang 6H − Hi1 , H − Hi2 , , H − Him trong đó Hik có trạng thái sik và tín hiệu được ghi là aik,
Cần chú ý các đặc trưng hữu hạn trong thuật toán:
- Đối tượng hữu hạn, thao tác hữu hạn
- Cho kết quả qua một số hữu hạn bước
- Về lý thuyết cho phép khả năng kéo dài tuỳ ý (vô hạn tiềm năng)
Ta phân biệt hai loại thuật toán: tất định và không tất định Đối với thuật toán tất định tại mỗi thời điểm chỉ có không quá một bước tiếp theo Đối với thuật toán không tất định tại mỗi thời điểm có thể có một số khả năng để lựa chọn bước tiếp theo
Trang 81.2.3 Luận đề Church-Turing
Luận đề Church-Turing phát biểu như sau: những bài toán có thể giải được trên một mô hình tính toán nào đó được biết cho đến nay đều có thể tính được trên máy Turing
1.3 Độ phức tạp của thuật toán
Đối với một thuật toán để giải một bài toán ta cần đánh giá độ phức tạp của thuật toán đó Có thể đánh giá độ phức tạp của một thuật toán về mặt thời gian (số bước tính toán) hoặc là về mặt không gian (bộ nhớ cần sử dụng) Trong luận văn này ta chỉ quan tâm dến độ phức tạp về mặt thời gian của thuật toán
1.3.1 Độ phức tạp về thời gian
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
T(n) = max {T(x), x có độ dài bằng n}
Nếu A là thuật toán không tất định, thì T(n) là độ dài dài nhất trong các nhánh làm việc với đầu vào x Có thể dùng hàm T(n) để đánh giá độ phức tạp của thuật toán A, T(n) tính theo trường hợp xấu nhất trong các đầu vào có cùng độ dài
Nếu T(n) của thuật toán A = O(g(n)) thì g(n) mới chỉ là chặn trên của T(n) Nếu T(n) của thuật toán A = θ(g(n)) thì g(n) mới là tượng trưng chính xác cho độ phức tạp của A Tuy nhiên việc tính O dễ hơn việc tính θ Nếu T(n) của thuật toán A = 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 A 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
Trang 9Output: trả lời x có thuộc dãy hay không
Dùng thuật toán đệ quy DQ(a, b) (tìm trên đoạn con [d, c])
1 Nếu d = c và a(c) = x return "yes"
2 c = (a + b)/2
3 Nếu a(c) = x return "yes"
4 Nếu x < a(c) thì gọi DQ(a, c-1) else gọi DQ(a, c+1)
Tuy nhiên trên thực tế còn xét đến độ phức tạp trung bình:
Ttb(n) = tổng số các T(X) với X có độ dài n, chia cho số các dữ liệu
có thể với độ dài n
Ví dụ 2: (tính độ phức tạp trung bình)
Máy Turing đoán nhận ngôn ngữ {X | X ∈ {0,1}* có ít nhất một chữ
số 1}
Số dữ liệu có thể với độ dài n là s = 2n
Số các X không có chữ số 1 (không được đoán nhận) là 1 (duy nhất
"00 0"), thời gian T(X) = n, tỷ lệ không đoán nhận là T0(n) = n/s
Với i ≤ n thì số các X (được đoán nhận) có X(i) = '1', và X(k) = '0' với k < i, là 2n-i, với thời gian T(X) = i
Tổng thời gian tính với các X này là:
h = 1*2n-1 + 2*2n-2 + + n*2n-n
Trang 10Bây giờ ta sẽ chuyển sang một nội dung quan trọng tiếp theo đó là khái niệm bài toán và độ phức tạp của bài toán
Trang 11Chương 2 BÀI TOÁN VÀ ĐỘ PHỨC TẠP CỦA BÀI TOÁN
Sau đây ta sẽ liệt kê danh sách một số bài toán quan trọng trong lý thuyết độ phức tạp
2.2 Một số bài toán quan trọng
1) Các bài toán người bán hàng (TSP)
ngắn nhất qua n thành phố đúng một lần và quay trở lại điểm xuất phát của
nó Các thành phố được ký hiệu bằng 1, , n và các khoảng cách giữa các thành phố là d i,j (1 ≤ i, j ≤ n) Các khoảng cách được chọn từ N ∪ {∞}, và giá trị ∞ có nghĩa là không có sự kết nối trực tiếp giữa hai thành phố cụ
thể Một chu trình là một phép hoán vị π của {1, …, n}, do đó các thành
phố đã đến được sắp xếp theo thứ tự là π(1), π(2), …, π(n), π(1) Giá trị của một chu trình π được tính bởi:
dπ(1), π(2) + dπ(2), π(3) + … + dπ(n-1), π(n) + dπ(n), π(1)
và một chu trình có giá trị cực tiểu được tính toán
2) Các bài toán xếp ba lô (KNAPCK)
Các hành khách muốn thu xếp hành lý trong giới hạn 20 kg theo quy định của hàng không có thể áp dụng bài toán xếp ba lô (KNAPSACK) Trọng lượng giới hạn W∈N phải được giám sát và có n vật cần mang theo
Đồ vật thứ i có trọng lượng wi∈N và có tiện ích ui ∈ N Hành khách không được phép mang các đồ vật có tổng trọng lượng vượt quá W Mục tiêu là tối đa hoá tổng tiện ích của tất cả các đồ vật được chọn
3) Các bài toán về phân vùng
Trang 12Trường hợp đặc biệt với ui = wi cho tất cả các đồ vật Hơn nữa, W = (w1 + w2 + … + wn)/2 và chúng ta xem xét bài toán quyết định là liệu chúng ta có thể đạt được trọng lượng tối đa cho phép hay không, thì bài toán sẽ tương đương với câu hỏi liệu tất cả các đồ vật có thể được chia thành hai nhóm có tổng trọng lượng giống nhau không Bài toán phân vùng
cũng là một trường hợp đặc biệt của bài toán đóng thùng (BINPACKING),
trong đó các thùng có kích thước b có sẵn, chúng ta phải đóng thùng n đồ vật với các kích cỡ u1, u2, , un vào càng ít thùng càng tốt
4) Các bài toán giám sát (hoặc phủ)
Một bài toán giám sát điển hình là một bài toán triển lãm nghệ thuật Yêu cầu đưa ra là giám sát tất cả các bức tường của một phòng triển lãm với càng ít máy quay càng tốt Chúng ta sẽ hạn chế trong các bài toán giám sát trên các đồ thị vô hướng, trong trường hợp đó chúng thường được gọi
là các bài toán phủ Trong một bài toán phủ đỉnh (VERTEXCOVER), mỗi
đỉnh sẽ theo dõi tất cả các cạnh liên quan tới nó, và tất cả các cạnh được
theo dõi với càng ít đỉnh càng tốt Trong một bài toán phủ cạnh
(EDGECOVER), các vai trò đảo ngược lại: mỗi cạnh theo dõi hai đỉnh liên quan đến nó, các đỉnh sẽ được giám sát với càng ít cạnh càng tốt
5) Các bài toán clique (CLIQUE)
Các đỉnh của đồ thị có thể được sử dụng để biểu diễn con người, các
cạnh sẽ biểu diễn mối quan hệ giữa mọi người Một clique được định nghĩa
là một nhóm trong đó mỗi người thích những người khác trong nhóm
Trong bài toán phủ clique (CLIQUECOVER), các đỉnh của một đồ thị
phải được phân chia thành càng ít tập hợp càng tốt, theo cách như vậy mỗi
tập hợp tạo thành một clique Trong một bài toán clique (ký hiệu là CLIQUE), một clique lớn nhất có thể sẽ được tính toán Một anti-clique
(“không ai thích ai cả”, giữa hai đỉnh bất kỳ không có một cạnh nào) được
gọi là một tập hợp độc lập, và bài toán tính toán một tập hợp độc lập lớn
nhất được gọi là INDEPENTSET
6) Các bài toán xây dựng nhóm
Xây dựng nhóm có nghĩa là phân chia những người với khả năng khác nhau vào các nhóm hợp tác, trong đó các thành viên của mỗi nhóm
Trang 13phải làm việc cùng nhau Đối với bài toán k-DM (đối sánh k chiều, nghĩa
là xây dựng các nhóm có kích thước k), chúng ta có sẵn k nhóm người (mỗi nhóm đại diện cho một trong k khả năng), và danh sách các nhóm k thành viên tiềm năng, trong đó mỗi người đến từ các nhóm khả năng Mục đích là để hình thành nên càng nhiều nhóm càng tốt với hạn chế là mỗi người chỉ có thể được tham gia vào một nhóm 2-DM cũng được biết đến
như là bài toán hôn nhân: hai “khả năng” được hiểu như là hai giới tính,
một nhóm có tiềm năng được xem như là một cuộc “hôn nhân bền vững”,
và mục tiêu là tối đa hoá số lượng các cuộc hôn nhân bền vững
7) Các bài toán luồng tối ưu
Trong bài toán luồng qua mạng (NETWORKFLOW), người ta tìm
kiếm các luồng tối đa trong các mạng Chúng ta chỉ quan tâm đến bài toán
cơ bản mà trong đó chúng ta tìm kiếm để tối đa hoá luồng từ s đến t trong một đồ thị có hướng Luồng f(e) chạy theo một cạnh e phải là số nguyên không âm bị chặn trên bởi khả năng c(e) của cạnh đó Luồng tổng đạt đến một đỉnh v ∉ {s, t}, nghĩa là tổng số f(e) với e = (., v) phải bằng luồng tổng rời khỏi v, tức là tổng số f(e) với e = {v, } Đỉnh nguồn s không có bất kỳ cạnh nào đi vào và đỉnh đích t không có bất kỳ cạnh nào đi qua
8) Các bài toán vô địch trong giải đấu thể thao
định Một cổ động viên tự hỏi tại một thời điểm cụ thể trong mùa giải liệu
có thể (ít nhất là về mặt lý thuyết) đội bóng yêu thích của mình sẽ vô địch trong giải đấu được không Cho biết xếp hạng hiện tại của mỗi đội chơi và
có một danh sách các trận đấu còn được chơi Đội được chọn có thể trở thành nhà vô địch nếu có kết quả tiềm năng của các các trận đấu còn lại sao cho đến cuối giải không đội nào khác có nhiều điểm hơn (nếu cần thiết, đội chơi có thể cũng cần phải có hiệu số bàn thắng thua tốt nhất) Ngoài ra, một trong những quy tắc sau đây phải chỉ rõ bao nhiêu điểm đạt được trong mỗi trận đấu
9) Các bài toán xác minh
Đối với lớp của các bài toán xác minh, chúng ta đề cập tới lĩnh vực
phần cứng Bài toán cơ bản là liệu đặc tả S và nhận dạng R của một chíp có
Trang 14mô tả cùng một hàm số Boolean không Tức là, chúng ta có các mô tả S và
R của các hàm Boolean f và g và tự hỏi liệu f(a) = g(a) với tất cả các yếu tố đầu vào a không Vì chúng ta thực hiện các thao tác bit xác minh, có thể giả sử rằng f, g: {0, 1}n → {0, 1} Tính chất f ≠ g tương đương với tồn tại một a mà (f ⊕ g)(a) = 1 (⊕ = XOR) Vì vậy, chúng ta đặt ra câu hỏi liệu h
= f ⊕ g có thể thoả được không, tức là liệu h có thể cho ra giá trị 1 không
Bài toán quyết định này còn được gọi là bài toán thoả được
10) Các bài toán trong lý 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 Ở đây chúng ta phải lưu ý rằng, biểu diễn nhị phân của đầu vào n chỉ có độ dài [log(n + 1)] Trong trường học, 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 các mẫu số chung, và để làm được chúng ta sẽ phân chia mẫu số
thành thừa số nguyên tố Đây là bài toán tạo thừa số (FACT)
Các bài toán được chia ra làm ba loại: bài toán tối ưu hoá, bài toán xác định và bài toán quyết định Về nguyên tắc mọi bài toán đều có thể biểu diễn lại dưới dạng bài toán quyết định
2.3 Độ phức tạp của bài toán
Đối với một bài toán thì có rất nhiều thuật toán để giải bài toán đó
Ký hiệu TA(n) = max {T(x), x là đầu vào có độ dài n} là độ phức tạp của một thuật toán A
Ta có thể định nghĩa độ phức tạp của một bài toán như sau:
TB(n) = inf {TA(n), A là một thuật toán giải bài toán B}
Thường thì rất khó tính được độ phức tạp của bài toán mà chỉ biết được cận trên và cận dưới của độ phức tạp của bài toán
Cuối cùng chúng chúng tôi trình bày về các lớp bài toán dựa trên độ phức tạp của chúng
Trang 15CHƯƠ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 chúng
- Biến đổi mọi đầu vào của Π1 thành đầu vào của Π2 sao cho
Phép biến đổi đa thức được sử dụng để chứng minh một số bài toán NPC
Trang 163.2.2.1 Bài toán SAT Định lý Cook
Bài toán SAT
Đầu vào:
Câu hỏi:
Định lý Cook: Bài toán SAT là NPC
Chứng minh:
Ta chỉ trình bày những ý chính của chứng minh
Trước hết ta dễ dàng thấy là SAT ∈ NP Một thuật toán không tất định chỉ cần phỏng đoán một phép gán thực trị “truth assignment” là t cho các biến logic, sau đó kiểm tra xem phép gán t này có thoả được tập mệnh
đề C không Điều này có thể dễ dàng thực hiện trong thời gian đa thức
Bước tiếp theo ta sẽ chỉ ra rằng với mọi Π ∈ NP thì dẫn được về SAT trong thời gian đa thức, nói cách khác là tồn tại một phép biến đổi đa thức fL từ mỗi bài toán Π ∈ NP về SAT
Ta sẽ chuyển bài toán SAT về ngôn ngữ L = L[SAT,e] với e là một lược đồ mã hoá hợp lý nào đó Chúng ta phải chứng tỏ rằng với mọi ngôn ngữ L∈ NP thì L ∝ LSAT
Ký hiệu M là một chương trình NTDM thời gian đa thức tuỳ ý, xác định bởi Γ, Σ*, b, Q, q0, qY, qN và δ, đoán nhận ngôn ngữ L = LM Ngoài ra, cho p(n) là một đa thức trên tập các số nguyên, nó giới hạn hàm phức tạp thời gian TM(n) (Không mất tính tổng quát, ta có thể giả sử p(n) ≥ n với mọi n ∈ Z+) Phép biến đổi tổng quát fL sẽ nhận được dưới dạng M, Γ, Σ*,
b, Q, q0, qY, qN, δ và p