Xin lỗi vì đã trả lời một bài viết cũ.
Tôi đã suy nghĩ về nó và tôi nghĩ rằng vấn đề với một bảng chữ cái cố định là NP-đầy đủ là tốt.
Tôi sẽ giảm SAT 1 trong 3 tích cực cho vấn đề từ này
Hôm qua tôi đã gặp khó khăn với những ý tưởng để giải quyết vấn đề. Tôi gặp khó khăn khi làm cho mỗi biến số khác nhau cho đến khi tôi nhìn lại câu hỏi và tôi nhận ra rằng bạn cho phép có hình vuông với các biểu tượng được trồng. Điều này đơn giản hóa việc giảm rất nhiều. Ý tưởng khác của tôi là có các từ có độ dài khác nhau cho mỗi biến khác nhau.
GIẢM
Bây giờ tôi sẽ mô tả các tiện ích chúng ta sẽ sử dụng:
Tiện ích biến
Chúng tôi dán nhãn cho mỗi biến với một chỉ số số khác nhau và chúng tôi sẽ có một số khác nhau cho mỗi biến. Chúng tôi chọn chỉ số lớn nhất và chúng tôi đại diện cho số ở dạng nhị phân, chúng tôi sẽ gọi chuỗi nhị phân này là .n
Sau đó, chúng tôi tạo ra hai từ dọc khác nhau cho mỗi biến. Tất cả các từ sẽ có độ dài(Chỉ khi chúng tôi cho phép các từ trùng lặp trong danh sách các từ), trong đólà độ dài của chuỗi nhị phân .3+|n||n|n
Chẳng hạn, hãy để chỉ số lớn nhất là số . Khi chúng ta chuyển đổi số này thành nhị phân, chúng ta thu được chuỗi ở dạng nhị phân, chuỗi này có độ dài là ba. Vì vậy, mỗi từ biến sẽ có độ dài trong ví dụ này.41006
Bây giờ chúng tôi tạo hai từ khác nhau cho mỗi biến. Một từ sẽ có ký hiệu ở đầu, sau đó là ký hiệu bên dưới, sau đó là chuỗi nhị phân đại diện cho chỉ số của biến và chúng ta đệm với số 0 sao cho chuỗi có cùng độ dài chuỗi và cuối cùng là ký hiệu cuối cùng. Tất nhiên các biểu tượng có thể được thay đổi.32n3
Một từ khác gần giống nhau nhưng nó sẽ có ký hiệu thay vì ký hiệu .43
Chẳng hạn, hãy để chỉ số lớn nhất là số . Chúng ta sẽ có hai từ sau cho biến có chỉ số :41
320013 và420014
Như chúng ta thấy, chúng ta đã đệm phần nhị phân của số bằng các số 0 sao cho nó có độ dài1|n|
Chúng ta phải sao chép những từ này nhiều lần, chúng ta sẽ cần một bản sao của mỗi từ cho mỗi lần xuất hiện của một biến trong ví dụ SAT. Điều này sẽ tạo ra các bản sao trong danh sách các từ. Chúng ta có thể loại bỏ các bản sao bằng cách thêm một chuỗi nhị phân khác vào chuỗi nhị phân xác định duy nhất biến đó. Chuỗi mới này sẽ xác định duy nhất từng thông số của một biến.
Để làm điều đó, chúng ta chỉ cần gán mỗi ocurrence của biến nhị phân một chuỗi khác và chúng ta tạo ra chuỗi đó ở cuối biểu diễn nhị phân của biến.
Để tạo chuỗi nhị phân mới này trước tiên chúng ta phải tạo một chỉ mục khác nhau cho mỗi biến, chúng ta gọi số lớn nhất trong mỗi chỉ số trong đó là định danh cho mỗi biến. Sau đó, chúng tôi chuyển đổi số thành chuỗi nhị phân và sau đó chúng tôi đếm chiều dài của chuỗi, chúng tôi gọi số này. Sau đó, đối với mỗi chỉ mục, chúng tôi tạo một số nhị phân khác nhau cho mỗi lần xuất hiện của biến. Chúng tôi đệm số bằng 0 cho đến khi độ dài của chuỗi nhị phân trở thànhsao cho tất cả các từ thuộc về mỗi độ dài của biến có cùng độ dài.niini|ni||ni|
Điều này sẽ loại bỏ các bản sao bên trong các từ biến.
Chẳng hạn, giả sử biến xuất hiện ba lần trong ví dụ SAT. Chúng tôi tạo ra các từ sau:x2
32010013 42010014 , và32010103 4201010432010113 42010114
Điều khoản tiện ích
Đối với mỗi tiện ích mệnh đề, chúng tôi sẽ tạo ba từ ngang mới, mỗi từ mệnh đề sẽ có độ dài ô vuông (Chỉ khi chúng tôi cho phép các từ trùng lặp trong danh sách các từ). Đây là những từ mà chúng tôi sẽ tạo cho mỗi mệnh đề:6
535354 , và535453545353
Chúng ta có một từ mệnh đề khác nhau cho mỗi cách có thể thỏa mãn mệnh đề, ký hiệu đại diện cho một tập hợp chữ thành đúng và ký hiệu đại diện cho một tập hợp chữ thành sai. Số được sử dụng để chỉ ra rằng đó là một từ mệnh đề.435
Sẽ có các từ lặp đi lặp lại trong danh sách các từ, chúng ta có thể thoát khỏi sự lặp lại bằng cách sử dụng thủ tục mà chúng ta đã sử dụng để xác định duy nhất các từ biến. Đó là, chúng tôi tạo ra một chuỗi nhị phân khác nhau cho mỗi mệnh đề và chúng tôi nối thêm từng chuỗi vào các mệnh đề từ tương ứng với từng mệnh đề. Để làm điều đó, chúng tôi tạo một chỉ mục mới cho các mệnh đề và chúng tôi chọn số lớn nhất của chỉ mục, chúng tôi sẽ gọi số này là . Chúng tôi biểu diễn là một chuỗi nhị phân và chúng tôi gọi độ dài của chuỗi nhị phân này là. Bây giờ, chúng tôi tạo một số nhị phân khác nhau cho mỗi mệnh đề, bắt đầu bằng số 1 và chúng tôi đệm số đó bằng các số 0 để tạo chuỗi nhị phân có độ dàimm|m||m|. Chúng tôi nối từng chuỗi nhị phân vào các từ mệnh đề thuộc về mệnh đề.
Bây giờ, hãy để những người khác nhìn thấy một hình ảnh của một tiện ích mệnh đề trong bảng:
Ví dụ này đại diện cho mệnh đề và ví dụ 1 trong 3 bị giảm là(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
Như chúng ta thấy, có những hình vuông được viết. Các cột dọc có ký hiệu viết để chỉ ra những chữ nào bên trong mệnh đề. Phần cuối và phần đầu của cột là các ô vuông trống. Điều này cho phép người chơi chọn giá trị của biến. Các ký hiệu được đánh dấu trong hàng ngang buộc người chơi phải đặt một mệnh đề từ trong hàng đó. Bởi vì tất cả các từ mệnh đề chỉ có một ký hiệu duy nhất có nghĩa là chỉ một trong số các chữ nằm trong tiện ích mệnh đề có thể được đặt thành "true".4
Nếu chúng tôi không cho phép trùng lặp trong danh sách các từ, chúng tôi sẽ phải sửa đổi hình ảnh.
Hàng mệnh đề trong hình ảnh sẽ trở thành: và các cột theo nghĩa đen sẽ là, từ trái sang phải:5b5b5b10
b201010b , vàb201110bb21001b
Trong đó ký hiệu có nghĩa là ô vuông trốngb
Xem một ví dụ:
Tiện ích thống nhất biến
Đây là một tiện ích đảm bảo rằng người chơi chỉ có thể gán cùng một giá trị cho tất cả các cột bằng chữ của một biến.
Chúng tôi sẽ có một tiện ích mới cho mỗi biến
Chúng tôi sẽ tạo hai từ mới cho mỗi tiện ích.
Độ dài của từ sẽ phụ thuộc vào số lần hiển thị của một biến. Độ dài của một từ sẽ là trong đó là số lần hiển thị của một biến. Vì vậy, nếu biến xuất hiện hai lần trong trường hợp sat, các từ sẽ có độ dài bốn. Một trong hai từ được hình thành bằng cách lặp lại chuỗi lần, trong đó k là số lần xuất hiện của biến. Một từ khác được hình thành bằng cách lặp lại chuỗi lần, trong đó k là số lần xuất hiện của biến trong trường hợp SAT bị giảm.2∗kkx263 k64 k
Chẳng hạn, nếu một biến có hai quãng, các từ thuộc về tiện ích gán biến tương ứng sẽ là:x2
6363 và6464
Nếu chúng ta muốn tránh các từ lặp đi lặp lại, hãy lưu ý rằng mỗi tiện ích nhất quán thuộc về một biến khác nhau. Vì vậy, chúng ta có thể nối thêm chuỗi nhị phân xác định từng biến vào hai từ mà chúng ta đã tạo cho tiện ích này.
Bây giờ, hãy để những người khác xem hình ảnh ví dụ về tiện ích này:
Tiện ích này dành cho biến và ví dụ 1 trong 3 được giảm là .x2(x1∨x2∨x3)∧(x2∨x3∨x4)
Như chúng ta thấy, có hai hàng ngang, các ký hiệu được viết bên trong các hàng đảm bảo rằng chúng ta chỉ có thể đặt các từ có chứa các ký hiệu đó, các từ đó là các từ mà chúng ta đã tạo cho tiện ích này. Trong một trong các hàng, chúng tôi thấy rằng có hai cột đi vào, vì các ký hiệu được đặt trong các cột, chúng tôi đảm bảo rằng chúng tôi chỉ có thể đặt các từ biến. Bởi vì các từ duy nhất chúng ta chỉ có thể đặt trên hàng thống nhất biến chỉ có ký hiệu hoặc chỉ ký hiệu trong đó, chúng tôi buộc người chơi phải đặt tất cả các từ biến với ký hiệu đó bên trong tiện ích. Điều này có nghĩa là các từ biến duy nhất có sẵn được đặt bên trong các tiện ích mệnh đề chỉ có ký hiệu hoặc chỉ ký hiệu3434. Chúng ta có thể đặt từ còn lại của gagdet này vào hàng khác
Nếu chúng tôi không cho phép trùng lặp trong danh sách các từ, các từ bên trong hình ảnh ví dụ sẽ là:
Đối với các hàng:
6b6b010 và6b6b010
Đối với các cột:
b201001b vàb201010b
Trong đó ký hiệu có nghĩa là ô vuông trốngb
Xem một ví dụ:
Điều khoản tiện ích đổ
Đây là một tiện ích được tạo để đặt các từ mệnh đề không sử dụng. Để làm điều đó, chúng ta chỉ phải đặt hai hàng cho mỗi từ mệnh đề trong một phần trống của bảng. Các hàng này không được kết nối với bất kỳ hàng hoặc cột khác.
Với điều này, chúng tôi hoàn thành việc giảm, vì chúng tôi tuyên bố chúng tôi chỉ cần 6 biểu tượng cho việc giảm.
Thí dụ
Nếu lời giải thích trước đó gây nhầm lẫn, thì đây là hình ảnh ví dụ về trường hợp tích cực 1 trong 3 SAT đã được giảm cho vấn đề từ này:
Nếu chúng tôi không cho phép các từ lặp đi lặp lại:
Ví dụ đã được giảm là:
(x1∨x2∨x3)∧(x2∨x3∨x4)