那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

NP完全性理論與近似算法

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:未知 ? 作者:胡薇 ? 2018-06-22 16:12 ? 次閱讀

一、圖靈機(jī)

根據(jù)有限狀態(tài)控制器的當(dāng)前狀態(tài)及每個讀寫頭讀到的帶符號,圖靈機(jī)的一個計算步可實(shí)現(xiàn)下面3個操作之一或全部。

改變有限狀態(tài)控制器中的狀態(tài)。

清除當(dāng)前讀寫頭下的方格中原有帶符號并寫上新的帶符號。

獨(dú)立地將任何一個或所有讀寫頭,向左移動一個方格(L)或向右移動一個方格(R)或停在當(dāng)前單元不動(S)。

k帶圖靈機(jī)可形式化地描述為一個7元組(Q,T,I,δ,b,q0,qf),其中:

Q是有限個狀態(tài)的集合。

T是有限個帶符號的集合。

I是輸入符號的集合。

b是唯一的空白符,b∈T-I。

q0是初始狀態(tài)。

qf是終止(或接受)狀態(tài)。

δ是移動函數(shù)。

它是從Q×Tk的某一子集映射到Q×(T×{L,R,S})k的函數(shù)。

圖靈機(jī)M的時間復(fù)雜性T(n)是它處理所有長度為n的輸入所需的最大計算步數(shù)。如果對某個長度為n的輸入,圖靈機(jī)不停機(jī),T(n)對這個n值無定義。

圖靈機(jī)的空間復(fù)雜性S(n)是它處理所有長度為n的輸入時,在k條帶上所使用過的方格數(shù)的總和。如果某個讀寫頭無限地向右移動而不停機(jī),S(n)也無定義。

確定型圖靈機(jī)

有限狀態(tài)集Q,狀態(tài)q0:初始狀態(tài);qy:接受狀態(tài);狀態(tài)qn:不接受狀態(tài)。

字符集合{0, 1, b} ;其中b是空格符。

轉(zhuǎn)換功能:

輸入x = 101000b

執(zhí)行順序:

q0輸入1 (q0,r)右移磁頭到0

q0輸入0 (q0,r)右移磁頭到1

q0輸入0 (q0,r)右移磁頭到0

...

q0輸入b (q1,l)左移磁頭到0

q1輸入0 (q2,b)

q2輸入b (q2,l)左移磁頭到0

q2輸入0 (q3,b)

q3輸入b (qy,l)退出

二、P類與NP類問題

一般地說,將可由多項式時間算法求解的問題看作是易處理的問題,而將需要超多項式時間才能求解的問題看作是難處理的問題。

有許多問題,從表面上看似乎并不比排序或圖的搜索等問題更困難,然而至今人們還沒有找到解決這些問題的多項式時間算法,也沒有人能夠證明這些問題需要超多項式時間下界。

在圖靈機(jī)計算模型下,這類問題的計算復(fù)雜性至今未知。

為了研究這類問題的計算復(fù)雜性,人們提出了另一個能力更強(qiáng)的計算模型,即非確定性圖靈機(jī)計算模型,簡記為NDTM(Nondeterministic Turing Machine)。

在非確定性圖靈機(jī)計算模型下,許多問題可以在多項式時間內(nèi)求解。

非確定性圖靈機(jī)

在圖靈機(jī)計算模型中,移動函數(shù)δ是單值的,即對于Q′Tk中的每一個值,當(dāng)它屬于δ的定義域時,Q′(T′{L,R,S})k中只有唯一的值與之對應(yīng),稱這種圖靈機(jī)為確定性圖靈機(jī),簡記為DTM(Deterministic Turing Machine)。

非確定性圖靈機(jī)(NDTM):一個k帶的非確定性圖靈機(jī)M是一個7元組:(Q,T,I,δ,b,q0,qf)。與確定性圖靈機(jī)不同的是非確定性圖靈機(jī)允許移動函數(shù)δ具有不確定性,即對于Q×Tk中的每一個值(q;x1,x2,…,xk),當(dāng)它屬于δ的定義域時,Q×(T×{L,R,S})k中有唯一的一個子集δ(q;x1,x2,…,xk)與之對應(yīng)??梢栽讦?q;x1,x2,…,xk)中隨意選定一個值作為它的函數(shù)值。

P類與NP類語言定義

