排序 np_P问题、NP问题、NP完全问题和NP难问题理解
P 問題
P類問題(P:polynominal,多項式):存在多項式時間算法的問題。以排序為例,在排序這個大問題里,是可以找到一種時間復雜度為多項式o(n^2),o(nlogn)的算法(如冒泡排序法,快速排序)來求解排序問題的,所以我們說排序問題是一個有多項式時間算法的問題。所以我們稱,P類問題就是存在多項式時間算法的問題。
時間復雜度:o(1)<o(n)<o(nlgn)<o(n^2)<o(n^a)<o(e^n)<o(n!)
多項式級別:o(1)<o(n)<o(nlgn)<o(n^2)<o(n^a)
非多項式級別:o(e^n)<o(n!),計算機難以承受
NP 問題
NP類問題(NP:Nondeterministic polynominal,非確定性多項式):能在多項式時間內驗證得出一個正確解的問題。P類問題是NP問題的子集,因為存在多項式時間解法的問題,總能在多項式時間內驗證他。
著名的NP類問題舉例:
旅行家推銷問題:即有一個推銷員,要到n個城市推銷商品,他要找出一個包含所有n個城市的環路,這個環路路徑小于a。我們知道這個問題如果單純的用枚舉法來列舉的話會有(n-1)! 種,已經不是多項式時間的算法了,(注:階乘算法比多項式的復雜)。那怎么辦呢?我們可以用猜的,假設我人品好,猜幾次就猜中了一條小于長度a的路徑,我畫畫,好的,我得到了一條路徑小于a的環路,問題解決了,皆大歡喜。可是,我不可能每次都猜的那么準,也許我要猜完所有種呢?所以我們說,這是一個NP類問題。也就是,我們能在多項式的時間內驗證并得出問題的正確解,可是我們卻不知道該問題是否存在一個多項式時間的算法,每次都能解決他(注意,這里是不知道,不是不存在)。
NPC 問題
NPC類問題(Nondeterminism Polynomial complete):存在這樣一個NP問題,所有的`NP`問題都可以約化成它。換句話說,只要解決了這個問題,那么所有的NP問題都解決了。其定義要滿足2個條件:
- 它得是一個NP問題;
- 所有的NP問題都可以約化到它。
要證明NPC問題的思路就是: 先證明它至少是一個NP問題,再證明其中一個已知的NPC問題能約化到它。
NPH 問題
NP難問題(NP-hard問題):它滿足NPC問題定義的第二條但不一定要滿足第一條(就是說,NP-Hard問題要比 NPC問題的范圍廣,NP-Hard問題沒有限定屬于NP),即所有的NP問題都能約化到它,但是他不一定是一個NP問題。
NP-Hard問題同樣難以找到多項式的算法,但它不列入我們的研究范圍,因為它不一定是NP問題。即使NPC問題發現了多項式級的算法,NP-Hard問題有可能仍然無法得到多項式級的算法。事實上,由于NP-Hard放寬了限定條件,它將有可能比所有的NPC問題的時間復雜度更高從而更難以解決。
總結
以上是生活随笔為你收集整理的排序 np_P问题、NP问题、NP完全问题和NP难问题理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高桥盾react和boost_boost
- 下一篇: 图标适配大小_主题真的是大吃一鲸适配全E