日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

背包问题的多项式时间近似解

發(fā)布時(shí)間:2024/1/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 背包问题的多项式时间近似解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背包問(wèn)題的多項(xiàng)式時(shí)間近似解

    • 一些概念
    • 背包問(wèn)題的偽多項(xiàng)式時(shí)間算法
    • 強(qiáng)NP難問(wèn)題和FPTAS

一些概念

  • ∏\prod 是一個(gè)NP難問(wèn)題的優(yōu)化問(wèn)題
  • f∏f_{\prod}f? 是這個(gè)優(yōu)化問(wèn)題的目標(biāo)函數(shù),也就是我們要優(yōu)化得到的近似解
  • I 是問(wèn)題實(shí)例
  • ?\epsilon? 是錯(cuò)誤參數(shù),我們得到的近似算法,有下面的性質(zhì)
  • 如果ΠΠΠ是一個(gè)最小化問(wèn)題,則fΠf_ΠfΠ?(I,s)≤(1 +ε)· OPT。
  • 如果ΠΠΠ是一個(gè)最大化問(wèn)題,則fΠf_ΠfΠ?(I,s)≥(1-ε)· OPT。

PTAS:Polynomial-Time Approximation Scheme ,多項(xiàng)式時(shí)間的近似模式,對(duì)于任意一個(gè)整數(shù)ε,這個(gè)模式的執(zhí)行時(shí)間不超過(guò)問(wèn)題實(shí)例規(guī)模n的多項(xiàng)式。這個(gè)多項(xiàng)式能隨著?\epsilon?的減小而增長(zhǎng)得十分迅速。如O(n2?)O(n^{\frac{2}{\epsilon}})O(n?2?)

FPTAS:Fully Polynomial-Time Approximation Scheme,完全多項(xiàng)式時(shí)間的近似模式,由于PTAS中,多項(xiàng)式時(shí)間受到?\epsilon?的約束是任意的,那么,這個(gè)多項(xiàng)式可能增長(zhǎng)得很快,因此,我們希望多項(xiàng)式受到的約束是1?\frac{1}{\epsilon}?1?的,這樣多項(xiàng)式的增長(zhǎng)就不會(huì)因?yàn)?span id="ozvdkddzhkzd" class="katex--inline">?\epsilon?的變化而增長(zhǎng)得很快。如本文中講提到的背包問(wèn)題的近似算法的時(shí)間復(fù)雜度為O(n3?)O(\frac{n^3}{\epsilon})O(?n3?)

【下面這部分是來(lái)自別的博客,因此放上圖片】

【這一部分其實(shí)沒(méi)有特別好的理解】
在下文中,我們能將以III來(lái)作為實(shí)例的輸入規(guī)模,IuI_uIu?保存這些二進(jìn)制數(shù)據(jù)的一元形式。(IuI_uIu? will denote instance I with all numbers occurring in it written in unary. The unary size of instance III, denoted ∣Iu∣|I_u|Iu?, is defined as the number of bits needed to write IuI_uIu?.)
問(wèn)題Π的算法,在實(shí)例III的運(yùn)行時(shí)間受| IuI_uIu? |中的多項(xiàng)式限制 將被稱為偽多項(xiàng)式時(shí)間算法

背包問(wèn)題是NP難的問(wèn)題,沒(méi)有多項(xiàng)式時(shí)間算法,但是有偽多項(xiàng)式時(shí)間算法, 這個(gè)算法是基于動(dòng)態(tài)規(guī)劃的。

背包問(wèn)題的偽多項(xiàng)式時(shí)間算法


