Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
1,24 MB
Nội dung
PHẦN I- TỔNG QUAN Phần lớn các thuật toán chúng ta đã học là các thuật toán thời gian đa thức (polynomial-time algorithms) : các dữ liệu vào có kích cỡ n, trường hợp xấu nhất thời gian chạy là O(n k ) với một số hằng số k . Đương nhiên điều kỳ diệu khi mà tất cả các bài toán có thể giải được bằng thời gian đa thức. Câu trả lời là không. Chẳng hạn, đó là các bài toán, như “bài toán Halting“ nổi tiếng của Turing, không thể giải được bằng bất kỳ máy tính nào, không vấn đề gì về việc mất thời gian đã cung ứng. Cũng có các bài toán có thể giải được nhưng không phải với thời gian O(n k ) với bất kỳ hằng số k. Tóm lại, chúng ta nghỉ rằng các bài toán có thể giải được bằng các thuật toán thời gian đa thức là dễ vận dụng và các bài toán đòi hỏi thời gian siêu đa thức là khó vận dụng. Chủ đề của chương này là một lớp các bài toán thú vị được gọi là các bài toán “NP-đầy đủ (NP-complete)". Thuật toán không đa thức vẫn chưa được khám phá cho một bài toán NP-đầy đủ, không có một bài toán NP-đầy đủ nào có thể chứng minh rằng thuật toán không đa thức có thể tồn tại đối với bất kỳ bài toán nào. P ≠ NP ? , hầu hết sự lúng túng mở ra nghiên cứu các bài toán bằng khoa học máy tính lý thuyết đã đưa ra vào năm 1971. Một khía cạnh khó khăn riêng của các bài toán NP-đầy đủ là xem chúng giống như các bào toán mà có các thuật toán đa thức thời gian. Trong mỗi cặp của bài toán, một là có thể giải được bằng thời gian đa thức và mặc khác là NP- đầy đủ, nhưng sự khác nhau không đáng kể giữa các bài toán xuất hiện trong : * Các đường đi đơn dài nhất và ngắn nhất (Shortest vs. longest simple paths) : chúng ta thấy rằng, chúng ta có thể tìm thấy các đường đi ngắn nhất từ một nguồn đơn trong một đồ thị có hướng G = (V, E) với thời gian O(V E). Kết thúc đường đi đơn dài nhất giữ hai đỉnh là khó. * Vòng Hamilton và Euler (Euler tour vs. hamiltonian cycle) : An vòng Euler của một kết nối của đồ thị có hướng G = (V, E) là một vòng đi ngang qua mỗi đỉnh của G chính xác một lần, mặc dù nó có thể thăm một đỉnh hơn một lần. Chúng ta có thể tìm thấy các cạnh của vòng Euler với thời gian O(E). Một vòng Hamilton của một đồ thị có hướng G = (V, E) là một vòng đơn mà chứa mỗi đỉnh trong V. Xác định khi một đồ thị có hướng có một vòng Hamilton là NP-đầy đủ. * Thỏa được 2-CNF và 3-CNF (2-CNF satisfiability vs. 3-CNF satisfiability) : Một công thức boolean bao gồm các biến mà các giá trị là 0 hoặc 1; boolean liên kết như ∧ (AND), ∨ (OR), and ¬ (NOT); and parentheses. Một công thức boolean là thỏa được nếu có một vài chỉ định của các giá trị 0 và 1 đến các biến của nó mà do nó định gía đến 1. Chúng ta sẽ định nghĩa các thuật ngữ hình thức hơn sau chương này, nhưng không hình thức, một công thức boolean là trong k conjunctive normal form, hoặc k-CNF, nếu nó là AND của các mệnh đề OR của chính xác k các biến hoặc các phủ định của chúng. Ví dụ, một công ___________________ NP-đầy đủ 1 thức boolean (x 1 ∨ ¬x 2 ) ∧(¬x 1 ∨ x 3 ) ∧ (¬x 2 ∨¬x 3 ) là trong 2-CNF. (Nó có chỉ định thỏa được x 1 = 1, x 2 = 0, x 3 = 1). Đó là một thuật toán thời gian đa thức để xác định khi một công thức 2-CNF thỏa được, nhưng như chúng ta sẽ thấy ở chương này, sự xác định khi một công thức 3-CNF thỏa mãn là NP-đầy đủ. Các lớp P, NP và NP-đầy đủ : Qua chương này, chúng ta sẽ đề cập đến 3 lớp bài toán : P, NP và NPC, lớp cuối cùng là các bài toán NP-đầy đủ. Chúng ta mô tả các thông tin này và sẽ định nghĩa chúng một cách hình thức như sau : * Lớp P chứa các bài toán có thể giải được bằng thời gian đa thức. Đặc biệt hơn, chúng là các bài toán có thể giải được với thời gian O(n k ) với một số hằng số k, mà n là kích cỡ đặt vào của bào toán. * Lớp NP chứa các bài toán có thể “xác minh (verifiable)" bằng thời gian đa thức. v |V| > Nghĩa là nếu chúng ta đưa ra một "certificate" của một giải pháp, thì chúng ta có thể xác minh rằng “certificate” đó là đúng với thời gian đa thức với kích cỡ đặt vào của bài toán. Chẳng hạn, trong bài toán vòng Hamilton, cho một đồ thị có hướng G = (V, E), một certificate có thể là một chuỗi <v 1 , v 2 , v 3 , , của các cạnh |V|. Dễ dàng kiểm tra bằng thời gian đa thức mà (v i , v i+1 ) ∈E với i = 1, 2, 3, , |V| - 1 và (v |V| , v 1 ) ∈E. Một ví dụ khác, đối với thỏa được 3-CNF, một certificate có thể sẽ là một chỉ định của các giá trị đến các biến. Chúng ta có thể dễ dàng kiểm tra bằng thời gian đa thức mà chỉ định này thỏa được công thức boolean. Bất kỳ bài toán nào thỏa được trong P thì cũng thỏa được trong NP, nếu khi một bài toán thỏa được trong P thì có thể giải được nó trong thời gian đa thức ngay cả khi không bị đưa ra một certificate. Chúng ta sẽ chính thức hóa khái niệm này sau chương này, nhưng bây giờ chúng ta có thể tin rằng P ⊆ NP. Câu hỏi đặt ra là liệu có hay không có P là một tập con thích hợp của NP. Thật tình, một bài toán nằm trong lớp NPC và chúng ta đề cập đến nó như là NP-đầy đủ - nếu nó nằm trong NP và nó như là “khó” như đối với bất kỳ bài toán nào trong NP. Chúng ta sẽ định nghĩa một cách hình thức nó có nghĩa sẽ khó như bất kỳ bài toán nào trong NP trong chương này. Trong khi đó, chúng ta sẽ phát biểu mà không chứng minh nếu bất kỳ bài toán NP-đầy đủ có thể giải được bằng thời gian đa thức thì mỗi bài toán NP-đầy đủ có một thuật toán thời gian đa thức. Phân lớn các nhà khoa học máy tính lý thuyết tin rằng các bài toán NP-đầy đủ đó là khó vận dụng, khi đưa ra nhiều bài toán NP-đầy đủ mà đã nghiên cứu cho đến nay- không có một nghiên cứu nào khám phá được một giải pháp thời gian đa thức- nó sẽ làm kinh ngạc thật sự nếu tất cả chúng có thể giải được bằng thời gian đa thức. Tuy nhiên, đưa ra nổ lực còn quá xa để chứng minh rằng các bài toán NP-đầy đủ là khó vận dụng- không có một kết luận lôgic- chúng ta không thể loại trừ khả năng mà các bài bài toán NP-đầy đủ trong thực tế là có thể giải được bằng thời gian đa thức. Để trở thành một người thiết kế thuật toán giỏi, bạn phải hiểu các nguyên lý cơ bản của lý thuyết NP-đầy đủ. Nếu bạn có thể thiết lập ___________________ NP-đầy đủ 2 một bài toán như NP-đầy đủ, bạn đưa ra bằng chứng tốt cho tính khó vận dụng của nó. Như một kỹ sư, bạn sẽ sử dụng tốt hơn thời gian của bạn cho việc phát triển một thuật toán xấp xỉ hoặc việc giải quyết một trường hợp đặc biệt dễ vận dụng khá hơn việc tìm kiếm cho một thuật toán nhanh mà giải quyết bài toán một cách chính xác. Hơn nữa, nhiều bài toán hấp dẫn nhường như không khó hơn việc phân loại, nghiên cứu đồ thị hoặc mạng máy tính chảy vào trong NP- đầy đủ. Vì thế, nó quan trọng trở nên quen với lớp các bài toán đặc biệt này. Khái quát các bài toán NP-đầy đủ : Các phương pháp kỹ thuật chúng ta sử dụng để biểu diễn một bài toán riêng biệt là NP-đầy đủ khác với các phương pháp kỹ thuật đã sử dụng qua hầu hết cuốn sách này để thiết kế và phân tích các thuật toán. Có một lý do cơ bản cho sự khác biệt này là : trong cách biểu diễn một bài toán sẽ là NP-đầy đủ, chúng ta làm một phát biểu về cách nó là khó không theo cách dễ. Chúng ta không cố gắng chứng tỏ tình trạng của một thuật toán hiệu quả, nhưng cố gắng hơn rằng thuật toán không hiệu quả là tồn tại như nhau. Chúng ta dựa vào 3 khái niệm chính để biểu diễn một bài toán sẽ là NP-đầy đủ : * Các bài toán quyết định và các bài toán tối ưu : Nhiều bài toán thú vị là các bài toán tối ưu (optimization problems), bằng cách mỗi giải pháp khả thi có một giá trị phù hợp và chúng ta mong ước tìm một giải pháp khả thi với giá trị tốt nhất. Chẳng hạn, trong một bài toán mà chúng ta gọi đường đi ngắn nhất (SHORTEST-PATH), chúng ta cho một đồ thị vô hướng G và các đỉnh u và v, chúng ta mong ước tìm đương đi từ u đến v mà sử dụng các cạnh ít nhất. NP-đầy đủ áp dụng trực tiếp không tối ưu hóa các bài toán. Tuy nhiên, để các bài toán quyết định, câu trả lời là đơn giản "có" hoặc "không". Mặc dù biểu diễn cho thấy rằng một bài toán là NP-đầy đủ giới hạn chúng ta đến lĩnh vực của các bài toán quyết định, đó là một mối quan hệ thuận tiện giữa các bài toán tối ưu và các bài toán quyết định. Chúng ta thường có thể gieo một bài toán tối ưu như một bài toán bài toán quyết định liên kết bởi một giới hạn trên giá trị sẽ bị tối ưu. Ví dụ, đối với đường đi ngắn nhất (SHORTEST-PATH), một bài toán quyết định liên kết mà chúng ta gọi ĐƯỜNG ĐI (PATH), là khi, cho một đồ thị có hướng G, các đỉnh u và v, và một số nguyên k, một đường đi tồn tại từ u đến v bao gồm tất cả k cạnh. Mối quan hệ giữa một bài toán tối ưu và bài toán quyết định liên kết của nó làm việc trong sự ủng hộ của chúng ta khi chúng ta cố gắng chỉ ra rằng bài toán tối ưu là “khó”. Bởi vì bài toán quyết định là dùng trong một bối cảnh “dễ” hoặc ít nhất “không khó". Như một ví dụ đặc biệt, chúng ta có thể giải quyết ĐƯỜNG ĐI (PATH) bằng cách giải quyết ĐƯỜNG ĐI NGẮN NHẤT(SHORTEST-PATH) và sau đó so sánh số các cạnh trong đường đi ngắn nhất tìm thấy đến giá trị của bài toán quyết định tham số k. Nói cách khác, nếu một bài toán tối ưu là dễ, bài toán quyết định liên kết nó cũng là dễ. Bắt đầu bằng một phương pháp mà có nhiều liên quan đến NP-đầy đủ, nếu chúng ta có thể cung cấp bằng chứng mà một bài toán quyết định là khó, chúng ___________________ NP-đầy đủ 3 ta cũng cung cấp bằng chứng mà bài toán tối ưu liên kết nó là khó. Vì thế, ngay cả khi nó giới hạn sự chú ý đến các bài toán quyết định, lý thuyết của NP-đầy đủ thường liên quan đến nhiều các bài toán tối ưu. * Các phép rút gọn (Reductions) : Khái niệm trên cho thấy rằng một bài toán là không khó hoặc không dễ hơn các ứng dụng khác thậm chí khi cả hai bài toán là các bài toán quyết định. Chúng ta dẫn thuận tiện của ý kiến này tại phần lớn mỗi chứng minh NP-đầy đủ, như sau : Chúng ta hãy xem như là một bài toán quyết định A, mà chúng ta sẽ giải quyết trong thời gian đa thức. Chúng ta gọi dữ liệu vào đến một bài toán riêng biệt một trường hợp của vấn đề đó; chẳng hạn, trong ĐƯỜNG ĐI (PATH), một instance có thể là một đồ thị đặc biệt G, các cạnh đặc biệt u và v của G và một số nguyên đặc biệt k. Bây giờ cho rằng đó là một bài toán quyết định khác biệt B, mà chúng ta sẵn sàng biết cách để giải quyết bằng thời gian đa thức. Cuối cùng , cho rằng chúng ta có một thủ tục mà biến đổi mất kỳ instance α của A vào một số instance β của B theo các tính chất sau : 1. Sự biến đổi theo thời gian đa thức. 2. Các trả lời là như nhau. Đó là, trả lời cho α is "có" khi và chỉ khi trả lời cho β cũng là "có." Hình 1. Dùng một thuật toán rút gọn thời gian đa thức để giải quyết một bài toán quyết định A trong thời gian đa thức, cho một thuật toán quyết định thời gian đa thức đối với bài toán B khác. Bằng thời gian đa thức, chúng ta biến đổi một trường hợp α của A vào một β của B, chúng ta giải quyết B bằng thời gian đa thức và sử dụng trả lời đối với β như trả lời đối với α . Chúng ta gọi một thủ tục như thế là một thuật toán rút gọn (reduction algorithm) thời gian đa thức và, như hình 1., biểu diễn nó cung cấp cho chúng ta một cách để giải quyết bài toán A bằng thời gian đa thức : a. Cho một instance α của bài toán A, sử dụng một thuật toán rút gọn thời gian đa thức để biến đổi nó đến một instance β của bài toán B. b. Chạy thuật toán quyết định thời gian đa thức cho B trong instance β . c. Sử dụng trả lời cho β như trả lời cho α . Theo mỗi bước mất thời gian đa thức , tất cả ba bước cùng thực hiện, vì thể chúng ta có một cách để quyết định trên α trong thời gian đa thức. Nói cách khác, bằng việc rút gọn giải quyết bài toán A để giải quyết bài toán B, chúng ta sử dụng tính “dễ thuyết phục (easiness)" của B để chứng minh tính đễ thuyết ___________________ NP-đầy đủ 4 phục của A. Sự lấy lại mà NP-đầy đủ là cách biểu diễn một bài toán khó hơn một bài toán dễ, chúng ta sử dụng các phép rút gọn thời gian đa thức trong cách trái ngược để biểu diễn một bài toán là NP-đầy đủ. Chúng ta hãy lấy ý tưởng một bước xa hơn và biểu diễn cách chúng ta có thể sử dụng các phép rút gọn thời gian đa thức để biểu diễn rằng không một thuật toán thời gian đa thức có thể tồn tại cho một bài toán đặc biệt B. Cho rằng chúng ta có một bài toán quyết định A mà chúng ta luôn biết rằng thuật toán thời gian không đa thức có thể tồn tại. Bây giờ chúng ta có thể sử dụng một chứng minh đơn giản bởi sự trái ngược để chỉ ra rằng thuật toán thời gian không đa thức có thể tồn tại cho B. Mặc khác cho rằng, B có một thuật toán thời gian đa thức. Sau đó, sử dụng phương pháp biểu diễn ở hình 1, chúng ta sẽ có một cách để giải quyết bài toán A bằng thời gian đa thức, mà các trái ngược của chúng ta đều được chấp nhận là đúng mà có thuật toán thời gian không đa thức cho A. Đối với NP-đầy đủ, chúng ta không thể thừa nhận rằng hoàn toàn có một thuật toán thời gian không đa thức cho A. Phương pháp chứng minh là tương tự, tuy nhiên, trong đó chúng ta chứng minh rằng bài toán B là NP-đầy đủ trên sự tuyệt đối mà bài toán A cũng là NP-đầy đủ. Một bài toán NP-đầy đủ đầu tiên (A first NP-complete problem) : Vì kỹ thuật rút gọn dựa trên một bài toán có sẵn biết NP-đầy đủ để chứng minh một bài toán NP-đầy đủ khác, chúng ta cần một bài toán NP-đầy đủ đầu tiên. Bài toán đó chúng ta sẽ sử dụng là bài toán thỏa được mạch (circuit- satisfiability problem), mà chúng ta đã cho một mạch kết nối giá trị (boolean combinational circuit) gồm có các cổng VÀ (AND), HOẶC (OR) và cổng PHỦ ĐỊNH (NOT), chúng ta ước khi mà có bất kỳ tập giá trị các dữ liệu vào đến mạch này mà các lý do các dữ liệu ra của nó là 1. Chúng ta sẽ chứng minh rằng bài toán đầu tiên này là NP-đầy đủ trong phần III. ___________________ NP-đầy đủ 5 PHẦN II- ĐỀ CƯƠNG Chương này chúng ta nghiên cứu các khía cạnh của NP-đầy đủ dựa vào sự phân tích các thuật toán. Gồm 5 phần : 1) Chúng ta chú ý đến khái niệm của “bài toán (problem)” và định nghĩa độ phức tạp lớp P của thời gian đa thức có thể giải được các bài toán. Chúng ta cũng xem xét các khái niệm này có phù hợp với khung (framework) của lý thuyết ngôn ngữ hình thức (formal) hay không ?. 2) Định nghĩa lớp NP của các bài toán thỏa được mà các giải pháp có thể thực hiện bằng thời gian đa thức. Từ đó đặt ra câu hỏi P ≠ NP không ?. 3) Biểu diễn các quan hệ giữa các bài toán có thể nghiên cứu qua thời gian đa thức “các phép rút gọn”. Nó định nghĩa NP-đầy đủ và phát thảo một chứng cứ mà một bài toán được gọi là NP-đầy đủ “ thỏa được mạch” (“circuit satisfiability“). Tìm một bài toán NP-đầy đủ. 4) Biểu diễn các bài toán khác có thể chứng minh NP-đầy đủ đơn giản bằng phương pháp luận của các phép rút gọn. Phương pháp luận này đã được minh hoạ bằng cách biểu diễn hai bài toán thoả được công thức là NP-đầy đủ. 5) Sự đa dạng của các bài toán chỉ ra NP-đầy đủ. 1. THỜI GIAN ĐA THỨC (POLYNOMIAL TIME) : Chúng ta bắt đầu nghiên cứu NP-đầy đủ bằng khái niệm của thời gian đa thức có thể giải quyết được các bài toán. Nhìn chung các bài toán này đã đề cập là dễ vận dụng đối với Triết học chứ không phải Toán học, bởi các lý do. Chúng ta có thể đưa ra 3 tranh luận phụ : - Thứ nhất, mặc dù đó là lý do để đề cập một bài toán yêu cầu thời gian θ(n 100 ) là khó , đó là một số bài toán thực tiễn mà yêu cầu thời gian theo thứ tự như một đa thức bậc cao. Thời gian đa thức có thể tính các bài toán đã được bắt gặp trong thực tiễn hoàn toàn tiêu biểu đòi hỏi mất ít thời gian cho một bài toán là đã được khám phá ra hơn hiệu quả các thuật toán thường cho phép. Thậm chí nếu hiện tại thuật toán cho một bài toán có thời gian chạy tốt hơn sẽ sớm được tìm ra. - Thứ hai, đối với nhiều mô hình lý do của sự tính toán, một bài toán có thể đã được giải quyết bằng thời gian đa thức trong một mô hình này có thể được giải quyết bằng thời gian đa thức trong một mô hình khác. Ví dụ, lớp các bài toán thỏa được trong thời gian đa thức bằng dãy số ngẫu nhiên truy cập máy đã được sử dụng qua hầu hết trong cuốn sách này là giống lớp các bài toán có thể giải quyết trong thời gian đa thức trên máy Turing trừu tượng. Nó cũng giống lớp bài toán có thể giải quyết bằng thời gian đa thức trong một máy tính song song khi số các quá trình tăng đa thức với kích cỡ đặt vào. ___________________ NP-đầy đủ 6 - Thứ ba, lớp thời gian đa thức có thể giải quyết các bài toán có các thuộc tính đóng, vì các đa thức đã đóng dưới phép cộng, phép nhân và phép hợp. Ví dụ, nếu lấy(đầu ra) ra một thuật toán thời gian đa thức dẫn vào một thuật toán thời gian đa thức khác, thuật toán đa hợp này là đa thức. Nếu một thời gian đa thức khác tạo một hằng số gọi đến thời gian đa thức các thủ tục con, thời gian chạy của thuật toán đa hợp là đa thức. 1.1. Các bài toán trừu tượng (Abstract problems) : Để hiểu lớp thời gian đa thức có thể giải quyết các bài toán, trước hết chúng ta phải có một khái niệm hình thức của một “bài toán” là gì? Chúng ta định nghĩa một bài toán trừu tượng Q là một quan hệ nhị phân trên một tập I của bài toán các trường hợp (instance) và một tập S các giải pháp của bài toán. Chẳng hạn, một trường hợp đối với đường đi ngắn nhất là một bộ ba chứa 1 đồ thị và 2 đỉnh. Một giải pháp là một dãy các đỉnh trong đồ thị, có thể biểu thị dãy rỗng mà không tồn tại đường đi. Bài toán đường đi ngắn nhất chính nó là quan hệ phù hợp với mỗi trường hợp của một đồ thị kết nối 2 đỉnh. Vì các đường đi ngắn nhất này là không nhất thiết phải duy nhất, một bài toán trường hợp đã cho có thể có hơn một giải pháp. Phát biểu có hệ thống này của một bài toán trừu tượng là quá bình thường đến nỗi đã qui định cho các mục đích của chúng ta. Như trên, lý thuyết NP-đầy đủ giới hạn sự chú ý đến các bài bài toán thỏa được : có một giải pháp có/ không. Trong trường hợp này, chúng ta có thể thấy một bài toán trừu tượng thỏa được như một hàm mà các ánh xạ trường hợp từ tập I đến giải pháp tập {0,1}. Ví dụ, một bài toán thỏa được liên quan đến đường đi ngắn nhất (SHORTEST- PATH) là bài toán đường đi mà chúng ta thấy trước đây. Nếu i= <G, u, v, k> là một trường hợp bài toán đường đi thỏa được, sau đó PATH (i) = 1 (yes) nếu một đường đi ngắn nhất từ u đến v có tại hầu hết k cạnh và ngược lại PATH (i) = 0 (no). Nhiều bài toán trừu tượng không thỏa được các bài toán nhưng tối ưu hơn các bài toán, mà một vài giá trị đều phải nhỏ nhất hoặc lớn nhất. Tuy nhiên, như chúng ta thấy ở trên, điều đó thường là một bài toán đơn giản để viết lại một bài toán tối ưu như một bài toán thỏa được là không khó hơn. 1.2. Các mã hóa (encodings) : Nếu một chương trình máy tính giải quyết một bài toán trừu tượng, bài toán các trường hợp phải được trình bày bằng một cách mà chương trình dễ hiểu. Một mã hóa của một tập S của các đối tượng trừu tượng là một ánh xạ e từ S đến tập của các chuỗi nhị phân. Ví dụ, chúng ta làm quen với mã hóa các số tự nhiên N = {0,1,2,3,4, } như các chuỗi { 0,1,10,11,100, }. Sử dụng mã hóa này, e(17) = 10001. Bất cứ một ai có thể nhìn vào máy tính đại diện bởi các ký tự trên bàn phím là quen với bảng mã ASCII hoặc EBCDIC. Trong bảng mã ASCII, mã hóa của A là 1000001. Thậm chí một đối tượng ghép có thể được mã hóa như một chuỗi nhị phân bằng cách kết nối các đại diện của các bộ phận cấu tạo của nó. ___________________ NP-đầy đủ 7 Các hình đa giác, các đồ thị, các hàm, các cặp có thứ tự, các chương trình- Tất cả có thể mã hóa như các chuỗi nhị phân. Vì thế, một thuật toán máy tính mà “giải quyết” một vài bài toán trừu tượng thỏa được thực sự lấy một mã hóa của một bài toán trường hợp như dữ liệu vào. Chúng ta gọi một bài toán mà tập trường hợp là tập của các chuỗi nhị phân một bài toán cụ thể. Chúng ta nói rằng một thuật toán giải quyết một bài toán cụ thể với thời gian O(T(n)) nếu khi đó nó đã qui định một bài toán trường hợp i của độ dài n = |i|, thuật toán này có thể kéo dài giải pháp với thời gian O(T(n)). Một bài toán cụ thể có thể giải quyết thời gian đa thức, vì thế, nếu tồn tại một thuật toán để giải quyết nó với thời gian O(n k ) cho một vài hằng số k. Bây giờ chúng ta có thể định nghĩa hình thức độ phức tạp lớp P như tập các bài toán thỏa được cụ thể là có thể giải quyết được thời gian đa thức. Chúng ta có thể sử dụng mã hóa để ánh xạ các bài toán trừu tượng đến các bài toán cụ thể. Đưa ra một một bài toán trừu tượng thỏa được Q ánh xạ một trường hợp tập I đến {0,1}, một mã hóa e: I → {0,1}* có thể được dùng để đem lại một quan hệ bài toán thỏa được cụ thể, mà chúng ta biểu thị bởi e(Q). Nếu giải quyết một bài toán trừu tượng trường hợp i thuộc I là Q(i) ∈ {0,1}, sau đó giải quyết đến bài toán thỏa được cụ thể trường hợp e(i) ∈{0,1}* cũng là Q(i). Như một bài toán chuyên môn, có thể một số chuỗi nhị phân đại diện bài toán trừu tượng trường hợp không có nghĩa. Để thuận tiện, chúng ta sẽ thừa nhận rằng bất kỳ chuỗi nào đã ánh xạ tùy ý đến 0. Vì thế, bài toán cụ thể kéo dài các giải pháp như bài toán trừu tượng trên các trường hợp chuỗi nhị phân mà đại diện các mã hóa của các trường hợp bài toán trừu tượng. Chúng ta hãy mở rộng định nghĩa của thời gian đa thức có thể giải quyết được từ các bài toán cụ thể đến các bài toán trừu tượng bằng cách sử dụng các mã hóa như cầu nối nhưng chúng ta sẽ định nghĩa độc lập bất kỳ mã hóa riêng biệt. Đó là, khả năng giải quyết một bài toán không nên phụ thuộc vào cách mã hóa bài toán. Một cách đáng tiếc, nó phụ thuộc khá nhiều vào việc mã hóa. Chẳng hạn, cho rằng một số nguyên k đã được cung cấp như đặt dữ liệu vào một thuật toán và cho rằng thời gian chạy của thuật toán là θ(k). Nếu số nguyên k đã đưa ra in unary một chuỗi k 1’s- sau đó thời gian chạy của thuật toán là O(n) bằng độ dài n đặt vào, là thời gian đa thức. Tuy nhiên nếu chúng ta sử dụng nhị phân đại diện của số nguyên k, sau đó đặt vào độ dài là n=[lg k ] + 1. Trong trường hợp này, thời gian chạy của thuật toán là θ(k) = θ(2 n ), là số mũ tại kích cỡ của dữ liệu vào. Vì thế, sự phụ thuộc vào việc mã hóa, thuật toán chạy hoặc bằng thời gian đa thức hoặc bằng thời gian siêu đa thức. Việc mã hóa của một bài toán trừu tượng là khá quan trọng để chúng ta hiểu thời gian đa thức. Chúng ta thực sự không thể nói về việc giải quyết một bài toán trừu tượng mà không chỉ rõ một mã hóa đầu tiên. Việc mã hóa thực sự của một bài toán tạo ra một vài sự khác biệt đối với bài toán mà có thể đã giải quyết bằng thời gian đa thức. Chẳng hạn, đại diện các số nguyên trong đường đáy 3 thay vì ___________________ NP-đầy đủ 8 nhị phân không ảnh hưởng khi một bài toán có thể giải quyết bằng thời gian đa thức, vì một số nguyên đã được trình bày trong đường đáy 3 có thể chuyển đến một số nguyên đã được trình bày trong đường đáy 2 bằng thời gian đa thức. Chúng ta nói rằng một hàm số f : {0, 1}* → {0, 1}* là có thể tính thời gian đa thức nếu nó tồn tại một thuật toán thời gian đa thức A mà, cho bất kỳ dữ liệu vào x∈{0, 1}*, kéo dài như đưa ra f(x) . Đối với một số tập I của bài toán các trường hợp, chúng ta nói rằng 2 mã hóa e 1 và e 2 là đa thức quan hệ với nhau nếu chúng tồn tại 2 hàm có thể tính toán được đa thức thời gian f 12 và f 21 như đối với bất kỳ i ∈ I , chúng ta có f 12 (e 1 (i)) = e 2 (i) và f 21 (e 2 (i)) = e 1 (i). Đó là, mã hóa e 2 (i) có thể đã tính từ việc mã hóa e 1 (i) bằng một thuật toán thời gian đa thức và ngược lại. Nếu hai mã hóa e 1 và e 2 của một bài toán trừu tượng là đa thức quan hệ, thì bài toán đó là thời gian đa thức có thể giải quyết hoặc không là độc lập việc mã hóa chúng ta dùng như theo các biểu diễn bổ đề. Bổ đề 1 : Lấy Q là một bài toán trừu tượng thỏa được trên một trường hợp tập I, cho e 1 và e 2 là đa thức quan hệ mã hóa trên I. Thì, e 1 (Q)∈P khi và chỉ khi e 2 (Q)∈P. Chứng minh : Chúng ta chỉ cần chứng tỏ hướng tiếp tới, khi lùi lại là đối xứng. Vì thế, cho rằng, e 1 (Q) có thể đã giải quyết với thời gian O(n k ) cho một vài hằng số k . Hơn nữa, cho rằng đối với bất kỳ bài toán trường hợp i, việc mã hóa e 1 (i) có thể đã được tính từ việc mã hóa e 2 (i) với thời gian O(n c ) đối với một vài hằng số c, tại n=|e 2 (i)|. Để giải quyết bài toán e 2 (Q), trên dữ liệu vào e 2 (i), đầu tiên chúng ta tính e 1 (i) và sau đó chạy thuật toán cho e 2 (Q) trên e 2 (i). Mất thời gian bao lâu để chạy thuật toán đó? Thảo luận của các mã hóa mất thời gian O(n c ) và vì thế | e 1 (i)| = O(n c ), khi đưa ra một dãy tính không thể dài hơn thời gian chạy của nó. Giải quyết bài toán trên e 1 (i) mất thời gian O(|e 1 (i)| k ) = O(n ck ), là đa thức khi cả c và k là các hằng số. Vì thế, khi một bài toán trừu tượng có các trường hợp của nó đã mã hóa bằng nhị phân hoặc đường đáy 3 không ảnh hưởng đến “độ phức tạp” của nó, đó là khi nó là thời gian đa thức có thể giải quyết hoặc không, nhưng nếu các trường hợp đã mã hóa trong, độ phức tạp của nó có thể thay đổi. Để có thể nghịch đảo một kiểu mã hóa độc lập, tổng quát hoá chúng ta sẽ thừa nhận bài toán này các trường hợp đã mã hóa bằng bất cứ lý do nào, kiểu ngắn gọn, đặc biệt trừ khi chúng ta nói cách khác. Để thực hành, chúng ta sẽ thừa nhận mã hóa của một số nguyên này là đa thức quan hệ với nó mã hóa như một liệt kê các thành phần của nó, đã mã hóa trong các đôi và đã phân cách bởi dấu phẩy (dấu ngoặc kép). (ASCII là một giản đồ mã hóa). Với một “chuẩn” mã hóa bằng tay, chúng ta có thể lấy được từ lý do mã hóa của các đối tượng toán học, các đồ thị và các công thức. Để biểu thị chuẩn mã hóa của một đối tượng, chúng ta sẽ mã hóa đối tượng đó bằng góc các đôi. Vì thế, <G> biểu thị chuẩn mã hóa của một đồ thị G. ___________________ NP-đầy đủ 9 Về sau chúng ta hoàn toàn dùng một mã hóa là đa thức đã quan hệ với chuẩn mã hóa này, chúng ta có thể nói một cách hướng về các bài toán trừu tượng không tham chiếu đến bất kỳ mã hóa riêng biệt nào, biết rằng việc chọn mã hóa không ảnh hưởng đến bài toán trừu tượng là thời gian đa thức có thể giải quyết được. Tóm lại, từ nay về sau, chúng ta sẽ thừa nhận tất cả bài toán các trường hợp là các chuỗi nhị phân đã mã hóa dùng chuẩn mã hóa, trừ khi chúng ta định rõ ràng điều trái ngược. Chúng ta sẽ không chú ý sự khác biệt này giữa các bài toán trừu tượng và cụ thể. Người đọc nên xem các bài toán mà xuất hiện trong thực tiễn, tuy nhiên, bằng một chuẩn mã hóa là không rõ ràng và việc mã hóa là khác nhau. 1.3. Một khung ngôn ngữ hình thức (A formal-language frameword) : Một trong những khía cạnh thuận tiện tiêu điểm dựa trên các bài toán thỏa được là làm cho nó dễ sử dụng máy móc của lý thuyết ngôn ngữ hình thức. Điều quan trọng tại điểm này để xem lại một số các định nghĩa từ lý thuyết đó. Một bảng chữ cái Σ là một tập hạn chế các biểu tượng. Một ngôn ngữ L c với Σ là tập các chuỗi bất kỳ được tạo bởi các biểu tượng từ Σ. Ví dụ, nếu Σ = {0, 1}, tập L = {10, 11, 101, 111, 1011, 1101, 10001, } là ngôn ngữ của các đại diện nhị phân của các số hàng đầu. Chúng ta biểu thị chuỗi rỗng bởi ε và ngôn ngữ rỗng bởi ∅. Ngôn ngữ của tất cả các chuỗi qua Σ là biểu thị Σ*. Chẳng hạn, nếu Σ = {0, 1}, sau đó Σ* = {ε, 0, 1, 00, 01, 10, 11, 000, } là tập tất cả các chuỗi nhị phân. Mỗi ngôn ngữ L qua Σ là một tập con của Σ*. Có một thay đổi của các thao tác trên các ngôn ngữ. Các thao tác tập lý thuyết, như sự hợp và giao, theo hướng hoàn toàn từ các định nghĩa tập lý thuyết. * Chúng ta định nghĩa phần bù của L bởi L = Σ* - L. * Nối của hai ngôn ngữ L 1 và L 2 là ngôn ngữ : L = {x 1 x 2 : x 1 ∈L 1 và x 2 ∈L 2 }. * Closure hoặc Kleene star của một ngôn ngữ L là ngôn ngữ : L* = {ε} ∪ L ∪ L 2 ∪ L 3 ∪ , mà L k là ngôn ngữ đã được chứa bởi liên kết L đến chính nó với k thời gian. Từ điểm quan sát của ngôn ngữ lý thuyết, tập các trường hợp đối với bất kỳ các bài toán thỏa được Q là tập đơn giản Σ*, mà Σ = {0, 1}. Khi Q được mô tả trọn vẹn bởi bài toán các trường hợp này mà kết quả một 1(yes) trả lời, chúng ta có thể xem Q như một ngôn ngữ L qua Σ = {0, 1}, mà : L = {x ∈ Σ* : Q (x) = 1 }. Chẳng hạn, bài toán thỏa được PATH có ngôn ngữ tương ứng : PATH = {<G, u, v, k> : G = (V, E) là một đồ thị có hướng, u, v ∈ V, k ≥ 0 là một số nguyên và tồn tại một đường đi từ u đến v trong G đang chứa tại hầu hết các cạnh k }. Khung ngôn ngữ hình thức cho phép chúng ta diễn đạt mối quan hệ giữa các bài toán thỏa được và các thuật toán mà giải quyết chúng súc tích. Chúng ta nói rằng một thuật toán A chấp nhận một chuỗi x ∈ {0,1}* nếu đặt vào x , thuật ___________________ NP-đầy đủ 10 [...]... sau ú nú dựng A2 th khi f(x) L2 a ra A2 l giỏ tr cung cp nh a ra t A1 S ỳng n ca A1 theo iu kin (I) Thut toỏn ny chy vi thi gian a thc, khi c F v A2 chy vi thi gian a thc (xem hỡnh I.5) 3.2 NP-y (NP-completeness) : Cỏc rỳt gn thi gian a thc cung cp mt phng tin thụng thng cho vic biu din mt bi toỏn l ớt khú nh bi toỏn khỏc, qua mt tha s thi gian a thc ú l, nu L1 p L2 , thỡ L1 l tha s a thc khụng... bit n F (khi ngụn ng L thuc NP), khụng giỏ tr thc s Vỡ th, giỏo s kt lun rng F khụng th xõy dng mch C v ngụn ng CIRCUIT-SAT ú khụng nht thit l NP-khú Gii thớch theo lý do ca giỏo s 4 CC CHNG MINH NP-Y (NP-COMPLETENESS PROOFS) : B 8: Nu L l mt ngụn ngụn ng nh th L p L i vi mt s L NPC, thỡ L l NP- khú, hn na, nu L NP thỡ L NPC Chng minh: Khi L l NP-y , vi mi L NP, chỳng ta cú L p L bng s gi nh, L . pháp kỹ thuật chúng ta sử dụng để biểu diễn một bài toán riêng biệt là NP-đầy đủ khác với các phương pháp kỹ thuật đã sử dụng qua hầu hết cuốn sách này để thiết kế và phân tích các thuật toán. . nhị phân đơn giản đặt vào x mà giá trị là 0 hoặc 1, và cho ra một nhị phân dữ liệu ra g mà giá trị đối lập với giá trị đặt vào hai cổng khác lấy 2 nhị phân đặt vào x và y và cho ra một nhị phân. các chuỗi mà thuật toán đó chấp nhận. Một thuật toán A loại bỏ một chuỗi x nếu A(x) = 0. Thậm chí nếu ngôn ngữ L là đã chấp nhận bởi một thuật toán A, thuật toán này sẽ không cần thiết loại bỏ