NP=P,一種解決方案

NP?=P 千禧難題

這裏是介紹P與NP問題的. 因爲筆者懶,自己搜索去吧.

前一段時間想研究一些有意義的事情,然後發現了千禧難題第一的居然是跟計算機相關的PvsNP問題,立馬引起了我的興趣.
既然跟行業相關而且是算法相關的,那麼久研究一下吧,就算不能做出結果來,對於思維的鍛鍊也是有用的.

然後翻牆查找了很多資料,發現了卡普的二十一個NP-完全問題.
作爲程序員,對於其中的可以編程的問題很感興趣,大學時候概率論學的不錯,其中包含排列組合,然後嘗試了其中的精準覆蓋問題,發現一些程序員已經解決了這個問題,主要方法是矩陣和DLX(Dancing links X算法).
在看到這類問題已經有解決方案後,開始嘗試解決其中的NPC問題: SAT問題.

然後發現SAT問題可以規約到3-sat問題 . 已經有人做了部分工作了.
就開始嘗試自己動手寫一個算法. 大概的思路是通過倒排的方式,確定部分元素的解.
然後再通過帶入的方式,將全部的問題求解掉.
然後,翻了很多的書,做了很多的準備工作,準備做優化的時候,發現了下面這個BLOG.
姜詠江老師的在2015年的時候,已經發現了一個方法,可以解決3-sat問題.而且時間複雜度爲多項式時間.
在科學網的介紹上

工作情況:
航天二院研究生部,終生特聘教師
研究領域:
信息科學->計算機科學->計算機體系結構

好吧.
程序員遇到程序員的老師了.而且發現,他的方法是可行的.並且比我的思路要走的遠.已經能夠在多項式時間內判定有無解,有無唯一解等等.

姜詠江老師的方法
傳送門在這裏
這個網站居然要註冊,登錄才能看到一些博文,爲了廣大的程序員朋友們,看到具體的論述流程.
我在這裏將全文貼出來姜老師的論述過程.


我是分割線


前言:本文投給《中國科技論文在線》後說我已經在科學網上發表了。前在博客中發表的不夠正規專業,因此將正規一些的再用> 博文發表一次,供數學計算機專業的人士討論。

3-SAT分段子句消去法

姜詠江

摘要:本文給出了3-SAT分段消去子句的求解算法。證明了可以在多項式時間求出3-SAT的解。從而證實斯提芬.庫克定義下的NP-complete問題就是一個P類問題。

關鍵詞:NP-complete;P/NP問題;子句消去法

中圖分類號:O158

The 3-SAT Algorithm by Sections

JiangYongjiang

Abstract: In this paper,I gave the remove clausemethed to get answer of the 3-SAT proplem. This is a polynomial time algorithm.It is proved the problem of NP-complete is a P class problem.

Key words: NP-complete;P/NP problem; The clause remove method

  1. 引言

P/NP問題曾於2000年被美國克雷數學所定爲世界頭號難題[1],更有甚者說其挑戰了人類智慧。所謂P/NP問題的定義是這樣給出的:

複雜度類P包含所有那些可以由一個確定型圖靈機在多項式表達的時間內解決的問題;類NP由所有其肯定解可以在給定正確信息的多項式時間內驗證的決定問題組成,或者等效的說,那些解可以在非確定圖靈機上在多項式時間內找出的問題的集合。

實際上這個定義有很多歧義。這涉及到人們對確定型圖靈機、非確定型圖靈機、多項式時間、問題、決定問題、肯定解、給定正確信息、驗證等一系列概念的統一認識,因而很難形成統一的見解。

1971年斯提芬.庫克 (Stephen A. Cook) 發表了《The Complexity of Theorem Proving Procedures》[2]才把P之外的問題歸結爲三大類,即 NP、NPC及 NPH。庫克的分類得到了學術界的認可。庫克給出的P、NP、NPC、NPH問題的定義如下:

可以在多項式時間內求出解的問題,叫P問題(Polynomial problem)。

可以在多項式的時間裏驗證一個解的問題,叫NP問題(Non-deterministic polynomial)。