偽多項(xiàng)式算法大多采用的是動(dòng)態(tài)規(guī)劃的方式,因此,我們可以通過(guò)一個(gè)背包問(wèn)題的例子來(lái)了解。
動(dòng)態(tài)規(guī)劃的主要方式就是采用bellman-fold方程,這個(gè)方程的主要思想就是遞歸。下面是最優(yōu)子結(jié)構(gòu)的思想。
1.當(dāng)前的物品是i,容量為j,如果物品的重量WiW_iWi?>j,那么放不下,f(i,j)=f(i-1,j)。這個(gè)式子表示,往回看重量更輕的物品,容量不改變(因?yàn)楸据啗](méi)有放入物品)
2.放得下,那么,是放入這個(gè)物品好呢,還是不放,留這個(gè)空間好呢?
所以進(jìn)行遞歸調(diào)用操作,計(jì)算兩種結(jié)果,首先是不放這個(gè)物品,留下空間,那么就是f(i-1,j);其次,放下物品,那么對(duì)應(yīng)要加上這個(gè)物品的價(jià)值,可存放物品數(shù)i-1,容量j也要減掉對(duì)應(yīng)物品的重量WiW_iWi?。也就是式子vi+f(i?1,j?wi)v_i+f(i-1,j-w_i)vi?+f(i?1,j?wi?).這兩種情況取一個(gè)max,要這兩種情況下獲利最大的。
3.如果可以放入的物品i=0,或者容量為0,那么就無(wú)法放入物品了,當(dāng)前的f(i,j)=0。

遞歸是自頂向下的構(gòu)造方式,如果每一次的計(jì)算都要遞歸的話,會(huì)重復(fù)計(jì)算多次,所以,如果我們可以自底向上做。就是,先構(gòu)造一個(gè)表,表里對(duì)應(yīng)著每一個(gè)f(i,j)的最優(yōu)值,那么,做到后面的時(shí)候,只需要查前面的表就可以。


構(gòu)造出來(lái)的最優(yōu)值表是這樣的(四個(gè)物品,可以承受的總重j為5)

對(duì)應(yīng)的最優(yōu)子結(jié)構(gòu)是這樣的

比如對(duì)于f(4,5)來(lái)說(shuō),就是需要max{f(3,5),13+f(3,1))}.根據(jù)f表中元素可知,f(3,5)=22,13+f(3,1)=13+6=19,因此選擇了f(3,5)。其余類似。
這個(gè)算法需要填的表的大小是n×V,其中V=∑i=1nvi∑^n_{i=1}v_ii=1n?vi?,因此這個(gè)算法時(shí)間復(fù)雜度是O(n×V).
這個(gè)動(dòng)態(tài)規(guī)劃算法中,得到的時(shí)間復(fù)雜度O(nV)n是頂點(diǎn)數(shù),V為容量。其中只有V不是多項(xiàng)式相關(guān)的,那么,如果我們做一個(gè)簡(jiǎn)化,讓V變成多項(xiàng)式相關(guān)的,這個(gè)算法就變成了多項(xiàng)式算法了。
vi^=?viK?\widehat{v_i}=\lfloor\frac{v_i}{K}\rfloorvi??=?Kvi???
其中,K為偽多項(xiàng)式的V轉(zhuǎn)換成多項(xiàng)式算法的vi^\widehat{v_i}vi??的關(guān)鍵,下面的主要部分是在求K的表達(dá)式
利用動(dòng)態(tài)規(guī)劃算法求出這個(gè)新集合vi^\widehat{v_i}vi??的收益最大的集合S^\widehat{S}S 假設(shè)opt最優(yōu)的集合為OOO[注意這個(gè)O是對(duì)于背包問(wèn)題的最優(yōu)]

∑i∈S^vi^≥∑i∈Ovi^\sum_{i\in\widehat{S}}\widehat{v_i}\ge\sum_{i\in O}\widehat{v_i} iS?vi??iO?vi??

右式的含義是,在之前經(jīng)過(guò)動(dòng)態(tài)規(guī)劃可以得到的最優(yōu)解中的那些物品i,每個(gè)i的價(jià)值viv_ivi?都經(jīng)過(guò)運(yùn)算vi^=?viK?\widehat{v_i}=\lfloor\frac{v_i}{K}\rfloorvi??=?Kvi???然后把這些加起來(lái)。

