NP完全性问题
在學習算法設計與分析時,經(jīng)常會提到NP完全性問題,到底什么是NP完全性問題? ...
??? NP完全性問題屬于"計算復雜性"研究的課題。 所謂計算復雜性,通俗說來,就是用計算機求解問題的難易程度。其度量標準有兩個:一是計算所需步數(shù)或者指令數(shù)(時間復雜度);二是計算所需的存儲單元數(shù)(空間復雜度)。它不是對一個具體問題去研究它的計算復雜性,而是依據(jù)難度去研究各種計算問題之間的聯(lián)系,按復雜性把問題分成不同的類,即復雜性類。
??? 再強調一下,問題的復雜性和算法的復雜性的區(qū)別是:只就時間復雜性來說,算法的復雜性是指解決一個問題的算法執(zhí)行的時間,這是算法的性質;問題的復雜性是指這個問題本身的復雜程度。計算復雜性要研究的是后者。
??? 如果一個判定性問題的復雜度是該問題的一個實例的規(guī)模n的多項式函數(shù),則稱這種可以在多項式時間內(nèi)解決的判定性問題屬于p類問題。p類問題就是所有復雜度為多項式時間的問題的集合。
?? 然而有些問題很難找到多項式時間的算法(或許根本不存在),比如"找出無向圖中哈密爾頓回路"問題。但是我們發(fā)現(xiàn)如果給了我們該問題的一個答案,就可以在多項式時間內(nèi)判斷這個答案是否正確。給出一個任意的回路,我們很容易判斷它是否是哈密爾頓回路(只要看是不是所有的頂點都在回路中就可以了)。這種可以在多項式時間內(nèi)驗證一個解是否正確的問題成為NP問題,又稱易驗證問題類。
??? 簡單地說,存在多項式時間的算法的一類問題稱為P類問題;而像梵塔問題、推銷員旅行問題等,至今沒有找到多項式時間算法解的一類問題,稱為NP類問題。
??? 復雜性理論中最具理論意義的當數(shù)NP完全性問題(NPC問題),即由于"P=NP是否成立"這個問題難以解決,從NP類的問題中分出復雜性最高的一個子類,把它叫做NP完全類。已經(jīng)證明,任取NP類中的一個問題,再任取NP完全類中的一個問題,則一定存在一個具有多項式
時間復雜性的算法,可以把前者轉變成后者。這就表明,只要能證明NP完全類中有一個問題是屬于P類的,也就證明了NP類中的所有問題都是P類的,即證明了P=NP。
??? 目前已知的NP完全性問題就有2000多個,在圖上定義的許多組合優(yōu)化問題是NP完全性問題,如貨郎問題、調度問題、最大團問題、最大獨立集合問題、Steiner樹問題、背包問題、裝箱問題等,遇到這類問題時,通常從以下幾個方面來考慮,并尋求解決辦法:
??? (1) 動態(tài)規(guī)劃法:較高的解題效率。
??? (2) 分枝限界法: 較高的解題效率。
??? (3) 概率分析法: 平均性能很好。
??? (4) 近似算法: 近似解代替最優(yōu)解。
??? (5) 啟發(fā)式算法:根據(jù)具體問題的啟發(fā)式搜索策略在求解,在實際使用可能很有效,但有時很難說清它的道理。
??? NP完全性問題屬于"計算復雜性"研究的課題。 所謂計算復雜性,通俗說來,就是用計算機求解問題的難易程度。其度量標準有兩個:一是計算所需步數(shù)或者指令數(shù)(時間復雜度);二是計算所需的存儲單元數(shù)(空間復雜度)。它不是對一個具體問題去研究它的計算復雜性,而是依據(jù)難度去研究各種計算問題之間的聯(lián)系,按復雜性把問題分成不同的類,即復雜性類。
??? 再強調一下,問題的復雜性和算法的復雜性的區(qū)別是:只就時間復雜性來說,算法的復雜性是指解決一個問題的算法執(zhí)行的時間,這是算法的性質;問題的復雜性是指這個問題本身的復雜程度。計算復雜性要研究的是后者。
??? 如果一個判定性問題的復雜度是該問題的一個實例的規(guī)模n的多項式函數(shù),則稱這種可以在多項式時間內(nèi)解決的判定性問題屬于p類問題。p類問題就是所有復雜度為多項式時間的問題的集合。
?? 然而有些問題很難找到多項式時間的算法(或許根本不存在),比如"找出無向圖中哈密爾頓回路"問題。但是我們發(fā)現(xiàn)如果給了我們該問題的一個答案,就可以在多項式時間內(nèi)判斷這個答案是否正確。給出一個任意的回路,我們很容易判斷它是否是哈密爾頓回路(只要看是不是所有的頂點都在回路中就可以了)。這種可以在多項式時間內(nèi)驗證一個解是否正確的問題成為NP問題,又稱易驗證問題類。
??? 簡單地說,存在多項式時間的算法的一類問題稱為P類問題;而像梵塔問題、推銷員旅行問題等,至今沒有找到多項式時間算法解的一類問題,稱為NP類問題。
??? 復雜性理論中最具理論意義的當數(shù)NP完全性問題(NPC問題),即由于"P=NP是否成立"這個問題難以解決,從NP類的問題中分出復雜性最高的一個子類,把它叫做NP完全類。已經(jīng)證明,任取NP類中的一個問題,再任取NP完全類中的一個問題,則一定存在一個具有多項式
時間復雜性的算法,可以把前者轉變成后者。這就表明,只要能證明NP完全類中有一個問題是屬于P類的,也就證明了NP類中的所有問題都是P類的,即證明了P=NP。
??? 目前已知的NP完全性問題就有2000多個,在圖上定義的許多組合優(yōu)化問題是NP完全性問題,如貨郎問題、調度問題、最大團問題、最大獨立集合問題、Steiner樹問題、背包問題、裝箱問題等,遇到這類問題時,通常從以下幾個方面來考慮,并尋求解決辦法:
??? (1) 動態(tài)規(guī)劃法:較高的解題效率。
??? (2) 分枝限界法: 較高的解題效率。
??? (3) 概率分析法: 平均性能很好。
??? (4) 近似算法: 近似解代替最優(yōu)解。
??? (5) 啟發(fā)式算法:根據(jù)具體問題的啟發(fā)式搜索策略在求解,在實際使用可能很有效,但有時很難說清它的道理。
總結
- 上一篇: 概率型算法近似算法
- 下一篇: stl algorithm清单