P={L|L是一個能在多項式時間內(nèi)被一臺DTM所接受的語言}

NP={L|L是一個能在多項式時間內(nèi)被一臺NDTM所接受的語言}

由于一臺確定性圖靈機(jī)可看作是非確定性圖靈機(jī)的特例,所以可在多項式時間內(nèi)被確定性圖靈機(jī)接受的語言也可在多項式時間內(nèi)被非確定性圖靈機(jī)接受。故P í NP。

NP類語言舉例——無向圖的團(tuán)問題

該問題的輸入是一個有n個頂點(diǎn)的無向圖G=(V,E)和一個整數(shù)k。要求判定圖G是否包含一個k頂點(diǎn)的完全子圖(團(tuán)),即判定是否存在V’V,|V’|=k,且對于所有的u,v∈V’,有(u,v)∈E。

若用鄰接矩陣表示圖G,用二進(jìn)制串表示整數(shù)k,則團(tuán)問題的一個實(shí)例可以用長度為的二進(jìn)位串表示。因此,團(tuán)問題可表示為語言:

CLIQUE={w#v|w,v∈{0,1}*,以w為鄰接矩陣的圖G有一個k頂點(diǎn)的團(tuán),其中v是k的二進(jìn)制表示。}

接受該語言CLIQUE的非確定性算法:用非確定性選擇指令選出包含k個頂點(diǎn)的候選頂點(diǎn)子集V,然后確定性地檢查該子集是否是團(tuán)問題的一個解。算法分為3個階段

算法的第一階段將輸入串w#v分解,并計算出n =?,以及用v表示的整數(shù)k。若輸入不具有形式w#v或|w|不是一個平方數(shù)就拒絕該輸入。顯而易見,第一階段可在時間內(nèi)完成。

在算法的第二階段中,非確定性地選擇V的一個k元子集V’V。

算法的第三階段是確定性地檢查V’的團(tuán)性質(zhì)。若V’是一個團(tuán)則接受輸入,否則拒絕輸入。這顯然可以在時間內(nèi)完成。因此,整個算法的時間復(fù)雜性為?。

非確定性算法在多項式時間內(nèi)接受語言CLIQUE,故CLIQUE∈NP.

NP完全問題

PNP。

直觀上看,P類問題是確定性計算模型下的易解問題類,而NP類問題是非確定性計算模型下的易驗證問題類。

大多數(shù)的計算機(jī)科學(xué)家認(rèn)為NP類中包含了不屬于P類的語言,即P≠NP。

NP完全問題有一種令人驚奇的性質(zhì),即如果一個NP完全問題能在多項式時間內(nèi)得到解決,那么NP中的每一個問題都可以在多項式時間內(nèi)求解,即P = NP。

目前還沒有一個NP完全問題有多項式時間算法。

三、NP完全問題的近似算法

迄今為止,所有的NP完全問題都還沒有多項式時間算法。

對于這類問題,通常可采取以下幾種解題策略。

只對問題的特殊實(shí)例求解

用動態(tài)規(guī)劃法或分支限界法求解

用概率算法求解

只求近似解

用啟發(fā)式方法求解

近似算法的性能

若一個最優(yōu)化問題的最優(yōu)值為c*,求解該問題的一個近似算法求得的近似最優(yōu)解相應(yīng)的目標(biāo)函數(shù)值為c,則將該近似算法的性能比定義為

在通常情況下,該性能比是問題輸入規(guī)模n的一個函數(shù)ρ(n),即

該近似算法的相對誤差定義為:。若對問題的輸入規(guī)模n,有一函數(shù)ε(n)使得則稱ε(n)為該近似算法的相對誤差界。近似算法的性能比ρ(n)與相對誤差界ε(n)之間顯然有如下關(guān)系:

旅行售貨員問題近似算法

問題描述:給定一個完全無向圖G=(V,E),其每一邊(u,v)∈E有一非負(fù)整數(shù)費(fèi)用c(u,v)。要找出G的最小費(fèi)用哈密頓回路。

旅行售貨員問題的一些特殊性質(zhì):

比如,費(fèi)用函數(shù)c往往具有三角不等式性質(zhì),即對任意的3個頂點(diǎn)u,v,w∈V,有:c(u,w)≤c(u,v)+c(v,w)。當(dāng)圖G中的頂點(diǎn)就是平面上的點(diǎn),任意2頂點(diǎn)間的費(fèi)用就是這2點(diǎn)間的歐氏距離時,費(fèi)用函數(shù)c就具有三角不等式性質(zhì)。

1 滿足三角不等式的旅行售貨員問題

對于給定的無向圖G,可以利用找圖G的最小生成樹的算法設(shè)計找近似最優(yōu)的旅行售貨員回路的算法。

void approxTSP (Graph g)

{

選擇g的任一頂點(diǎn)r;

用Prim算法找出帶權(quán)圖g的一棵以r為根的最小生成樹T;

前序遍歷樹T得到的頂點(diǎn)表L;

將r加到表L的末尾,按表L中頂點(diǎn)次序組成回路H,作為計 算結(jié)果返回;

}

當(dāng)費(fèi)用函數(shù)滿足三角不等式時,算法找出的旅行售貨員回路的費(fèi)用不會超過最優(yōu)旅行售貨員回路費(fèi)用的2倍。

實(shí)現(xiàn)

/* 主題:近似算法——旅行售貨員問題

* 作者:chinazhangjie

* 郵箱:chinajiezhang@gmail.com

* 開發(fā)語言:C++

* 開發(fā)環(huán)境:Virsual Studio2005

* 時間: 2010.12.06

*/

#include

#include

#include

using namespace std;

structTreeNode

{

public:

TreeNode(intnVertexIndexA = 0,intnVertexIndexB = 0,intnWeight = 0)

: m_nVertexIndexA(nVertexIndexA),

m_nVertexIndexB(nVertexIndexB),

m_nWeight(nWeight)

{}

public:

intm_nVertexIndexA;

intm_nVertexIndexB;

intm_nWeight;

};

classMST_Prim

{

public:

MST_Prim()

{}

MST_Prim(const vector >& vnGraph)

{

m_nvGraph = vnGraph;

m_nNodeCount = (int)m_nvGraph.size();

}

void SetData(const vector >& vnGraph)

{

m_nvGraph = vnGraph;

m_nNodeCount = (int)m_nvGraph.size();

}

//

const vector& GetMSTree()const

{

returnm_tnMSTree;

}

//

const vector >& GetGraph()const

{

returnm_nvGraph;

}

void DoPrim()

{

// 是否被訪問標(biāo)志

vector bFlag(m_nNodeCount,false);

bFlag[0] = true;

intnMaxIndexA;

intnMaxIndexB;

intj = 0;

while(j < m_nNodeCount - 1){

intnMaxWeight = numeric_limits::max();

// 找到當(dāng)前最短路徑

inti = 0;

while(i < m_nNodeCount){

if(!bFlag[i]){

++ i;

continue;

}

for(intj = 0;j < m_nNodeCount; ++ j){

if(!bFlag[j] && nMaxWeight > m_nvGraph[i][j]){

nMaxWeight = m_nvGraph[i][j];

nMaxIndexA = i;

nMaxIndexB = j;

}

}

++ i;

}

bFlag[nMaxIndexB] = true;

m_tnMSTree.push_back(TreeNode(nMaxIndexA,nMaxIndexB,nMaxWeight));

++ j;

}

// 輸出結(jié)果

/*for(vector::const_iterator ite = m_tnMSTree.begin();

ite != m_tnMSTree.end();

++ ite){

cout << (*ite).m_nVertexIndexA << "->"

<< (*ite).m_nVertexIndexB << " : "

<< (*ite).m_nWeight << endl;

}*/

}

private:

vector > m_nvGraph;// 無向連通圖

vectorm_tnMSTree;// 最小生成樹

intm_nNodeCount;

};

classAA_TSP

{

public:

AA_TSP(const vector >& vnGraph)

{

m_mstPrim.SetData(vnGraph);

}

void Get_AA_Path()

{

m_mstPrim.DoPrim();

vectormstree = m_mstPrim.GetMSTree();

vector >graph = m_mstPrim.GetGraph();

intiweight = 0;

for(vector::const_iterator ite = mstree.begin();

ite != mstree.end();

++ ite){

cout << (*ite).m_nVertexIndexA << "->"

<< (*ite).m_nVertexIndexB << " : "

<< (*ite).m_nWeight << endl;

iweight += (*ite).m_nWeight;

}

cout << mstree[mstree.size()-1].m_nVertexIndexB << "->"

<< mstree[0].m_nVertexIndexA << " : "

<< graph[mstree[0].m_nVertexIndexA][mstree[mstree.size()-1].m_nVertexIndexB]

<< endl;

iweight += graph[mstree[0].m_nVertexIndexA][mstree[mstree.size()-1].m_nVertexIndexB];

cout << "Total weight: " << iweight??<< endl;

}

private:

MST_Primm_mstPrim;

};

intmain()

{

const intcnNodeCount = 5;

vector > graph(cnNodeCount);

for(size_ti = 0;i < graph.size(); ++ i){

graph[i].resize(cnNodeCount,numeric_limits::max());

}

graph[0][1] = 5;

graph[0][2] = 1;

graph[0][3] = 2;

graph[0][4] = 3;

graph[1][0] = 5;

graph[1][2] = 4;

graph[1][3] = 2;

graph[1][4] = 2;

graph[2][1] = 4;

graph[2][0] = 1;

graph[2][3] = 5;

graph[2][4] = 3;

graph[3][1] = 2;

graph[3][2] = 5;

graph[3][0] = 2;

graph[3][4] = 2;

graph[4][1] = 2;

graph[4][2] = 3;

graph[4][3] = 2;

graph[4][0] = 3;

AA_TSP aa(graph);

aa.Get_AA_Path();

return0;

}

2 一般的旅行售貨員問題

在費(fèi)用函數(shù)不一定滿足三角不等式的一般情況下,不存在具有常數(shù)性能比的解TSP問題的多項式時間近似算法,除非P=NP。換句話說,若P≠NP,則對任意常數(shù)ρ>1,不存在性能比為ρ的解旅行售貨員問題的多項式時間近似算法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖靈機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    8

    瀏覽量

    2258

原文標(biāo)題:NP 完全性理論與近似算法

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    李雅普諾夫穩(wěn)定性理論

    李雅普諾夫穩(wěn)定性理論1892年,俄國Lyapunov在《運(yùn)動穩(wěn)定性的 一般問題》中提出了穩(wěn)定性理論主要內(nèi)容:李氏第一法(間接法):求解特征方程   特征值李氏第二法(直接法):利用經(jīng)驗和技巧來構(gòu)造L函數(shù)
    發(fā)表于 05-26 11:50

    清華大學(xué)的線性理論

    清華大學(xué)的線性理論
    發(fā)表于 05-14 12:44

    ComputeColStats UDF中 近似算法的介紹

    的平衡。接下來的內(nèi)容是關(guān)于目前在ComputeColStats中用的一些近似算法。二,收集的內(nèi)容目前針對列主要會收集以下統(tǒng)計信息:cntRows : 列中總數(shù)據(jù)個數(shù),包括nulll值avgColLen
    發(fā)表于 04-26 15:42

    開槽波導(dǎo)3次諧波回旋行波放大管非線性理論與數(shù)值模擬

    開槽波導(dǎo)3次諧波回旋行波放大管非線性理論與數(shù)值模擬 本文討論了開槽圓柱波導(dǎo)的高頻場分布,給出了注波互作用自洽非線性理論.在電子作大回旋
    發(fā)表于 10-21 22:13 ?1020次閱讀
    開槽波導(dǎo)3次諧波回旋行波放大管非線<b class='flag-5'>性理論</b>與數(shù)值模擬

    電源完整性理論基礎(chǔ)

    電源完整性理論基礎(chǔ),很全面的經(jīng)驗總結(jié)喲,電源完整性
    發(fā)表于 12-22 14:49 ?15次下載

    基于改進(jìn)的多元自適應(yīng)樣條回歸的全局近似算法_羅小玲

    基于改進(jìn)的多元自適應(yīng)樣條回歸的全局近似算法_羅小玲
    發(fā)表于 03-16 14:50 ?1次下載

    簡稱 PI(power integrity)電源完整性理論基礎(chǔ)

    簡稱 PI(power integrity)電源完整性理論基礎(chǔ)
    發(fā)表于 09-15 17:23 ?12次下載
    簡稱 PI(power integrity)電源完整<b class='flag-5'>性理論</b>基礎(chǔ)

    改進(jìn)凸包插值算法結(jié)合大概率優(yōu)化的演化算法

    近似算法在解決超大規(guī)模旅行商問題時無法獲得高精度優(yōu)化解(或者次優(yōu)解),智能算法雖然可以獲得精度高于近似算法的解,很難在合理時間內(nèi)獲得。采用改良的凸包近似算法構(gòu)成初始解并結(jié)合大概率優(yōu)化策
    發(fā)表于 11-22 11:48 ?4次下載

    團(tuán)圖點(diǎn)刪除問題的近似算法

    針對團(tuán)圖點(diǎn)刪除問題的3一近似算法得到的近似解可能較大的問題,通過對團(tuán)圖點(diǎn)刪除問題及團(tuán)圖特性的分析,提出了該問題的一個新的近似算法。新算法通過考察圖中節(jié)點(diǎn)的一階和二階鄰點(diǎn)來計算節(jié)點(diǎn)關(guān)聯(lián)的
    發(fā)表于 01-04 14:58 ?0次下載

    如何使用Visual C++實(shí)現(xiàn)裝箱問題的BF算法

    c 的箱子里。采用不同裝箱方法所需的箱子數(shù)可能不同[1] 。要解決的問題是如何使用最少的箱子數(shù)將這 m 種貨品裝進(jìn)去。裝箱問題是 NP 問題,這是不容易得到一個最佳的解決方案,為了比較快速得到滿意解,近似算法經(jīng)常被使用。常見的算法
    發(fā)表于 05-13 08:00 ?1次下載
    如何使用Visual C++實(shí)現(xiàn)裝箱問題的BF<b class='flag-5'>算法</b>

    基于量子軟件的量子絕熱近似算法求解

    經(jīng)典近似算法求解最大割問題時,時間復(fù)雜度與圖的復(fù)雜度呈正相關(guān)。為提高求解效率,使用量子絕熱近似算法求解無向圖最大割問題哈密頓量的基態(tài),其基態(tài)對應(yīng)該問題的最優(yōu)解。該算法的時間復(fù)雜度不依賴于圖的頂點(diǎn)
    發(fā)表于 05-12 14:28 ?8次下載

    電磁彈性理論及其應(yīng)用—電磁彈性結(jié)構(gòu)力學(xué)的理論模型等

    介紹了電磁彈性理論及其應(yīng)用—電磁彈性結(jié)構(gòu)力學(xué)的理論模型、研究方法、定量分析程序
    發(fā)表于 02-13 10:39 ?2次下載

    反饋放大器的穩(wěn)定性理論及應(yīng)用

    eetop.cn_反饋放大器的穩(wěn)定性理論及應(yīng)用
    發(fā)表于 06-13 14:44 ?9次下載

    彈塑性理論

    彈塑性理論,介紹物體在受力作用下的彈塑性變形
    發(fā)表于 06-26 09:36 ?0次下載

    近似算法及對某些標(biāo)準(zhǔn)問題的適用性

      背景數(shù)學(xué)表達(dá)式的評估常伴隨常量、變量分析和方程的階,可用于衡量近似的復(fù)雜度。此類評估將問題分解為 P 和 NP 難問題。P 問題和 NP 問題的策略P 問題是指可以在多項式時間內(nèi)求解的問題。
    的頭像 發(fā)表于 07-06 11:02 ?826次閱讀
    澳门百家乐技术| 南陵县| 公海百家乐官网的玩法技巧和规则 | 百家乐官网社区| 明升网址 | 适合做生意的开运方法| 百家乐统计| 百家乐官网蓝盾假网| 游戏房百家乐赌博图片| 百家乐官网千术道具| 百家乐一般多大码| 永新县| 新彩百家乐的玩法技巧和规则| 澳门百家乐官网奥秘| 网络赌博| 百家乐娱乐软件| 网上的百家乐官网怎么才能赢| 网上博彩业| 百家乐娱乐场开户注册| 百家乐官网变牌器批发| 365棋牌游戏| 百家乐网上投注网站| 百家乐官网真人游戏开户| 大众百家乐娱乐城| 百家乐官网切入法| 电动扑克| 至尊百家乐娱乐| 百家乐官网八卦九| 久盛娱乐城| 悦榕庄百家乐的玩法技巧和规则| 机器百家乐官网作弊| 清原| 百家乐全部规则| 在线百家乐官网下| 乐透乐博彩网| 百家乐游戏种类| 百家乐官网翻天在线观看| 固阳县| 大发888娱乐城在线存款| 南京百家乐在哪| 名仕百家乐官网的玩法技巧和规则|