如果所有的NP問題都存在多項式時間算法使其能夠歸約爲某一NP問題,則稱該NP問題爲NPC問題(NP-complete)。

如果所有的NP問題都存在多項式時間算法使其歸約到某問題,則稱該問題爲NPH問題(NP-hard)。

所謂的多項式時間算法,就是一種函數求解過程。顯然,求解方法也是一種驗證方法,因而有P類問題屬於NP類問題。如果NP類問題也屬於P類問題,那麼就有P=NP了。學術界已經證明了所有的NPC之間都有多項式時間算法實現轉化。由NPC的定義不難看出,只要找到一個NPC問題的多項式時間算法,也就等於找到了所有NP問題的多項式時間算法,於是也就證明了NP=P。

  1. 典型的NPC問題

長時間以來,人們將尋找NPC類問題的多項式時間算法作爲了解決P=NP問題的關鍵途徑。一些典型的NP類問題[3](見圖1所示)早已經被一些數學家證明是NPC問題了。例如,由3個邏輯變量組成的合取範式3-CNF-SAT(簡稱爲3-SAT)滿足問題、子集和問題SUBSET-SUM、旅行商問題TSP、哈密頓迴路問題HAM-CYCLE等,這些都是NPC問題尋找多項式時間算法研究的熱門問題。

圖1  典型NPC問題及相關
圖1 典型NPC問題及相關
Fig. 1 NPC Problems

  1. 3-SAT與子句消去法

本文給出的分段子句消去法是解決如何在多項式時間求出3-SAT滿足解的方法。

3.1 3-SAT定義

所謂的3-CNF就是多個由3個邏輯變量或其非組成的多項式間形成的與運算表達式。一般這種邏輯表達式被稱爲合取範式(CNF),多項式邏輯因子稱爲子句。

將邏輯變量x的非運算用x’表示,集合A={x1,x2,…,xn}, A’={x1’,x2’,…,xn’},3-CNF定義如下:

3-CNF=定義

其中m是子句的數量,xij∈A∪A’.

求3-CNF=1解的問題一般叫3-SAT.

3.2 子句消去法與反子句

由邏輯代數知,邏輯多項式的任何一項值爲1,則多項式的值爲1。因而欲使3-CNF=1,只要每個子句的值爲1就行。

定義1:設定子句中邏輯項值爲1,並消去該項值爲1的所有子句的方法,稱爲子句消去法。

定義2:將子句中的項用非運算表示得到的子句叫原子句的反子句。
定義3:子句中包含變量x與x’,則稱此子句爲恆一子句。

由於恆一子句的邏輯值總是1,不影響子句消去法,所以本文後面提到的3-CNF、3-SAT、 k-CNF或合取範式等一律不包含恆一子句。

  1. 3-CNF表格式和關聯段

分段子句消去法要用到3-CNF的表格表達方式。

4.1 3-CNF的表格式

將邏輯變量x用1表示,x’用0表示,建立的3-CNF表格式如圖2所示。子句以3位二進制數的形式佔表中一行,並且規定變量相同的子句行相鄰。
在這裏插入圖片描述
圖2 3-CNF值格式
Fig. 2 The form of 3-CNF

定義4:變量相同的子句放到一起叫子句塊。
定義5:能夠使子句塊中全部子句消去的變量值叫塊解。

4.2 關聯段

定義6:由相同變量聯接的子句塊組稱爲關聯段。

依據定義,圖2中有5個子句塊的關聯段。

定義7:能使關聯段中所有子句值爲1的段中變量值,稱爲段解。
定義8:子句塊間有一個共同變量的叫一元關聯。子句間有2個共同變量的叫二元關聯。
定義9:子句塊間沒有共同變量的子句塊,稱爲獨立段。

顯然,3-CNF有三個共同變量的子句就是子句塊。

  1. 子句消去法相關定理

    爲了說明子句消去法對k≥3合取範式k-CNF=1求解的有效性,我們以更一般的情況來論述本節一些內容。

5.1 k-CNF的定理

