Là vấn đề tìm toán tử để thỏa mãn danh sách các biến boolean NP hoàn chỉnh?


11

Điều này tương tự với SAT, ngoại trừ việc chúng ta biết phép gán của từng biến, nhưng không biết phép gán của bất kỳ toán tử boolean nào. Trong trường hợp đó, việc tìm sự gán của mỗi toán tử để biểu thức ước lượng cho một giá trị boolean đã cho có phải là vấn đề NPC không?

Trên thực tế, tôi đã tự hỏi nếu tìm sự phân công của các toán tử số học để đáp ứng một biểu thức số học số nguyên (ví dụ: 1 op1 3 op2 7 op3 op4 = 10) liệu NP có hoàn thành không?


2
Vì vậy, nếu tôi hiểu chính xác, bạn biết rằng công thức là thỏa đáng và bạn muốn biết một phép gán của các toán tử boolean. Chỉ cần gán các điều hành cho tất cả các "biến điều hành" và bạn đã làm xong. Tôi không biết về vấn đề thứ hai, nhưng có vẻ thú vị.
George

3
@GeorgeB: Tôi không nghĩ giải pháp đó là chính xác. Điều gì xảy ra nếu tất cả các giá trị Boolean được đặt thành false? Câu hỏi này rất thú vị, nhưng có thể cần một chút công việc. Chúng ta đang chọn tập hợp toán tử Boolean nào? Có lẽ bạn có nghĩa là một tập hợp con thú của toán tử Boolean nhị phân như {,,} . Nếu bạn bao gồm tất cả các toán tử Boolean nhị phân, thì vấn đề là không đáng kể - chỉ cần chọn bản đồ không đổi thành 'true'.
Huck Bennett

1
Như Huck đã nói, chọn cho tất cả i . Tuy nhiên nếu bạn giới hạn các toán tử trong một tập hợp cụ thể thì câu hỏi sẽ thú vị hơn. Tương tự cho trường hợp số học. xopiy=1i
Kaveh

có vẻ như nó có thể có một số kết nối với QBF hoặc có thể giảm xuống. có lẽ một QBF có thể được xây dựng mà khi giải quyết, cung cấp cho các toán tử. đúng? khi kiểm tra nhanh, có vẻ như nó có thể hoàn thành Pspace ... bạn cũng phải xác định quyền ưu tiên nếu không có dấu ngoặc đơn. VÀ cao hơn HAY? vấn đề có vẻ tự nhiên hơn có thể khi dấu ngoặc đơn / nhóm có thể được xác định.
vzn

@GeorgeB. Tôi xin lỗi tôi đã không làm cho nó rõ ràng. Việc đánh giá biểu thức boolean có thể là bất kỳ giá trị boolean đã cho nào, 0 hoặc 1.
DSounders

Câu trả lời:


10

Với phép cộng và phép trừ, tôi nghĩ vấn đề Phân vùng , là NP-hard, làm giảm vấn đề thứ hai của bạn.

Cho một tập chúng ta tạo ra vấn đềS={s1,s2,,sn}

o p 1 s 2 o p 2 s 3 o p 3 ... o p n - 1 s n = 0 . s1 op1 s2 op2 s3 op3 opn1 sn=0

Nếu một giải pháp tồn tại, chúng tôi tạo hai bộ:

S1={s1}{si|opi1=+}

S2={si|opi1=}

Hai bộ này phải có cùng một tổng bằng cách thiết lập vấn đề ban đầu của chúng tôi, vì vậy vấn đề phân vùng được giải quyết. Điều này cho thấy không chỉ khó đưa ra giải pháp thực tế cho vấn đề này, mà trên thực tế NP cũng khó xác định liệu có tồn tại một giải pháp hay không (ít nhất là cho phép cộng và trừ).

