首先說明一下問題的複雜性和演算法的複雜性的區別,下面只考慮時間複雜性。演算法的複雜性是指解決問題的乙個具體的演算法的執行時
間,這是演算法的性質;問題的複雜性是指這個問題本身的複雜程度,是問題的性質。比如對於排序問題,如果我們只能通過元素間的相互比較
來確定元素間的相互位置,而沒有其他的附加可用資訊,則排序問題的複雜性是o(nlgn),但是排序演算法有很多,冒泡法是o(n^2),快速排序平
均情況下是o(nlgn)等等,排序問題的複雜性是指在所有的解決該問題的演算法中最好演算法的複雜性。問題的複雜性不可能通過列舉各種可能演算法
來得到,一般都是預先估計乙個值,然後從理論上證明。
為了研究問題的複雜性,我們必須將問題抽象,為了簡化問題,我們只考慮一類簡單的問題,判定性問題,即提出乙個問題,只需要
回答yes或者no的問題。任何一般的最優化問題都可以轉化為一系列判定性問題,比如求圖中從a到b的最短路徑,可以轉化成:從a到b是否有長
度為1的路徑?從a到b是否有長度為2的路徑?。。。從a到b是否有長度為k的路徑?如果問到了k的時候回答了yes,則停止發問,我們可以說從
a到b的最短路徑就是k。
如果乙個判定性問題的複雜度是該問題的乙個例項的規模n的多項式函式,則我們說這種可以在多項式時間內解決的判定性問題屬於p
類問題。p類問題就是所有複雜度為多項式時間的問題的集合。
然而有些問題很難找到多項式時間的演算法(或許根本不存在),比如找出無向圖中的哈公尺爾頓迴路問題,但是我們發現如果給了我們
該問題的乙個答案,我們可以在多項式時間內判斷這個答案是否正確。比如說對於哈公尺爾頓迴路問題,給乙個任意的迴路,我們很容易判斷他
是否是哈公尺爾頓迴路(只要看是不是所有的頂點都在迴路中就可以了)。這種可以在多項式時間內驗證乙個解是否正確的問題稱為np問題。顯
然,所有的p類問題都是屬於np問題的,但是現在的問題是,p是否等於np?這個問題至今還未解決。注意,np問題不一定都是難解的問題,比如
簡單的陣列排序問題是p類問題,但是p屬於np,所以也是np問題,你能說他很難解麼?
剛才說了,現在還不知道是否有p=np或者p<>np,但是後來人們發現還有一系列的特殊np問題,這類問題的特殊性質使得很多人相信p<>np,只
不過現在還無法證明。這類特殊的np問題就是np完全問題(npc問題,c代表complete)。npc問題存在著乙個令人驚訝的性質,即如果乙個npc
問題存在多項式時間的演算法,則所有的np問題都可以在多項式時間內求解,即p=np成立!!這是因為,每乙個npc問題可以在多項式時間內轉化
成任何乙個np問題。比如前面說的哈公尺爾頓迴路問題就是乙個npc問題。npc問題的歷史並不久,cook在2023年找到了第乙個npc問題,此後人們
又陸續發現很多npc問題,現在可能已經有3000多個了。所以,我們一般認為npc問題是難解的問題,因為他不太可能存在乙個多項式時間的算
法(如果存在則所有的np問題都存在多項式時間演算法,這太不可思議了,但是也不是不可能)。
類似哈公尺爾頓迴路/路徑問題,貨郎擔問題,集團問題,最小邊覆蓋問題(注意和路徑覆蓋的區別),等等很多問題都是npc問題,所
以都是難解的問題。
什麼叫做NP問題,什麼叫做NPC問題
首先說明一下問題的複雜性和演算法的複雜性的區別,下面只考慮時間複雜性。演算法的複雜性是指解決問題的乙個具體的演算法的執行時 間,這是演算法的性質 問題的複雜性是指這個問題本身的複雜程度,是問題的性質。比如對於排序問題,如果我們只能通過元素間的相互比較 來確定元素間的相互位置,而沒有其他的附加可用資訊...
什麼叫做安慰!
蘇 蘇格拉底 孩子,為什麼悲傷?失 失戀者 我失戀了。蘇 哦,這很正常。如果失戀了沒有悲傷,戀愛大概就沒有什麼味道。可是,年輕人,我怎麼發現你對失戀的投入甚至比對戀愛的投入還要 傾心呢?失 到手的葡萄給丟了,這份遺憾,這份失落,您非個中人,怎知其中的酸楚啊。蘇 丟了就是丟了,何不繼續向前走去,鮮美的...
什麼叫做質數
自然數 用以計量事物的件數或表示事物次序的數 即用數碼0,1,2,3,4,所表示的數 自然數由0開始 乙個接乙個,組成乙個無窮集合。質數 就是在所有比1大的整數中,除了1和它本身以外,不再有別的約數,這種整數叫做質數或素數。另說法 因為偶數2很特殊,它只有1和2兩個約數,所以2也是質數。除了2以外,...