桔子泛泛 作品
第167章 npc,真不是很難!
所謂“p=np?”問題,“?”才是關鍵。
因為不知道等不等於,需要證明的就是等不等於。
簡單點的說,計算機解不同的題目,就是將之拆分成加加減減這樣最基礎的運算。
所以一道題究竟有多難……嗯,主要是對計算機多難,就取決於可以拆分成多少步,或者說花多少時間——計算機基礎運算的時間基本一樣,所以忽略空間方面的因素,二者大致等價。
這叫時間複雜度,用大o也叫漸進符號表示。
o(1)就是常數級複雜度——最常規的計算,數據規模增加多少,運算花費時間也隨之增加多少。
o(logn)就要複雜一點了。
然後還有o(n),o(nlogn),o(n^c),o(c^n),o(n!),o(n^n)……
一級一級,難度逐層上升,解題所用時間花式暴漲。
其中o(n^c)之下,是多項式時間內能解決的,就叫做p類問題。
在此之上的,雖然會隨著n的增長,出現指數級甚至更過分的暴漲,卻有一個共同點,就是正向解很難,給你一個答案去驗證,一般就不難了。
比如大數的質因數分解。
想知道一個大數是不是素數很難,需要從2開始,一直除到根下n。
但告訴你它能被某個數整除,你去驗證,則就幾步的事。
這類可以在多項式時間裡驗證的問題,就叫做np問題。
顯然所有p類問題,都是np問題,因為是簡單可驗證的。
但np類問題,是否都是p類問題?是否存在某些特殊的算法,能將這些問題的難度降低到多項式時間可以解決,就彷彿給答案去驗證的程度上去呢?
這就是“p=np?”了。
在研究的過程中,又誕生出了npc問題及np-hard問題。
所謂npc,就是np問題可以約化成為的一類問題。
只要解決這樣一個問題,就可以附帶的解決一大票問題。只要證明了npc問題有快速算法,就基本證明了p=np。
【np-hard就不說了,這是一類包括npc又大於npc的問題,定義是超出np的,所以和這道題沒什麼關係。】
最初所有人都以為npc只是空想,直到真的出現了這樣一個問題
也就是npc的鼻祖——邏輯電路問題。
此後一大堆npc冒出來,因為要證明新的npc,只要將之歸約為已知的npc就行了,於是哈密頓迴路、tsp問題、sat問題、揹包問題、旅行商問題,都變成了npc。
因為不知道等不等於,需要證明的就是等不等於。
簡單點的說,計算機解不同的題目,就是將之拆分成加加減減這樣最基礎的運算。
所以一道題究竟有多難……嗯,主要是對計算機多難,就取決於可以拆分成多少步,或者說花多少時間——計算機基礎運算的時間基本一樣,所以忽略空間方面的因素,二者大致等價。
這叫時間複雜度,用大o也叫漸進符號表示。
o(1)就是常數級複雜度——最常規的計算,數據規模增加多少,運算花費時間也隨之增加多少。
o(logn)就要複雜一點了。
然後還有o(n),o(nlogn),o(n^c),o(c^n),o(n!),o(n^n)……
一級一級,難度逐層上升,解題所用時間花式暴漲。
其中o(n^c)之下,是多項式時間內能解決的,就叫做p類問題。
在此之上的,雖然會隨著n的增長,出現指數級甚至更過分的暴漲,卻有一個共同點,就是正向解很難,給你一個答案去驗證,一般就不難了。
比如大數的質因數分解。
想知道一個大數是不是素數很難,需要從2開始,一直除到根下n。
但告訴你它能被某個數整除,你去驗證,則就幾步的事。
這類可以在多項式時間裡驗證的問題,就叫做np問題。
顯然所有p類問題,都是np問題,因為是簡單可驗證的。
但np類問題,是否都是p類問題?是否存在某些特殊的算法,能將這些問題的難度降低到多項式時間可以解決,就彷彿給答案去驗證的程度上去呢?
這就是“p=np?”了。
在研究的過程中,又誕生出了npc問題及np-hard問題。
所謂npc,就是np問題可以約化成為的一類問題。
只要解決這樣一個問題,就可以附帶的解決一大票問題。只要證明了npc問題有快速算法,就基本證明了p=np。
【np-hard就不說了,這是一類包括npc又大於npc的問題,定義是超出np的,所以和這道題沒什麼關係。】
最初所有人都以為npc只是空想,直到真的出現了這樣一個問題
也就是npc的鼻祖——邏輯電路問題。
此後一大堆npc冒出來,因為要證明新的npc,只要將之歸約為已知的npc就行了,於是哈密頓迴路、tsp問題、sat問題、揹包問題、旅行商問題,都變成了npc。