定理1:所有變量值都設定之後,仍然有剩餘子句存在,則設定的n位數不是k-CNF=1的解,否則是解。

證明:因爲依子句消去法,消去的子句值是1,直到所有變量值設定後剩下的子句值一定是0。這些值爲0的子句是合取範式的因子,必使k-CNF=0。

定理2:子句塊中若有互反子句存在,則二值都不是塊解。

證明:依據子句消去法,以子句的值爲1消去的所有子句中不包括其反子句,因此總有其反子句不能被消去,則互反子句值都不是塊解。

推論1:k-CNF中子句的反子句值不是塊解。
推論2:k-CNF子句塊解不超過2k-1個。
推論3:若 k-CNF中有2k個子句的子句塊存在,則k-CNF=1無解。
定理3:從一個子句塊出發確定的k-CNF=1解,也可以從另一子句塊出發確定這個解。

證明:假設由子句塊A確定的解a不是由子句塊B確定的解,那麼因a中必含有B的一個子句值,於是可以從這個值出發,按照a的值擴充來求解,仍然是這個合取範式的一個解。於是可知,從A做起始塊或B做起始塊可以得到相同的解。

由此定理可知,選擇任何子句塊做爲起始塊求解,效果一樣。

定理4:n個變量的k-CNF子句塊最多有Cnk個。

證明:顯然k階子句的變量是從n個變量中取出k個構成的集合,每個變量取值0或1就構成了子句塊。依據排列組合知識,知定理成立。

5.2 3-CNF的定理和性質

定理5:子句塊或關聯段無解,則3-CNF=1無解。

證明:因爲子句塊解與關聯段解都是3-CNF=1解的組成部分,其無解,3-CNF=1自然無解。

將獨立的子句塊也看成一個關聯段,那麼有下面定理6。

定理6:3-CNF=1的求解可以分別對各關聯段求解。

證明:由3-CNF的表格式可知關聯段是不重合的,並且將各關聯段的解按照變量順序組合就是3-CNF=1的解,所以可以分開求解。

定義10:子句消去過程中剩餘子句塊間有相同變量,則稱這些子句塊爲動態塊,消去此動態塊的變量值叫動態塊解。
定理7:動態塊無解,則關聯段無解。

證明:因爲動態塊變量是關聯段解的組成部分,所以動態塊無解,其所在關聯段就無解。

定理8:確定了一個變量值的動態塊其餘變量的所有可能值都存在,則此次段選值不是段解。

證明:如表1所示,如果固定了左側3列中一個變量的值,那麼剩餘2個變量的值可能爲右側的2列值。如果右面2列4行值都存在,則表明無論設定剩餘2個變量取任何值,都不能夠將動態塊的子句消除乾淨,因此知此次選值不是段解。

表1 一個變量值確定其它變量值
Tab. 1 Situation of fixed onevariable
表1

推論4:動態塊確定一個變量值後其餘2變量有3組值,則有惟一動態塊解;兩組或一組值,則有多個動態塊解。
推論5:子句塊中變量有4子句同值,取其它值可無解。
定理9:連續多值可選的關聯段最終可確定段解。

證明:3-CNF求解中只有一個變量值確定的動態塊可以產生多解。若設定關聯變量值後的剩餘動態塊仍然有多值可設,則可連續查找關聯塊,直至無解、有惟一解或有關聯段的結束動態塊出現。如果最終出現關聯子句塊無解,則關聯段無解。如果出現子句塊塊有唯一解,可反方向設定關聯變量值去確定前面每個多值動態塊的解;如果多解情況最終關聯的是未曾設定解的子句塊,可以把子句塊解設定,然後反方向去確定多解的動態子句塊,最終會連成一個關聯段,得到關聯段的解或無解。

  1. 3-SAT分段消去算法

    運用子句消去法,可以按照關聯段設定變量值,消去子句,逐步對3-CNF=1求解。

6.1 關聯段子句消去法

運用子句消去法,可以按照關聯段設定變量值,消去相關子句,逐步對3-CNF=1求解。對沒有8個子句的子句塊組成的數值表3-CNF,進行如下步驟的操作可以求出滿足解。