兩邊乘上K
K?∑i∈S^vi^≥K?∑i∈Ovi^K*\sum_{i\in\widehat{S}}\widehat{v_i}\ge K*\sum_{i\in O}\widehat{v_i} K?iS?vi??K?iO?vi??
因?yàn)?span id="ozvdkddzhkzd" class="katex--display">?viK?≥viK?1\lfloor\frac{v_i}{K}\rfloor\ge\frac{v_i}{K}-1 ?Kvi???Kvi???1
兩邊乘上K,有K??viK?≥vi?KK*\lfloor\frac{v_i}{K}\rfloor\ge v_i-K K??Kvi???vi??K


sol=K?∑i∈S^vi^=∑i∈S^K?vi^≥∑i∈O(vi?K)≥opt?nKsol=K*\sum_{i\in\widehat{S}}\widehat{v_i}=\sum_{i\in\widehat{S}}K*\widehat{v_i}\ge\sum_{i\in O}(v_i-K)\ge opt-nK sol=K?iS?vi??=iS?K?vi??iO?vi??K)opt?nK

最后一個(gè)不等式成立的原因,是把∑\sum符號(hào)打開(kāi),∑i∈Ovi=opt,∑i∈OK<=nK\sum_{i\in O}{v_i}=opt,\sum_{i\in O}K<=nKiO?vi?=opt,iO?K<=nK
如果我們想(下為所需證)(sol我猜是solution的縮寫(xiě),此處意為多項(xiàng)式時(shí)間近似算法)
solopt≥1??\frac{sol}{opt}\ge1-\epsilon optsol?1??
然后
opt?nKopt≥1??\frac{opt-nK}{opt}\ge1-\epsilon optopt?nK?1??
左邊有個(gè)optopt\frac{opt}{opt}optopt?,可以化成1和右邊抵消,再去掉負(fù)號(hào)后可以得到下面的式子
然后就有
n?Kopt≤?\frac{n*K}{opt}\le\epsilon optn?K??
我們只需要找到opt的最小值即可。

那么opt顯然是大于能放進(jìn)這個(gè)背包中的物體中最大的那一個(gè)價(jià)值的。

記為P
那么就可以得到K
K=??pnK=\frac{\epsilon*p}{n} K=n??p?
下面再來(lái)分析一下這個(gè)多項(xiàng)式時(shí)間算法的時(shí)間復(fù)雜度
∑i∈Svi^=∑i∈S?viK?<?∑i∈Svik?\sum_{i\in S}\widehat{v_i}=\sum_{i\in S}\lfloor\frac{v_i}{K}\rfloor<\lfloor\sum_{i\in S}\frac{v_i}{k}\rfloor iS?vi??=iS??Kvi???<?iS?kvi???
?∑i∈Svik?=?∑i∈Svi?n??p?\lfloor\sum_{i\in S}\frac{v_i}{k}\rfloor=\lfloor\sum_{i\in S}\frac{v_i*n}{\epsilon*p}\rfloor ?iS?kvi???=?iS???pvi??n??

并且有
∑i∈SviP<n\sum_{i \in S }\frac{v_i}{P}<n iS?Pvi??<n
然后就有
v^<n?n?\widehat{v}<n*\frac{n}{\epsilon} v<n??n?
因?yàn)閭味囗?xiàng)式算法為O(nV),對(duì)于V做了處理之后用v^\widehat{v}v來(lái)代替V,再根據(jù)上式,可以得到多項(xiàng)式時(shí)間算法為O(n3?)\frac{n^3}{\epsilon})?n3?)

強(qiáng)NP難問(wèn)題和FPTAS

強(qiáng)np難問(wèn)題(Strong NP-hard)
如果NP中的每個(gè)問(wèn)題都可以以一種像是之前背包問(wèn)題中簡(jiǎn)化實(shí)例中的數(shù)字始終以一元形式寫(xiě)入的方式,由多項(xiàng)式簡(jiǎn)化為Π,那么我們說(shuō)問(wèn)題Π是強(qiáng)NP-難的。
A problem Π is stronglyNPNPNP-hard if every problem in NPNPNP can be polynomially reduced to Π in such a way that numbers in the reduced instance are always written in unary.
大多數(shù)已知的NP難問(wèn)題都是強(qiáng)NP難的,強(qiáng)NP難問(wèn)題在P≠NP的前提下沒(méi)有偽多項(xiàng)式時(shí)間算法,背包問(wèn)題不是強(qiáng)NP難的(因?yàn)橛袀味囗?xiàng)式時(shí)間算法)

