Một tuần trong lớp lý thuyết phức tạp của tôi ở trường đại học, vấn đề bài tập về nhà duy nhất của chúng tôi là chứng minh rằng # 2-SAT đã hoàn thành # P, bằng cách giảm từ #BIPARTITE MATFING. Không ai có thể giải quyết nó, ngay cả khi cuối cùng tất cả chúng ta đã cùng nhau làm việc với nó.
Lớp tiếp theo, giáo sư ngạc nhiên về việc chúng tôi đã tìm thấy nó khó khăn như thế nào và đưa ra bằng chứng của mình. Đó là sai. May mắn thay, một cookie thông minh đã có thể đưa ra mức giảm chính xác, điều này hoàn toàn điên rồ và phức tạp ghê tởm. Nhân tiện, giáo sư có giải thưởng Turing :)
Dù sao, trong khi tôi và các bạn cùng lớp không thể giải quyết vấn đề đó, chúng tôi đã có thể giải quyết vấn đề dễ dàng hơn để giảm từ #BIPARTITE MATCHING xuống # 2-SAT, vì vậy đây là bằng chứng tôi đã đưa ra vài năm trước.
Định lý. #BIPARTITE MATCHING # 2-SAT.≤p
Bằng chứng . Đặt là một thể hiện của #BIPARTITE MATCHING. Đặt các phân vùng là
(vì vậy và ) .A = { a i ∣ i ∈ [ n ] } ,G = ( V, E)| Một | = n | B | = m
A = { aTôi∣ i ∈ [ n ] } ,B = { bTôi| I ∈ [ m ] }
| Một | =n| B | =m
Bây giờ chúng ta giảm để một công thức 2SAT , sao cho mỗi bài tập đáp ứng của là một kết hợp của , và ngược lại. Để bắt đầu, với mỗi cạnh tạo một biến . Ý tưởng là cài đặt biến thành TRUE tương ứng với cạnh nằm trong khớp. Với mỗi đỉnh , hãy tạo các biểu thức 2SAT
Để được thỏa mãn, tất cả, nhưng nhiều nhất một trong số phải là sai. Để thấy điều này, giả sử cả haiGφφGmộtTôibj∈ Extôi jxtôi jmộtTôibjTôiMột i x i j x i j x i k ( ¬ x i j ∨ ¬ x i k ) Một i B i C = n ⋀ i = 1 A i ∧ m ⋀ i = 1 B
MộtTôi= ⋀j < k( ¬ xtôi j∨ ¬ xtôi k) ,BTôi: = ⋀j < k( ¬ xj i∨¬ xk tôi)
MộtTôixtôi jxtôi jvà là đúng. Khi đó là sai và cũng vậy . Điều tương tự giữ cho . Để
chúng ta có hài lòng khi và chỉ khi mỗi đỉnh trong là sự cố xảy ra với nhiều nhất một cạnh chúng ta chọn, và do đó các cạnh tạo thành một khớp.
xtôi k( ¬xTôij∨ ¬xTôik)MộtTôiBTôi C GC= ⋀i = 1nMộtTôi∧ ⋀i = 1mBTôi
CG