Đối với một tập hợp các hoạt động không cho phép tạo các số nguyên âm, giả sử nhân và cộng, điều đó không rõ ràng lắm. Ngoài ra, điều này chỉ cho thấy vấn đề là NP-hard yếu; có thể có một mức giảm cho kết quả mạnh hơn mức này.


1
Tôi nghĩ rằng bằng chứng của bạn có thể được điều chỉnh để các trường hợp khá dễ dàng, chỉ cần đặt vấn đề mục tiêu của 1 ... s n = 1 . Khi đó, một giải pháp ngụ ý mẫu số giống như tử số (giả sử s i > 0 với mọi i ). Tất nhiên điều này không cung cấp cho bốn trường hợp vận hành, nhưng sau đó chúng tôi cũng phải xử lý thứ tự các hoạt động. ×/÷s1sn=1si>0i
Luke Mathieson

Cảm ơn, @Sam và Luke. Nếu chúng ta trộn cả bốn toán tử thì sao? Theo trực giác có nhiều toán tử sẽ chỉ làm cho vấn đề trở nên phức tạp hơn, nhưng tôi không thấy một bằng chứng rõ ràng.
DSounders

Vẫn đang suy nghĩ về cả bốn. Chúng ta cũng có thể nhận được một cách dễ dàng, nhưng đó vẫn chỉ là hai lần. +/÷
Luke Mathieson

1
Ngoài ra, một tài liệu tham khảo cho (mạnh) -completeness của PARTITION SẢN PHẨM: "‘phân vùng sản phẩm’và các vấn đề có liên quan lập kế hoạch và hệ thống tin cậy: tính toán phức tạp và xấp xỉ" sciencedirect.com/science/article/pii/S0377221710003905NP
Luke Mathieson

4

Câu trả lời ngắn. Phiên bản toán tử của SAT có thể giải quyết một cách hiệu quả - ít nhất, nếu chúng ta giả sử các mạch tùy ý của hai cổng đầu vào không có quạt ra, trên bất kỳ lựa chọn nào về cổng đặt.

Câu trả lời dài. Tôi giả sử dạng sau của bài toán boolean:

x{0,1}nn2 C G x x x CGCG xxxC

