ããããåå²ã¢ã«ãŽãªãºã ïŒç¹ã«ãDPLLã¢ã«ãŽãªãºã ã«ã€ããŠïŒãå®çãšãã¡ã³ãã«ã¯ãŒãã³æ°ã«ã€ããŠèª¬æããèšäºã®æåŸã«ç¬èªã®åå²ã¢ã«ãŽãªãºã ãèšè¿°ãã30åã®èšç®ã§æ°wïŒ2; 5 ïŒã¯178ã«çããïŒ1978幎ã®çºèŠè ã¯ãããè¡ãã®ã«8æ¥ä»¥äžã®èšç®ãèŠããïŒã
åå²ã¢ã«ãŽãªãºã
ããã¯ã次ã®åé¡ã解決ããããªãäžè¬çãªã¢ã«ãŽãªãºã ã§ãïŒæéã®ã»ããSãããããããããã€ãã®ããããã£ãæã€2ã€ã®ãµãã»ããAãšBã«åå²ããããã»ããSãå¿ èŠãªæ¹æ³ã§åå²ã§ããªããšå€æããŸãã
ããã¯æ¬¡ã®ããã«è¡ãããŸãïŒ3ã€ã®äº€å·®ããªããµãã»ããAãBãCãåã¹ãããã§éå§ããã³ãµããŒããããã»ããSãå®å šã«ã«ããŒããŸããCã¯ãAãšBã®éã§ãŸã åé ãããŠããªãèŠçŽ ã®ã»ããã§ããæåã¯ãC = Sã AãšBã¯ç©ºã§ãã ã»ããCã®åå埩ã§ãèŠçŽ aãä»»æã«éžæãããã»ããAãŸãã¯ã»ããBã®ããããã«é 眮ã§ããŸããå®éãäž¡æ¹ãå®è¡ããäž¡æ¹ã®å¯èœãªãªãã·ã§ã³ãååž°çã«åŠçããŸãã
![ç»å](https://habrastorage.org/files/dba/d2c/b87/dbad2cb87aff45b3bc022c1396846e90.png)
ãã®çµæãåå²ããªãŒãäœæãããŸãããã®ãªãŒãã«ã¯ãã»ããSã®ãã¹ãŠã®çš®é¡ã®AãšBãžã®åå²ããããã»ããCã¯ç©ºã§ãã ããã§ããã¹ãŠã®ãªãŒãã«ã€ããŠé¢å¿ã®ããããããã£ã®ãã«ãã£ã«ã¡ã³ãããã§ãã¯ããå¿ èŠããããŸãã
ãLet meïŒããããªãã¯èšããã2ã€ã®ãã¡æãããªæ€çŽ¢ãããåªããŠãããã®| S | ãªãã·ã§ã³ïŒãã ãããŠããã¹ãŠãã«ãããªãã§ãããã¢ã«ãŽãªãºã ã®ææ¡ãããããã¯ããŒã³ã«è¿œå ãããšéåžžã«äŸ¿å©ã§ãïŒ
ã¯ãªããã³ã°ãªã¹ãïŒ
- éšåçã«æ§ç¯ãããAãšBãé©åã§ãªãå Žå-ããŒã«ããã¯
- èŠçŽ ãSããAãŸãã¯Bã«ç§»åãããšãä»ã®èŠçŽ ãSããAãŸãã¯Bã«ç§»åããå ŽåããããŸã
- åã¹ãããã§Sããaãé©åã«éžæãããšãå埩ããªãŒã®ãµã€ãºãå€§å¹ ã«åæžã§ããŸãã
ã«ãããªãã䜿çšãããšãããªãŒã®ãµã€ãºãå€§å¹ ã«æžå°ããèã®æ°ãèããæžå°ããæã«ã¯0ã«ãªããŸãïŒããã¯ãSãAãšBã«åå²ã§ããªãããšãæå³ããŸãïŒã ã¢ã«ãŽãªãºã ã®è€éãã¯ææªã®å Žåã§ãææ°é¢æ°ã®ãŸãŸã§ãã
äŸãšããŠåŸæ¥ã®DPLLã¢ã«ãŽãªãºã ã䜿çšããŠãäžè¬çãªåå²ã¢ã«ãŽãªãºã ãšææ¡ãããŠãããã¹ãŠã®ã«ãããªãã説æãããšäŸ¿å©ã§ãã
DPLLã¢ã«ãŽãªãºã
Davis â Putnam â Logemann â Loveland ïŒDPLLïŒã¢ã«ãŽãªãºã ã¯ãé£èšæšæºåœ¢åŒã§èšè¿°ãããããŒã«åŒã®å®è¡å¯èœæ§ãå€å®ããããã«1962幎ã«éçºãããŸããã SATåé¡ã解決ããŸãã ãã®ã¢ã«ãŽãªãºã ã¯éåžžã«å¹æçã§ããããšãå€æããããã50幎以äžåŸãæãå¹æçãªSATãœã«ããŒã®åºç€ãšãªããŸããã
DPLLã¢ã«ãŽãªãºã ã®æ©èœã詳ããèŠãŠã¿ãŸãããã 圌ã¯ããŒã«åŒãåãããã®äžéšã§ãããã¹ãŠã®å€æ°ã2ã€ã®ã»ããAãšBã«åå²ããããšããŸããããã§ãAã¯trueã®ãã¹ãŠã®å€æ°ã®ã»ããã§ãBã¯falseã®ãã¹ãŠã®å€æ°ã®ã»ããã§ãã
åã¹ãããã§ããŸã å€ãå²ãåœãŠãããŠããªãå€æ°ãéžæããïŒãã®ãããªå€æ°ãfreeãšåŒã³ãŸãïŒãå€trueãå²ãåœãŠãããŸãïŒãã®å€æ°ã¯ã»ããAã«å ¥åãããŸãïŒã ãã®åŸãåŸãããåçŽåãããåé¡ã¯è§£æ±ºãããŸãã å®è¡å¯èœã§ããã°ãå ã®åŒã¯å®è¡å¯èœã§ãã ããã§ãªãå Žåãéžæãããå€æ°ã¯falseã«èšå®ããïŒBã«å ¥åãããŸãïŒãåé¡ã¯æ°ããåçŽåãããåŒã§è§£æ±ºãããŸãã å®è¡å¯èœã§ããã°ãå ã®åŒã¯å®è¡å¯èœã§ãã ããã§ãªããã°-æ®å¿µãªãããå ã®åŒã¯å®è¡äžå¯èœã§ãã
åå²ãåœãŠã®åŸã次ã®2ã€ã®ã«ãŒã«ã«ãã£ãŠæ°åŒãããã«ç°¡ç¥åãããŸãã
- å¯å€äŒæïŒãŠãããäŒæïŒã å¥ã«å€æ°ã1ã€ã ãæ®ã£ãŠããå Žåããã®å¥ã«æçµçã«trueã«ãªããããªå€ãå²ãåœãŠãå¿ èŠããããŸãïŒåŠå®ããããã©ããã«å¿ããŠAãŸãã¯Bã«ç§»åããŸãïŒã
- ãçŽç²ãªãå€æ°ã®é€å€ïŒçŽç²ãªãªãã©ã«åé€ïŒã ããããã®å€æ°ãè² ã®å€ã®ã¿ããŸãã¯åžžã«è² ã®å€ãªãã§åŒã«å ¥åãããå Žåããã®å€æ°ã¯pureãšåŒã°ããŸãã ãã®å€æ°ã«ã¯ããã¹ãŠã®ãªã«ã¬ã³ã¹ãtrueã«ãªããããªå€ãå²ãåœãŠãããšãã§ããŸããããã«ãããèªç±å€æ°ã®æ°ãæžããŸãã
ãããã®2ã€ã®ã«ãŒã«ã¯ãé©çšãããéãé©çšããå¿ èŠããããŸããéåžžãæåã®å²ãåœãŠã®åŸãåçŽåã®ã«ã¹ã±ãŒãå šäœãç¶ããèªç±å€æ°ã®æ°ãå€§å¹ ã«æžå°ããŸãã
åçŽåããåŸã«ç©ºã®å¥ãååŸããå ŽåïŒãã®åçŽãªæ¥ç¶è©ã¯ãã¹ãŠfalseïŒ-çŸåšã®åŒã¯å®è¡äžå¯èœã§ãããããŒã«ããã¯ããå¿ èŠããããŸãã èªç±å€æ°ãæ®ã£ãŠããªãå ŽåãåŒã¯å®è¡å¯èœã§ãããã¢ã«ãŽãªãºã ãå®äºããããšãã§ããŸãã åé¢ãæ®ã£ãŠããªãå Žåã¯ãã¢ã«ãŽãªãºã ãçµäºããããšãã§ããŸããæªäœ¿çšã®èªç±å€æ°ãä»»æã«å²ãåœãŠãããšãã§ããŸãã
äœãèµ·ãããã説æããå°ããªCã®ãããªæ¬äŒŒã³ãŒãïŒ
bool DPLL( eq F, set A, set B, set C ) { while(1) { // if (F is empty) { // ! write A, B, C; return true; } if (F contains an empty clause) return false; // // bool flag = false; if (unit_propagation(&F, &A, &B, &C)) flag = true; if (pure_literal_elimination(&F, &A, &B, &C)) flag = true; if (!flag) break; // } // x = choose_literal(F, ); if (DPLL(F ⧠(x), A^x, B, C^x)) return true; if (DPLL(F ⧠(¬x), A, B^x, C^x)) return true; return false; }
ïŒèšå·ã¯ãunit_propagationããã³pure_literal_eliminationé¢æ°ã§ãå€æ°FãAãBãããã³Cãåç §æž¡ããã€ãŸã å éšã§å€æŽã§ããŸãã äœããå€æŽãããå Žåããããã®é¢æ°ã¯trueãè¿ããŸãã éã«ãååž°äžéã§ã¯ããªããžã§ã¯ãã®ã³ããŒãäœæãããŸãã ^ã¢ã€ã³ã³ã¯ããªããžã§ã¯ããååšããå Žåã¯ã»ããããé€å€ããååšããªãå Žåã¯è¿œå ããŸãã
次ã®åŒãæ€èšããŠãDPLLã¢ã«ãŽãªãºã ã®åäœã確èªããŠãã ããã
![ç»å](https://habrastorage.org/files/14f/040/fca/14f040fcaedd48eeb8086e694d09af0e.png)
åçŽåã«ãŒã«ã¯ãã®åŒã«ã¯é©çšãããªããããããªãŒãåå²ããå¿ èŠããããŸãã åå²ã®èŠçŽ ãšããŠãx 1ã䜿çšããŸããæåã«ãtrueã«èšå®ããŸãã 次ã®åçŽåã®ãã§ãŒã³ãååŸããŸãã
![ç»å](https://habrastorage.org/files/f0a/e17/517/f0ae1751768548b0baee18aa7a1baf67.png)
äºéç¢å°ã¯ãæåã®ã«ãŒã«ã䜿çšããŠããããšã瀺ããŠããŸããã€ãŸããå€ç¬ãªå€æ°ãèŠã€ããŠãåžæããå€ãå²ãåœãŠãŠããŸãã
æ®å¿µãªããããã®ãã©ã³ãã¯äžå¯èœãªåŒãããªãã¡ ãã®ãã©ã³ãã§ã¯ãç¡é§ã«è©Šã¿ãŸããã ããŒã«ããã¯ããŠãå€æ°x 1ãfalseã«èšå®ããããšããŸãã ããã«ããã次ã®äžé£ã®ç°¡ç¥åãè¡ãããŸãã
![ç»å](https://habrastorage.org/files/19a/b4f/9cb/19ab4f9cb7014e9ea40104ee08a5deee.png)
äžéç¢å°ã¯ã2çªç®ã®åçŽåã«ãŒã«ãé©çšããŠããããšã瀺ããŠããŸãã ãã®ãã©ã³ãã§ã¯ãæåãåŸ ã£ãŠããŸããæ倧2ã€ã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ãããŸããïŒ
ãã©ããŒãµã«ããªãŒå šäœïŒ
![ç»å](https://habrastorage.org/files/490/b99/a50/490b99a508c44faba41a3a0effb4e51f.png)
äºéç¢å°ãšäžéç¢å°ã§ç€ºãããå€æã¯ããªãŒã®åé ç¹å ã§çºçãããããããªãŒèªäœã¯å®éã«ã¯3ã€ã®é ç¹ã®ã¿ã§æ§æãããŠããããšãããããŸãïŒ ãã ããããè€éãªäŸãæãã€ãããšã¯ããããå¯èœã§ããã
ããšãã°ãèŠçŽ x 2ãåå²çšã«éžæãããå Žåãç®çã®ããªãŒã¯ã¯ããã«å°ãããªããçãã¯ã¯ããã«æ©ãèŠã€ãããŸãïŒèªè ã¯å¿ èŠãªèšç®ãåå¥ã«è¡ãããã«æ±ããããŸãïŒã ãããã£ãŠãåå²ããèŠçŽ ãéžæããæŠç¥ã¯éåžžã«éèŠã§ãã ããšãã°ãæ倧æ°ã®å¥ã«å«ãŸããåå²çšã®å€æ°ãéžæã§ããŸãã
ãŸãããã®ã¢ã«ãŽãªãºã ã䜿çšãããšããã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ããããšã¯äžå¯èœã§ããããšã«æ³šæãã䟡å€ããããŸããããã¯ããçŽç²ãªãå€æ°ãæé€ãããã¥ãŒãªã¹ãã£ãã¯ã«ãã£ãŠé²æ¢ãããŸãã ãã¥ãŒãªã¹ãã£ãã¯ã«åŸã£ãŠãtrueã«èšå®ãããå€æ°ã®å€ãfalseã§ãããœãªã¥ãŒã·ã§ã³ãèŠèœãšãããå¯èœæ§ããããŸãã ãã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ãæ€çŽ¢ããã«ã¯ãã¢ã«ãŽãªãºã ãã2çªç®ã®ã«ãŒã«ãé€å€ããå¿ èŠããããŸãã
ãã¡ã³ãã«ã¯ãŒãã³ã®å®çãšæ°
ãã¡ã³ãã«ã¯ãŒããŒã®å®çã¯ãã©ã ãžãŒã®çè«ã§æãéèŠãªçµæã®1ã€ã§ããã©ã ãžãŒã®çè«ã¯ãå€æ°ã®ã©ã³ãã ãªèŠçŽ ã§æ§æããããªããžã§ã¯ãã®ãã¿ãŒã³ã®å€èŠ³ãç 究ããæ°åŠã®åéã§ãã ãã¹ãŠã¯æ¬¡ã®ããã«å§ãŸããŸããã
åäžçŽã®20幎代ã«ãããæ°åŠè ã¯æ¬¡ã®åé¡ã«çŽé¢ããŸããã
ãã¹ãŠã®èªç¶æ°ã®ã»ããã2ã€ã®ç°ãªãè²ã§ãã€ã³ãããŸãã æ°ãåãè²ã§æãããŠãããä»»æã®é·ãç®è¡çŽæ°ããããšèšããŸããïŒ
![ç»å](https://habrastorage.org/files/702/fe7/332/702fe7332d8c4c9497fc9631caf4f743.jpg)
ä»»æã®rããã³kã«ã¯ãnåã®ç°ãªãè²ã®èªç¶æ°S = {1ã2ã...ãnïŒr; kïŒ}ã®ã»ããã®è²ä»ãã«å¯ŸããŠããã®ã»ããSã«ç®è¡ãå«ãŸãããããªæ°nïŒr; kïŒãååšããŸãåãè²ã§å¡ãããkåã®æ°åã®é£ç¶ã
蚌æã¯ãããããäºéåž°çŽæ³ã«åºã¥ããŠããŸãã ãã®èšŒæã®ç°¡æçã¯ãããšãã°ããã«ãããŸã ã
æ°å€nïŒr; kïŒã®æå°å€ã¯wïŒr; kïŒã§ç€ºãããŸãã çªå·wïŒr; kïŒã¯ããã¡ã³ãã«ã¯ãŒãã³çªå·ãšåŒã°ããŸãã ãã¡ã³ãã«ã¯ãŒãã³ã®å®çã®èšŒæã¯ãæ°å€wïŒr; kïŒã®æ£ç¢ºãªå€ã§ã¯ãªããäžéã®ã¿ãæäŸããŸãã ãããŠãç§ãä¿¡ããŠããã®äžéã¯åçŽã«å·šå€§ã§ãïŒ 2è²ã®å Žåã§ããæ°wïŒr; kïŒã®æšå®å€ã¯ã ã¢ãã«ãŒãã³ã®é¢æ°ãšããŠå€§ãããªãããšãå€æããŸããã ãã®æé«ã®èŠç©ããã¯åŸã ã«æ¹åãããŠããŸãã 2001幎ã®Timothy Gowersã®ææ°ã®çµæã¯æ¬¡ã®ãšããã§ãã
wïŒr; kïŒâ€2 2 r 2 2 k + 9 ã
çµæã¯ãªãªãžãã«ãããå°ãæãã§ããããŸã å°ãæãã§ãã ããã§ãããã®å¢çã¯ãwïŒr; kïŒã®æ£ç¢ºãªå€ãšã¯ããé¢ããŠããŸãã
å¥ã®ç 究åéã¯ãç°ãªãrãškã®æ°å€wïŒr; kïŒã®æ£ç¢ºãªå€ã®æ±ºå®ã§ãã ãã®ã¿ã¹ã¯ã¯éåžžã«ãªãœãŒã¹ãæ¶è²»ããŸãïŒããã¯ãã©ã ãžãŒçè«ã®ã»ãšãã©ã®ã¿ã¹ã¯ã®å žåã§ãïŒã ãŠã£ãããã£ã¢ã«ãããšãçŸæç¹ã§ã¯ãwïŒr; kïŒã®æ£ç¢ºãªå€ã¯ãrãškã®7ã€ã®ãã¢ã«ã€ããŠã®ã¿ç¥ãããŠããŸãã
r / k | 3 | 4 | 5 | 6 |
---|---|---|---|---|
2è² | 9 | 35 | 178 | 1132 |
3è² | 27 | 293 | ||
4è² | 76 |
wïŒ2; 3ïŒã®çãã¯ç°¡åã«åŸãããŸãã
ãã®èšŒæwïŒ2; 3ïŒ= 9
åæ§ã®ã¢ã€ãã¢ããããããå°ã詳现ãªåœ¢åŒã®å¥ã®èšŒæ ãããã«äžããããŸã ã
8è²ã®æ°åã2è²ã§å¡ãã€ã¶ããé·ã3ã®1è²ã®ç®è¡çé²è¡ããªãããã«ããäŸã次ã«ç€ºããŸãã
1 2 3 4 5 6 7 8
ããã¯ãwïŒ2; 3ïŒ> 8ãæå³ããŸãã 9è²ã«ã€ããŠã¯ãæ°å4ãš6ãèŠãŠã¿ãŸããããäžè¬æ§ã倱ãããšãªãã2ã€ã®ã±ãŒã¹ãå¯èœã§ããããã2ã€ã®æ°åã¯åãè²ã§å¡ãããŠããããç°ãªã£ãŠããŸãã
1ïŒ4ãš6ãèµ€ãè²ä»ãããŸãïŒ
1 2 3 4 5 6 7 8 9
ããããªããšãèµ€ã®æ°å4 5 6ã®ããªãã«ã圢æãããããã5ãéã«ãã€ã³ãããå¿ èŠããããŸãã2ãš8ã®åæ§ã®æšè«ã®çµæã2 5 8ã®éã®ããªãã«ãåŸãããŸãã
1 2 3 4 5 6 7 8 9
2ïŒ4ãéã6ãèµ€ã«ããŸãã
1 2 3 4 5 6 7 8 9
次ã«ãäžè¬æ§ã倱ãããšãªãã5ãéè²ã«ã§ããŸãã ãã®çµæã3ã¯éã«ãªããªãããã«èµ€ã«çè²ããå¿ èŠããããŸã3 4 5.次ã«ã9ã¯èµ€ã«ãªããªãããã«éã«çè²ããå¿ èŠããããŸã3 6 9.å°èšïŒ
1 2 3 4 5 6 7 8 9
æ°å1ã¯ãé1 5 9ãé¿ããããã«èµ€ã§ãªããã°ãªããŸãããããã¯ãé2ãæå³ããŸãããã以å€ã®å Žåã¯èµ€1 2 3ãååŸããããã§ãã
1 2 3 4 5 6 7 8 9
7ãèµ€ã§ãã€ã³ããããšã6 7 8ã®èµ€ã®ããªãã«ãåŸãããŸãã7ãéã§ãã€ã³ããããšã5 7 9ã®éã®ããªãã«ãåºãŠããŸãã
8è²ã®æ°åã2è²ã§å¡ãã€ã¶ããé·ã3ã®1è²ã®ç®è¡çé²è¡ããªãããã«ããäŸã次ã«ç€ºããŸãã
1 2 3 4 5 6 7 8
ããã¯ãwïŒ2; 3ïŒ> 8ãæå³ããŸãã 9è²ã«ã€ããŠã¯ãæ°å4ãš6ãèŠãŠã¿ãŸããããäžè¬æ§ã倱ãããšãªãã2ã€ã®ã±ãŒã¹ãå¯èœã§ããããã2ã€ã®æ°åã¯åãè²ã§å¡ãããŠããããç°ãªã£ãŠããŸãã
1ïŒ4ãš6ãèµ€ãè²ä»ãããŸãïŒ
1 2 3 4 5 6 7 8 9
ããããªããšãèµ€ã®æ°å4 5 6ã®ããªãã«ã圢æãããããã5ãéã«ãã€ã³ãããå¿ èŠããããŸãã2ãš8ã®åæ§ã®æšè«ã®çµæã2 5 8ã®éã®ããªãã«ãåŸãããŸãã
1 2 3 4 5 6 7 8 9
2ïŒ4ãéã6ãèµ€ã«ããŸãã
1 2 3 4 5 6 7 8 9
次ã«ãäžè¬æ§ã倱ãããšãªãã5ãéè²ã«ã§ããŸãã ãã®çµæã3ã¯éã«ãªããªãããã«èµ€ã«çè²ããå¿ èŠããããŸã3 4 5.次ã«ã9ã¯èµ€ã«ãªããªãããã«éã«çè²ããå¿ èŠããããŸã3 6 9.å°èšïŒ
1 2 3 4 5 6 7 8 9
æ°å1ã¯ãé1 5 9ãé¿ããããã«èµ€ã§ãªããã°ãªããŸãããããã¯ãé2ãæå³ããŸãããã以å€ã®å Žåã¯èµ€1 2 3ãååŸããããã§ãã
1 2 3 4 5 6 7 8 9
7ãèµ€ã§ãã€ã³ããããšã6 7 8ã®èµ€ã®ããªãã«ãåŸãããŸãã7ãéã§ãã€ã³ããããšã5 7 9ã®éã®ããªãã«ãåºãŠããŸãã
wïŒrãkïŒã®å€ããããã«å€§ããå Žåãéåžžã蚌æã¯æ¬¡ã®ããã«èŠçŽãããŸãïŒæ°å€nã®è²ä»ããã§ãŒã³ã®é·ãã¯åºå®ããããã®åŸãè«çåŒãé£èšæšæºåœ¢åŒã§æ§ç¯ããããããã®næ°å€ãrããã³kã®å¶éãèæ ®ããŠè²ä»ãã§ããããšãæ€èšŒãããã®å®çŸå¯èœæ§ã¯ãSATãœã«ããŒã䜿çšããŠãã§ãã¯ãããŸãã 解ãèŠã€ãã£ãå Žåãæ°å€n + 1ã¯wïŒr; kïŒã®äžéã§ããããã以å€ã®å Žåãæ°å€nã¯wïŒr; kïŒã®äžéãšèŠãªãããŸãã
å€ãã®SATãœã«ããŒã¯DPLLã¢ã«ãŽãªãºã ã«åºã¥ããŠãããããæ°å€wïŒr; kïŒã¯åå²ã¢ã«ãŽãªãºã ã䜿çšããŠæ€çŽ¢ãããŸãã
è²ã®æ°r = 2ã«å¯ŸããŠå¿ èŠãªããŒã«åŒãäœæããç°¡åãªæ¹æ³ã瀺ããŸãã nåã®å€æ°x iãååŸããŸããããã¯ã察å¿ããæ°åãã©ã®è²ã§ãã€ã³ããããŠããããæå³ããŸãã å€trueã¯1çªç®ã®è²ãæå³ããfalse-2çªç®ã®è²ãæå³ããŸãã ç®è¡ã®é²è¡ã«äž¡æ¹ã®è²ãå«ãŸããããã«å¶éãå°å ¥ããå¿ èŠããããŸãã ããã¯éåžžã«ç°¡åã«è¡ãããŸãïŒãã©ãŒã ã®åé¢ïŒx a 1âšxa 2âš...âšxa k ïŒã¯æåã®è²ã®ååšãä¿èšŒãããã©ãŒã ã®åé¢ïŒÂ¬xa 1âšÂ¬xa 2âš...âšÂ¬xa k ïŒ-2çªç®ã®è²ã ãŸããå®éã«ã¯ãããã ãã§ã-åç®æ°ã®é²è¡ã«å¯ŸããŠã2ã€ã®åŒãäœæããçºçãããã¹ãŠã1ã€ã®å€§ããªCNFã«æ¥çããŸãã
r = 2ãk = 3ãn = 9ã®åŒã®äŸïŒ
ïŒx 1âšx2âšx3ïŒâ§ïŒÂ¬x1âšÂ¬x2âšÂ¬x3ïŒâ§ïŒx 2âšx3âšx4ïŒâ§ïŒÂ¬x2âšÂ¬x3âšÂ¬x4ïŒâ§ ïŒx 3âšx4âšx5ïŒâ§ïŒÂ¬x3âšÂ¬x4âšÂ¬x5ïŒâ§
ïŒx 4âšx5âšx6ïŒâ§ïŒÂ¬x4âšÂ¬x5âšÂ¬x6ïŒâ§ïŒx 5âšx6âšx7ïŒâ§ïŒÂ¬x5âšÂ¬x6âšÂ¬x7ïŒâ§ ïŒx 6âšx7âšx8ïŒâ§ïŒÂ¬x6âšÂ¬x7âšÂ¬x8ïŒâ§
ïŒx 7âšx8âšx9ïŒâ§ïŒÂ¬x7âšÂ¬x8âšÂ¬x9ïŒâ§ïŒx 1âšx3âšx5ïŒâ§ïŒÂ¬x1âšÂ¬x3âšÂ¬x5ïŒâ§ ïŒx 2âšx4âšx6ïŒâ§ïŒÂ¬x2âšÂ¬x4âšÂ¬x6ïŒâ§
ïŒx 3âšx5âšx7ïŒâ§ïŒÂ¬x3âšÂ¬x5âšÂ¬x7ïŒâ§ïŒx 4âšx6âšx8ïŒâ§ïŒÂ¬x4âšÂ¬x6âšÂ¬x8ïŒâ§ ïŒx 5âšx7âšx9ïŒâ§ïŒÂ¬x5âšÂ¬x7âšÂ¬x9ïŒâ§
ïŒx 1âšx4âšx7ïŒâ§ïŒÂ¬x1âšÂ¬x4âšÂ¬x7ïŒâ§ïŒx 2âšx5âšx8ïŒâ§ïŒÂ¬x2âšÂ¬x5âšÂ¬x8ïŒâ§ ïŒx 3âšx6âšx9ïŒâ§ïŒÂ¬x3âšÂ¬x6âšÂ¬x9ïŒâ§
ïŒx 1âšx5âšx9ïŒâ§ïŒÂ¬x1âšÂ¬x5âšÂ¬x9ïŒ
以åã®ã¹ãã€ã©ãŒã§ã¯ããã®åŒã¯äžå¯èœã§ããããšã蚌æãããŸããã
ç¥èãå®è·µãã
次ã«ãæ°å€wïŒ2; kïŒãèŠã€ããããã®ç¬èªã®åå²ã¢ã«ãŽãªãºã ãäœæããŸããããã¯ãSATãœã«ããŒã®ãããªèŠæãåãã䜿çšããŸããã C ++ã§èšè¿°ããŸãïŒç§ã¯MS Visual Studioã䜿çšããŸãïŒã ã¢ã«ãŽãªãºã ã®åºç€ã¯æ¬¡ã®ãšããã§ãã
#pragma comment(linker,"/STACK:64000000") #include <iostream> #include <bitset> #include <time.h> #include <memory.h> using namespace std; #define N 178 #define K 5 #define BSET bitset< N > bool dfs( BSET & A, BSET & B ) { int i = choice( A, B ); if (i<0) { for (int a=0; a<N; a++) if (A[a]) cout << "A"; else if (B[a]) cout << "B"; else cout << "?"; cout << "\n"; return true; } A[i] = true; if (check(A, B)) { BSET A1 = A, B1 = B; if (reduce( A1, B1 )) if (dfs( A1, B1 )) return true; } A[i] = false; B[i] = true; if (check( A, B )) { BSET A1 = A, B1 = B; if (reduce( A1, B1 )) if (dfs( A1, B1 )) return true; } B[i] = false; return false; } int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); BSET A, B; if (!dfs( A, B )) cout << "No counterexamples\n"; cout << "n=" << N << " k=" << K << "\n"; cout << "time=" << clock() << "\n"; return 0; }
å®éãdfsããã·ãŒãžã£ã¯ã¢ã«ãŽãªãºã ã®ããã¯ããŒã³ã§ãã å®æ°Nããã³KïŒããããã·ãŒã±ã³ã¹ã®é·ãããã³ç®è¡é²è¡ã®é·ãïŒã¯ãããªããã»ããµã«ãã£ãŠã³ãŒãã«æ°å€ã®åœ¢åŒã§æ¿å ¥ãããŸããããã¯ãã³ã³ãã€ã©ãã³ãŒããæé©åããã®ã«åœ¹ç«ã€å ŽåããããŸãã ã»ããAããã³BïŒããããã1çªç®ãš2çªç®ã®è²ã§è²ä»ããããã·ãŒã±ã³ã¹èŠçŽ ïŒã¯ãé·ãNã®ããããã¹ã¯ã§èšå®ãããŸãã次ã«ãææ¡ãããã¹ã±ã«ãã³ã§é¢æ°ããã³ã°ã¢ããããå¿ èŠããããŸãã
- choice-ããªãŒãåå²ãããèŠçŽ ã®éžæã
- check-é·ãKã®çå·®æ°åããªãããšã確èªããŸãã
- reduce-è²ãäžæã«æ±ºå®ã§ããè¿œå èŠçŽ ããã€ã³ãããŸãã
éžæé¢æ°ã¯ãæãèå³æ·±ããã®ã®1ã€ã§ãã
int cost[N]; int choice( BSET & A, BSET & B ) { memset( cost, 0, sizeof(cost) ); for (int a=0; a<N; a++) for (int d=1; a+d*(K-1)<N; d++) { int cnt1=0, cnt2=0; for (int c=0; c<K; c++) if (A[a+c*d]) cnt1 ++; for (int c=0; c<K; c++) if (B[a+c*d]) cnt2 ++; if (cnt1==0 || cnt2==0) for (int c=0; c<K; c++) if (!A[a+c*d] && !B[a+c*d]) cost[a+c*d] += cnt1+cnt2+1; } int mx = 0; for (int a=0; a<N; a++) mx = max( mx, cost[a] ); if (mx > 0) for (int a=0; a<N; a++) if (cost[a] == mx) return a; return -1; }
éžæã«çµã¿èŸŒãŸããèŠçŽ ãéžæããããã®æŠç¥ã¯æ¬¡ã®ãšããã§ããæœåšçãªåè²ç®è¡é²è¡ã®æ倧æ°ã«å«ãŸããèŠçŽ ãéžæãããŸãã ããããããããã¹ãŠã§ã¯ãããŸãããè²ä»ãã®æ°åã®æœåšçãªæ°ãé²è¡ããã»ã©ãæšå®ã«å¯Ÿããè²¢ç®åºŠã倧ãããªããŸãã ååãšããŠãåå²ã¢ã«ãŽãªãºã ã§ã¯ããã¹ãŠãå¯èœãªéãäžè¯ã«ãã競åãããé«éã«ããèŠçŽ ãéžæããå¿ èŠããããŸãïŒãã§ãã¯é¢æ°ãfalseãè¿ãå ŽåïŒã ãã®ãããªæŠç¥ã¯ãå€ãã®å ŽåãäžèŠãªåå²ãåãæšãŠããªãã·ã§ã³ã®ã¹ããŒã¹ãåæžããŸãã
次ã«ããã§ãã¯æé ãæ€èšããŸãã
bool check( BSET & A, BSET & B ) { for (int a=0; a<N; a++) for (int d=1; a+d*(K-1)<N; d++) { bool f1=true, f2=true; for (int c=0; c<K; c++) f1 &= A[a+c*d]; for (int c=0; c<K; c++) f2 &= B[a+c*d]; if (f1 || f2) return false; } return true; }
ãã®æé ã¯å°ãããç°¡åã§ãç°¡åãªã®ã§ãããã«ãã ããã®ã¯æå³ããããŸããã
æåŸã«ãreduceããã·ãŒãžã£ïŒ
bool reduce( BSET & A, BSET & B ) { while ( 1 ) { bool flag = false; for (int a=0; a<N; a++) for (int d=1; a+d*(K-1)<N; d++) { int cnt1=0, cnt2=0; for (int c=0; c<K; c++) if (A[a+c*d]) cnt1 ++; for (int c=0; c<K; c++) if (B[a+c*d]) cnt2 ++; if (cnt1+cnt2<K) { if (cnt1 == K-1) for (int c=0; c<K; c++) if (!A[a+c*d]) { B[a+c*d] = true; flag = true; } if (cnt2 == K-1) for (int c=0; c<K; c++) if (!B[a+c*d]) { A[a+c*d] = true; flag = true; } } } if (!flag) break; if (!check( A, B )) return false; } return true; }
1ã€ãé€ããã¹ãŠã®èŠçŽ ãåãè²ã§å¡ããã1ã€ãå¡ãããŠããªãé²è¡ãåã«æ¢ããŠããŸãã å®éãå察ã®è²ã§ãã€ã³ãããŸãã ãã©ã°å€æ°ã¯èªåã§ä¿æããŸã-çŸåšã®ãã¹ã«äœãããã€ã³ãããŸããã ããã§ãªãå Žåã¯çµäºããããã§ãªãå Žåã¯ççŸããã§ãã¯ããççŸãååšããªãå Žåã¯ããã¹ãŠã®é²è¡ãç¹°ãè¿ããŸãã
çµæ
ã³ãŒãã¯Core i5 4Gb RAMã©ãããããã§ãã¹ããããŸããã ãã©ã¡ãŒã¿ãŒå€N = 177 K = 5ã§2åã§ã次ã®äŸãèŠã€ãããŸããã
BBBABBBBABB?BAAABABBBA?AABAAAABAAAABBBABAAABBBBABBBBABB?BAAABABBBAAAABAAAABAABABBBABAAABA
BBABBBBABBABAAABABBBAAAABAAAABAABABBBABAAABABBABBBBABB?BAAABABBBABAABAAAABAABABBBABAAAB?
AãšBã¯è²ã§ãã 質åãšã¯ãã©ã®è²ãç¹å®ã®äœçœ®ã«ãããã¯éèŠã§ã¯ãªããšããããšã§ãã ã€ãŸããå®éã«ã¯ãé·ã177ã®32åãã®äŸãèŠã€ãããŸããããé·ã5ã®åè²ã®ç®è¡çŽæ°ã¯ãããŸããã
ãã©ã¡ãŒã¿ãŒN = 178 K = 5ã§ã¯ãã³ãŒãã¯20.5åéæ©èœããç®çã®ç®è¡çé²è¡ããªãããšã瀺ããŸããã äžè¬çãªå Žåã 2,178ã®ãªãã·ã§ã³ã§æªããããŸããã
ãã®ã³ãŒãã¯ç¡éã«æé©åããããšãã§ããŸã-å¿ èŠãªããŒã¿æ§é ãéžæããŠãã°ããéžæã確èªããã³åæžãåå²ããèŠçŽ ãéžæããããã®ããæé©ãªæŠç¥ãæ¢ãããŸãã¯å°ãªããšãæåã«éžæããèŠçŽ ã1è²ã ãã§ãã€ã³ãããããšãã§ããŸãã ããããããã¯ãã§ã«ãã®èšäºã®ç¯å²å€ã§ãã
ãã¡ããããã®ã³ãŒãã¯wïŒ2; 3ïŒãšwïŒ2; 4ïŒã®èšç®ã«ã䜿çšã§ããŸãïŒæåãããã¹ãŠããã¹ãããŸããïŒã
K = 6ã®å Žåã¯ã©ãã§ããïŒ ããã«æè¿ïŒ2008幎ïŒãwïŒ2; 6ïŒ= 1132ã§ããããšã蚌æããã200ã³ã¢ã®ã¯ã©ã¹ã¿ãŒã§çŽ250æ¥éã®èšç®ãå¿ èŠã§ããã ãšããã§ã圌ãã®ã¢ã«ãŽãªãºã ã®å®è£ ã¯ã1ã³ã¢ã§3ç§æªæºã§wïŒ2; 5ïŒ= 178ã§ããããšã蚌æããŠããŸãã K = 7ã®å Žåã質åã¯æªè§£æ±ºã®ãŸãŸã§ãã
èªã
- Lectoriumã§ã®åå² ã¢ã«ãŽãªãºã ïŒãããªãè¬çŸ©ã¹ã©ã€ãïŒ
- ã°ã©ãå ã®ãã¹ãŠã®ã¯ãªãã¯ãèŠã€ããããã®ããã³ã±ã«ããã·ã¥ã¢ã«ãŽãªãºã ïŒæ¬è³ªçã«åå²ã¢ã«ãŽãªãºã ïŒ
- ãŠã£ãããã£ã¢ã®DPLLã¢ã«ãŽãªãºã ïŒ rus ã eng ïŒ
- ãã¡ã³ãã«ã¯ãŒãã³ã®å®çãšæ° ïŒengïŒ
- A.ããããã³ãã³ã æ°è«ã®äžã€ã®çç
- èæžã®ã³ãŒããã©ã ãžãŒçè«ãç¥ã®ååš
- ããã«ãã»Lã»ã°ã©ãã ããžã§ãšã«ã»Xã»ã¹ãã³ãµãŒã ã©ã ãžãŒçè«
- RSã¹ãã£ãŒãã³ã¹ãRãã·ã£ã³ã¿ã©ã ã ã³ã³ãã¥ãŒã¿ãŒçæãã¡ã³ãã«ã¯ãŒãã³ããŒãã£ã·ã§ã³ ïŒè±èªãpdfïŒ
- Michal Kourilããžã§ããŒã L.ããŒã«ã ãã¡ã³ãã«ã¯ãŒãã³ãã³ããŒWïŒ2.6ïŒã¯1132 ïŒè±èªãpdfïŒ
PSç§ãæ·±ãèªãã ãã¹ãŠã®ãªã³ã¯ã§ã¯ãªãã®ã§ãã©ã®ãªã³ã¯ããšããªããšãå®éã«ã¯ãããã¯ããå€ããŠããŸãã