桔子泛泛 作品

第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。