(1)將所有子句塊中一個變量有4個相同值的變量設定其值,消去相應子句;

(2)對形成表2右側3種類型子句的動態塊和只需設定一個變量值的動態塊求出唯一解,並消去相應子句;

(3)設定所有多解的剩餘子句塊的解,優先處理可能形成無解的情況。

如果前面都是唯一解的情況,遇到了無法迴避的表3的無解情況,那麼3-SAT無解。

依據子句消去法,若所有的關聯段都有解,那麼3-CNF=1就有解。其解爲各關聯段解的組合。

6.2 關聯段子句消去法實例

圖3給出了用分段子句消去法求3-CNF=1的例子。

首先,本例的子句塊x1x2x3選x3=0;子句塊x3x4x5選x5=0;子句塊x4x5x6選x6=0(見圖3(1))。

其次,消去相應子句後,有x5x6x8動態塊必需確定x8=0(圖3(2))

最後,消去相應子句後,剩下了有多解的關聯段(圖3(3)),可以設定x1=0、x2=1將全部剩餘子句消去。此3-CNF=1有解010000***。
圖3
圖3 3-CNF=1求解過程
Fig. 3 procedue of the remove clauses

6.3 分段子句消去法的多項式時間複雜度

分段子句消去法,將3-CNF的子句分成了相互關聯的段,並以段解來組成3-CNF=1的解。由於關聯段是不重複的,所以3-CNF的關聯段最多有[n/3]個,此時最多有一至兩個子句塊之間關聯,其餘子句塊都是獨立的。

由於3-CNF的每個關聯段都可以一次求段解操作,因而用分段子句消去法求出3-CNF=1的解或判定無解,最多需要進行[n/3]段消去子句的過程。從這一點來說,用分段子句消去法求3-CNF=1的解是一個O(n)時間複雜度的算法。

其實,3-CNF=1是否有解,主要取決於子句數m和子句分配的結構,亦即子句之間關聯的程度。3-CNF關聯段子句越多,3-CNF=1的解就越少,反之解的數量會很多。當所有子句塊只有一個子句並且都是獨立塊時,3-CNF=1會有最多的解。

  1. 結論

    3-SAT求滿足解的分段子句消去法是一個多項式時間複雜度的算法。本算法證明了典型的NP-complete問題之一3-SAT是一個P類問題。依據學術界公認的觀點,分段子句消去法可以說明P=NP。

[參考文獻] (References)

[1]https://en.wikipedia.org/wiki/P_versus_NP_problem
[2] Steven Cook. The complexity of theorem proving procedures. In Proc. ThirdAnnual ACM Symposium on the Theory of Computing, pages 151-158,1971.

[3] Thomas H. Cormen Charles E. LeisersonRonald L. Rivest Clufford Stein. Introduction to Algorithms,Third Edition,pages1082-1104,2009.
[4] Gilles Brassard and Paul Bratley. Fundamentals of Algorithmics. PrenticeHall,1996.

附加一個例題:100個變量的3sat求解.xls

2015年11月22日補充修改


我是分割線


個人感慨

好了,終於把姜老師的全文都搬運過來了,姜老師的其他博客中還有關於哈密頓迴路的研究.
但是因爲姜老師目前不是正統的數學研究者,轉變爲了"民科",導致其論文不能發表,因此目前國際上的PvsNP問題還是無解的.
姜老師證明了,這種方法的時間複雜度,最多不超過O(n^4). 即可以在多項式時間內完成: P=NP.

這兩天準備把這個想法轉變爲程序,然後發現一些問題,可能還有待考慮.
先給自己打個預防針吧.

又回來改文章了,這個方法試驗了一下,只有在已知條件特別多的情況下,才比較容易使用
如果知道的條件特別少,這個方法就有點類似於回溯法.
看來不那麼好找到直接解了. 再研究一段時間吧

最後想了想 這個還是不放這裏了, 感覺還是有問題 是按照局部優化的思路來做的.現實中,這些排序就要做很多的工作.

發佈了15 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章