Cụ thể, chúng tôi không áp dụng cấu trúc cụ thể nào cho các mạch (ngoài việc là cây nhị phân), không cho phép quạt ra (để mỗi bit của chỉ được sử dụng một lần) và các cổng có thể không đối xứng. Bằng cách chỉ cho phép các cổng hai bit, tôi loại trừ cổng NOT (nhưng có thể được mô phỏng bằng cách có nhiều cổng có liên quan với nhau bằng cách phủ định, chẳng hạn như AND / NAND ; và tôi cũng loại trừ các cổng chỉ đơn giản là đầu ra không có đầu vào , do đó, số lượng cổng trong mạch trên thực tế sẽ luôn là cho đầu vào -bit. Để cho ngắn gọn, tôi sẽ đề cập đến 2-TREE-OPSAT dưới đây đơn giản là OPSATx n - 1 nCxn1n; mặc dù phân tích các vấn đề có thể trở nên khó khăn hơn nhiều cho mạch cho phép tùy ý k -input cửa ( k-TREE-OPSAT ) hoặc cho phép người hâm mộ-out (mà chúng ta có thể gọi là k-fanout-OPSAT ).

[ Đã chỉnh sửa để thêm : chúng tôi có thể dễ dàng điều chỉnh vấn đề này để xem xét vấn đề chung hơn về sửa đổi hiện tại của câu hỏi của bạn, trong đó chúng tôi cố gắng ánh xạ vào giá trị đích , bằng cách hoán đổi vai trò của và trong phân tích bên dưới; điều này có tác dụng hoán đổi vai trò của ANDOR , NANDNOR , v.v. ] b { 0 , 1 } 0 1x{0,1}b{0,1}01

Đối với lựa chọn cố định , vấn đề chọn cây phù hợp với cổng phù hợp không giống như phân biệt logic: sử dụng các tương đương như chúng tôi có thể thực hiện giảm giữa các bộ sưu tập liên quan đến các bộ cổng phức tạp hơn đối với các bộ cổng đơn giản (và mạnh mẽ); a có thể nói về một bộ cổng có thể mô phỏng các cổng khác không thuộc về bộ đó, bằng cách chọn khôn ngoan một số phần tử của có cùng tác dụng (khi được trình bày với một đầu vào cụ thể) như một cổng . Cụ thể, một số tổ hợp cổng nhất định (chẳng hạn như ) có thể mô phỏng chức năng không đổi mang lạiHOẶC ( x , y )x{0,1}n G G G { OR , NAND } 1

OR(x,y)(AND(x,y)PARITY(x,y))
GGG{OR,NAND}1: chúng tôi nói rằng các bộ cổng như vậy là tautologous .

Chúng tôi tiến hành bằng cách xem xét các bộ cổng bao gồm các loại cổng khác nhau , sau đó loại trừ các cổng đó khỏi các trường hợp phân tích sau này, để chỉ ra rằng các bộ cổng liên quan đến bất kỳ một trong các cổng nào dẫn đến sự cố có thể xảy ra. Chúng ta sẽ tiến hành theo thứ tự số chuỗi hai bit thỏa mãn cổng đang xét, bắt đầu từ cổng không đổi đến cổng không đổi .1 0G10

  1. Đối với bất kỳ cổng nào được đặt chứa cổng , chúng ta có thể chỉ cần xây dựng một mạch sử dụng cổng đó, trong trường hợp chấp nhận bất kỳ . G ( x , y ) = 1 C C xGG(x,y)=1CCx

  2. HOẶC và NAND. Đối với bất kỳ cổng nào được đặt chứa : nếu tất cả các cổng khác thỏa mãn , thì không có lợi thế nào khi chọn bất kỳ cổng nào khác ngoài trong việc xây dựng các mạch . Một mạch chỉ có các cổng chấp nhận bất kỳ chuỗi nào ngoại trừ . Mặt khác, tồn tại một cổng sao cho là tautologous. Vì vậy, mọi trường hợp của OPSAT với đều dễ dàng; và nhận xét tương tự áp dụng cho .HOẶC G G G ( x , y )GORGGHOẶC C HOẶC x 0 * G G { G , HOẶC } HOẶCG NANDGG(x,y)OR(x,y)ORCORx0GG{G,OR}ORGNANDG

  3. Cổng giống như ngụ ý. Hãy xem xét cổng , chỉ xuất ra 0 nếu . Đối với những gì tiếp theo, một phân tích tương tự sẽ được áp dụng cho cổng . Hãy xem xét bất kỳ chuỗi . Nếu kết thúc bằng , hãy phân tách thành các chuỗi con có dạng ; trên mỗi như vậy , chúng tôi áp dụng đệ quy từ phải sang trái, mang lại đầu ra cho mỗi . (Đối với một chuỗi con có độ dài 1, chúng tôi sử dụng mạch tầm thường, nghĩa là để riêng đầu vào đó.) Tương tự, nếu( x , y ) = ( 1 , 0 ) G ' ( x , y ) = x ¬ y x { 0 , 1 } n x 0 x w j = 1 * 0 w j G 0 w j x 1 x wG(x,y)=¬xy(x,y)=(1,0)G(x,y)=x¬y

    x{0,1}nx0xwj=10wjG0wjx kết thúc bằng , phân tách thành các chuỗi con có dạng và áp dụng đệ quy từ trái sang phải trên mỗi , tạo ra đầu ra cho mỗi . Do đó, chúng tôi có thể giảm vấn đề để xây dựng các mạch được thỏa mãn bằng hoặc , trong đó là số lượng các chuỗi con hoặc . Đối với , chúng tôi có thể chấp nhận sử dụng cổng bằng cách áp dụng đệ quy từ trái sang phải. Điều này chỉ để lại trường hợp1xG w j 1 w j 0 m 1 m m 1 * 0 0 * 1 m 2 G G m = 1 x 1 * 0 x = 1 * 0 G 1 * 0 0 G H G H ( 1 , 0 ) = 1 { G , Hwj=01Gwj1wj0m1mm1001m2GGm=1 , trong đó trường hợp có vấn đề là đầu vào . Đối với , bất kỳ mạch bao gồm duy nhất của cửa sẽ chỉ mang lại chuỗi ngắn hơn có dạng , cuối cùng năng suất chuỗi single-bit : để không mạch của cổng có thể được thỏa mãn bởi đầu vào này. Nếu cũng có một cổng mà , thì là tautologous; hoặc, nếu có một cổng mà , chúng tôi có thể giảm các chuỗi có dạngx10

    x=10G100GHGH(1,0)=1H G H ( 1 , 1 ) = 0 11 * 0 ( 1 * 0 ) * H x x 1 * 0 G{G,H}HGH(1,1)=0110cho các chuỗi có dạng , bằng cách áp dụng cho hai bit đầu tiên của . Mặt khác, không có mạch nào có thể được xây dựng chấp nhận . Do đó, đối với bất kỳ bộ cổng nào chứa cổng giống như hàm ý, OPSAT rất dễ dàng.(10)Hxx10

    G

  4. Tiêu cực của dự đoán. Hãy xem xét các cổng và . Chúng tôi coi , phân tích với tương tự nhau. Về bản thân, có thể chấp nhận bất kỳ chuỗi nào trong cho bằng cách giảm các bit cuối cùng xuống một bit, sau đó áp dụng ; và nó có thể chấp nhận tương tự cho bằng cách giảm các bit cuối cùng thành một bit, sau đó áp dụng mạch¬ π 2 ( x , y ) = ¬ y ¬ π 1 ¬ π 2 ¬ π 1 0 ( 0 | 1 ) n - 1 n 2 n - 1 ¬ π 1 1 ( 0 | 1 ) n - 1 n 3¬π1(x,y)=¬x¬π2(x,y)=¬y¬π1¬π2¬π10(0|1)n1n2n1¬π11(0|1)n1n3¬ π 1 ( ¬ π 1 ( x 1 , x 2 ) , x 3 ) ¬ π 1 10 11n2¬π1(¬π1(x1,x2),x3). Các đầu vào duy nhất mà các mạch không thể chấp nhận là hoặc ; xác định xem bất kỳ cổng bổ sung chấp nhận những điều này là tầm thường. Do đó, OPSAT dễ dàng cho các phủ định của các phép chiếu.¬π11011

  5. PHỤ TÙNG VÀ THIẾT BỊ . Hãy xem xét cổng . Bộ cổng rõ ràng chỉ có thể được thỏa mãn chính xác bởi các chuỗi với số lẻ 1s; chúng tôi xem xét lợi ích của việc thêm bất kỳ cổng khác.G = { chẵn lẻ } x { 0 , 1 } nPARITY(x,y)=(x¬y)(¬xy)G={PARITY}x{0,1}n

    • Bất kỳ bộ cổng nào chứa cả và hoặc đều có thể mô phỏng các mạch có hoặc (tương ứng) cho các đầu vào cố định, tương ứng trường hợp dễ dàng của OPSAT .NOR ( x , y ) = ¬ ( x y ) HOẶC NANDPARITYANDNOR(x,y)=¬(xy)ORNAND
    • Hoặc hoặc có thể được sử dụng để mô phỏng một trong hai hay trên chuỗi con hai bit chẵn lẻ thậm chí, để chúng ta có thể làm giảm cổng-bộ với những cổng và cho trường hợp trước.π 2 ( x , y ) = y NOR chẵn lẻπ1(x,y)=xπ2(x,y)=yANDNORPARITY
    • EQUAL = ¬ chẵn lẻPARITY cùng với là tautologous.EQUAL=¬PARITY
    • Nếu chúng tôi bổ sung bằng cổng , chúng tôi có thể chấp nhận bất kỳ chuỗi chẵn lẻ nào ngoại trừ bằng cách áp dụng cho một chuỗi chuỗi và sau đó áp dụng mạch cho phần còn lại. Tương tự, cùng với có thể chấp nhận bất kỳ chuỗi nào ngoại trừ các chuỗi có dạng . Bổ sung bằng cả và cho phép chúng tôi xây dựng các mạch chấp nhận tất cả các đầu vào ngoại trừ vàG 01 = ¬ x y x ( 11 ) * 0 * G 01 01 x chẵn lẻ chẵn lẻ G 10 = x ¬ y x 0 * ( 11 ) * chẵn lẻ G 01 G 10 x 0 * x = 11PARITYG01=¬xyx(11)0G0101xPARITYPARITYG10=x¬yx0(11)PARITYG01G10x0x=11 .
    • Cuối cùng, nếu chúng tôi bổ sung với cổng , chúng tôi có thể chấp nhận mọi đầu vào ngoại trừ hoặc bằng cách áp dụng cổng cho một chuỗi con hoặc , giảm đến trường hợp chẵn lẻ. Z ( x , y ) = 0 x ( 11 ) * x 0 * G 01 10PARITYZ(x,y)=0x(11)x0G0110

    Do đó, OPSAT dễ dàng cho mọi có chứa . Một phân tích tương tự áp dụng cho cổng như đối với cổng : bởi vì , các mạch của Cổng về cơ bản đếm số chẵn của số s trong đầu vào. Sau đó, chúng tôi có thể giảm phân tích cho xuống còn bằng cách trao đổi và .chẵn lẻ EQUAL chẵn lẻ EQUAL ( x , y ) = ¬ chẵn lẻ ( x , y ) = ¬ chẵn lẻ ( ¬ x , ¬ y ) EQUAL 0 EQUAL chẵn lẻ 0 1GPARITY

    EQUALPARITYEQUAL(x,y)=¬PARITY(x,y)=¬PARITY(¬x,¬y)EQUAL0EQUALPARITY01

  6. Cổng chiếu. Các cổng và , chỉ có thể tự xây dựng các mạch chấp nhận các chuỗi bắt đầu hoặc kết thúc bằng , tương ứng. Hãy xem xét hiệu quả của việc tăng cổng với bất kỳ cổng nào khác (một phân tích tương tự giữ cho ):π 2 ( x , y ) = y 1 π 1 π 2π1(x,y)=xπ2(x,y)=y1π1π2

    • Cho phép cả và cho phép xây dựng mạch "lựa chọn", chỉ đơn giản là xuất ra bất kỳ bit nào từ đầu vào; những cái này có thể chấp nhận bất kỳ và bổ sung chúng với bất kỳ cổng nào mà cho phép xây dựng một mạch thỏa mãn cho bất kỳ nào .π 2 x 0 n G G ( 0 , 0 ) = 1 xπ1π2x0nGG(0,0)=1x
    • Nếu chúng tôi bổ sung bằng hoặc , chúng tôi có thể mô phỏng hoặc một cổng giống như ngụ ý cho các đầu vào cố định; OPSAT được giải quyết cho cả hai trường hợp này.BẮC G 01 = ¬ x y HOẶCπ1NORG01=¬xyOR
    • Nếu chúng tôi bổ sung bằng , , cổng không đổi hoặc bất kỳ kết hợp nào của chúng, chúng tôi sẽ không có thêm sức mạnh chấp nhận, do đó chúng tôi không vẫn chỉ có thể chấp nhận chuỗi bắt đầu bằng .G 10 = x ¬ y Z ( x , y ) = 0 1π1ANDG10=x¬yZ(x,y)=01

    Do đó, đối với bất kỳ cổng nào khác, chúng tôi có thể bổ sung (hoặc ) với, chúng tôi có được một bộ tautologous, không có thêm sức mạnh chấp nhận đối với chỉ (hoặc ) hoặc có thể giảm xuống thành trường hợp dễ dàng trước đó của OPSAT . Sau đó, mọi trường hợp của OPSAT với hoặc đều dễ dàng.π 2 π 1 π 2 π 1G π 2Gπ1π2π1π2π1Gπ2G

  7. Cổng chức năng Delta. Hãy xem xét các cổng hai bit chỉ có một đầu vào thỏa mãn chúng: , , và . Các mạch được tạo chỉ với các cổng chỉ có thể chấp nhận chuỗi : bổ sung chúng bằng bất kỳ cổng chức năng delta nào khác cho phép chúng mô phỏng cả , hoặc , là các trường hợp đã giải quyết; nhận xét tương tự áp dụng cho . Đồng thời, bộ cổng cũng có thể được sử dụng để mô phỏngNOR G 10 ( x , y ) = x ¬ y G 01 ( x , y ) = ¬ x y 1 * EQUAL pi 1 π 2 NOR { G 01 , G 10 } chẵn lẻ G 10 G 01 Z ( x , y ) = 0 G 10 G 01ANDNORG10(x,y)=x¬yG01(x,y)=¬xyAND1EQUALπ1π2NOR{G01,G10}PARITYcánh cổng. Do đó, chúng tôi có thể tập trung vào cổng hoặc , có thể được bổ sung với cổng . Chúng tôi tập trung vào , với trường hợp tương tự nhau. Có thể xây dựng các mạch chỉ bằng để chấp nhận , ngoại trừ chuỗi , bằng cách áp dụng một mạch tùy ý cho các bit cuối cùng và sau đó áp dụng mạch cuối cùng . Rõ ràng, chuỗi không thể được chấp nhận bởi hoặc bởi ; và chúng ta có thể hiển thị bằng cảm ứng rằng bất kỳG10G01Z(x,y)=0G10G01

    1 ( 0 | 1 ) n - 1 11 n - 2 G 10 ( x 1 , G 10 ( x 2 , x 3 ) ) 11 G 10 Z G 10 1 Z G 10 x 1 ( 0 | 10 | 11 ) ( 0 | 1 ) *G101(0|1)n111n2G10(x1,G10(x2,x3))11G10ZG10mạch chấp nhận một chuỗi phải có kết quả trung gian của các cổng ở nhánh ngoài cùng bên trái, tất cả đều cho năng suất , cho đến chính đầu vào bên trái nhất. Không có lợi ích bổ sung có được bằng cách thêm các cổngDo đó, các mạch chỉ có thể chấp nhận .1ZG10x1(0|10|11)(0|1)

  8. Cuối cùng, các mạch chỉ gồm các cổng chấp nhận không có đầu vào.Z

Như mỗi cổng làm phát sinh một được xác định rõ và nói chung là khá lớn lớp đầu vào mà nó chấp nhận, với cửa thêm khuynh hướng tầm thường hóa vấn đề, chúng tôi thấy rằng 2-TREE-OPSAT là trong P .


1
@DSounders: liên quan đến sửa đổi gần đây của bạn về vấn đề để xác định xem có mạch nào ánh xạ đến một số giá trị đích , thay vì chỉ trường hợp đặc biệt , giống nhau phân tích như trong câu trả lời hiện tại của tôi vẫn đủ cho thấy rằng vấn đề nằm ở P ; chỉ vai trò của các cổng thay đổi. Ví dụ, trong việc hoán đổi các kết quả mong muốn và , chúng ta trao đổi hiệu quả vai trò của ANDOR , NANDNOR , các cổng giống như hàm ý với các hàm delta khác, v.v.x b { 0 , 1 } b = 1 0 1Cx b{0,1}b=101
Niel de Beaudrap
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.