P,NP,NPC,NP-Hard,co-NP问题辨析
??????學(xué)算法學(xué)到這章,真是神仙打架。上網(wǎng)學(xué)習(xí)各位前輩的文章,看的我也是眼花繚亂。終于看到一篇易于理解的(網(wǎng)址附于文末),看過之后寫寫自己的理解。如有錯誤,請各位前輩指正!
??????P問題,在這里不說全稱了,感覺說了也沒用。P問題就是指能在多項式時間求解出的問題。舉個例子:排序問題,二分查找問題的時間復(fù)雜度分別是O(nlogn),O(logn)。
??????說到時間復(fù)雜度,這篇文章對此也做了詳細的解釋,成功刷新了我對于時間復(fù)雜度的理解,原文如下,再次引用:
??????“時間復(fù)雜度并不是表示一個程序解決問題需要花多少時間,而是當(dāng)問題規(guī)模擴大后,程序需要的時間長度增長得有多快。也就是說,對于高速處理數(shù)據(jù)的計算機來說,處理某一個特定數(shù)據(jù)的效率不能衡量一個程序的好壞,而應(yīng)該看當(dāng)這個數(shù)據(jù)的規(guī)模變大到數(shù)百倍后,程序運行時間是否還是一樣,或者也跟著慢了數(shù)百倍,或者變慢了數(shù)萬倍。不管數(shù)據(jù)有多大,程序處理花的時間始終是那么多的,我們就說這個程序很好,具有O(1)的時間復(fù)雜度,也稱常數(shù)級復(fù)雜度;數(shù)據(jù)規(guī)模變得有多大,花的時間也跟著變得有多長,這個程序的時間復(fù)雜度就是O(n),比如找n個數(shù)中的最大值;而像冒泡排序、插入排序等,數(shù)據(jù)擴大2倍,時間變慢4倍的,屬于O(n^2)的復(fù)雜度。”
??????NP問題就是不能確定是否能夠在多項式時間內(nèi)找到一個解。但若給出一個解,能在多項式時間內(nèi)證明這個解是否正確(學(xué)名叫判定性問題)。定義的前半句有兩層含義:可能找得到解,也可能找不到解。找得到解問題就變成了P問題。所以P問題屬于NP問題(P問題是NP問題的真子集)
??????NPC問題,說到NPC問題,就要提到一個操作叫“規(guī)約”。這里有一個易受誤導(dǎo)的地方,規(guī)約不是越化越簡單,反而是越化越難。舉個例子:A是求解一元一次函數(shù),B是求解一元二次函數(shù)。可以說A可規(guī)約至B,因為會解B,一定會解A。可把A看作是二次項系數(shù)為0的B。所以,每規(guī)約一步,問題就變得越復(fù)雜。規(guī)約具有傳遞性:A規(guī)約至B,B規(guī)約至C,那么A規(guī)約至C。問題來了,那么一直規(guī)約下去會得到什么呢?這就是NPC問題!
??????NPC問題上文有所介紹,它是由NP問題不斷規(guī)約得來。首先NPC本身是一個NP問題,這是證明一個問題是NPC問題的首要條件。有NPC和NP問題之間的關(guān)系,可以看出:如果一個NPC問題得到了證明,那么所有可以規(guī)約至該NPC的NP問題都得到了證明。到目前為止,部分NPC問題得到了證明,但還有很多未證明。也有人把這些問題稱之為信息學(xué)的“巔峰”。(一猜也知道是很難的!)下面介紹一下證明一個問題是NPC問題的方法:
第一步:證明這個問題是一個NP問題
第二步:證明一個已知的NP問題能夠規(guī)約到該問題。
??????NP-Hard問題,就是滿足NPC問題的第二個條件,但是卻不一定滿足第一個條件的問題。任意NP問題都可以在多項式的時間內(nèi)規(guī)約至NP-Hard問題。但像上文說的,NP-Hard問題不一定是NP問題。通俗點說,NP-Hard問題就是至少和NPC問題一樣難。可能是NPC也可能不是NPC(這取決于NP-Hard問題是否為NP問題)。
??????Co-NP問題是由補問題屬于NP問題的問題組成。對于co-NP問題上網(wǎng)差了一些資料。主要的研究方向好像是co-NP問題和NP問題的關(guān)系。鑒于水平有限,實在是看不懂,就此作罷!還望高手指點。
??????最后貼一張書上的圖,說明各類問題之間的關(guān)系:
參考網(wǎng)址:blog.sina.com.cn/s/blog_53bbb4b90101ckkq.htmllink
(該網(wǎng)址的主人也是轉(zhuǎn)載的,原主人的網(wǎng)址有權(quán)限。無法訪問,請原主人諒解)
總結(jié)
以上是生活随笔為你收集整理的P,NP,NPC,NP-Hard,co-NP问题辨析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 如何实现主从复制
- 下一篇: 最小生成树——克鲁斯卡尔算法