可以用FPTAS近似的算法一定有偽多項(xiàng)式時(shí)間算法
設(shè)p為多項(xiàng)式,Π為NP難的最小化問(wèn)題,如:目標(biāo)函數(shù)fΠ是整數(shù)值,并且對(duì)于任一實(shí)例I,由OPT(I)<p(| IuI_uIu? |)(含|IuI_uIu?|的多項(xiàng)式)。 如果Π承認(rèn)FPTAS,則它也承認(rèn)偽多項(xiàng)式時(shí)間算法。

假設(shè)有一個(gè)Π問(wèn)題的FPTAS,其實(shí)例I上的運(yùn)行時(shí)間和誤差參數(shù)ε是q(| I |,1/?),其中q是多項(xiàng)式。在實(shí)例I上,將錯(cuò)誤參數(shù)設(shè)置為?=1p∣Iu∣\epsilon=\frac{1}{p|I_u|}?=pIu?1?,然后運(yùn)行FPTAS。 現(xiàn)在,產(chǎn)生的解將的目標(biāo)函數(shù)值小于或等于:
(1+ε)OPT(I)<OPT(I)+εp(∣Iu∣)=OPT(I)+1.(1 + ε)OPT(I) < OPT(I) + εp(|I_u|) = OPT(I)+1. (1+ε)OPT(I)<OPT(I)+εp(Iu?)=OPT(I)+1.
其中,OPT(I)<p(∣Iu∣)OPT(I)<p(|I_u|)OPT(I)<pIu?這個(gè)式子應(yīng)該是題目給出來(lái)前提條件,可以理解為,P是多項(xiàng)式,IuI_uIu?是點(diǎn)實(shí)例I所有數(shù)字一元形式,比如背包問(wèn)題中的價(jià)值viv_ivi?,p(|IuI_uIu?|)就是一元形式的多項(xiàng)式,[大概類比一下背包問(wèn)題中的最優(yōu)解和近似最優(yōu)解,最優(yōu)解肯定是小于近似最優(yōu)解的]

實(shí)際上,使用此錯(cuò)誤參數(shù),FPTAS將被迫產(chǎn)生最優(yōu)解。 運(yùn)行時(shí)間將為q(| I |,p(| IuI_uIu? |)),即多項(xiàng)式在| IuI_uIu? |上。 因此,我們獲得了針對(duì)Π的偽多項(xiàng)式時(shí)間算法。以下推論適用于大多數(shù)已知的NP難題。推論8.6令Π是滿足定理8.5的限制。 如果Π是強(qiáng)NP難的,那么在假設(shè)P≠NP的前提下不承認(rèn)FPTAS算法。

如果Π接受FPTAS,那么根據(jù)8.5,它就承認(rèn)偽多項(xiàng)式時(shí)間定理,但他不是強(qiáng)NP-難的,在假設(shè)P≠NP,導(dǎo)致矛盾。

總結(jié):強(qiáng)NP難問(wèn)題沒(méi)有偽多項(xiàng)式時(shí)間算法,根據(jù)之前所說(shuō)偽多項(xiàng)式時(shí)間算法大多是采用動(dòng)態(tài)規(guī)劃而得來(lái)的,因此強(qiáng)NP難問(wèn)題不能采用動(dòng)態(tài)規(guī)劃得到偽多項(xiàng)式算法。有了偽多項(xiàng)式時(shí)間算法,才可以使用FPTAS來(lái)進(jìn)行近似,得到一個(gè)近似算法。

總結(jié)

以上是生活随笔為你收集整理的背包问题的多项式时间近似解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。