版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第三章貪心方法
3.1一般方法
1.問題的一般特征
問題有n個輸入,問題的解是由這n個輸入的某個子集組成,這個子
集必須滿足某些事先給定的條件。
-約束條件:子集必須滿足的條件;
-可行解:滿足約束條件的子集;可行解可能不唯一;
■目標(biāo)函數(shù):用來衡量可行解優(yōu)劣的標(biāo)準(zhǔn),一般以函數(shù)的形式給出;
■最優(yōu)解:能夠使目標(biāo)函數(shù)取極值(極大或極小)的可行解。
分類:根據(jù)描述問題約束條件和目標(biāo)函數(shù)的數(shù)學(xué)模型的特性和問題的
求解方法的不同,可分為:線性規(guī)劃、整數(shù)規(guī)劃、非線性規(guī)劃、動態(tài)規(guī)
劃等。
——最優(yōu)化問題求解
貪心方法:一種改進的分級的處理方法,可對滿足上述特征的某些問
題方便地求解。
2.貪心方法的一般策略
問題的一般特征:問題的解是由n個輸入的、滿足某些事先給定的
條件的子集組成。
1)一般方法
根據(jù)題意,選取一種度量標(biāo)準(zhǔn)。然后按照這種度量標(biāo)準(zhǔn)對n個輸入
排序,并按序一次輸入一個量。
如果這個輸入和當(dāng)前已構(gòu)成在這種量度意義下的部分最優(yōu)解加在一
起不能產(chǎn)生一個可行解,則不把此輸入加到這部分解中。否則,將當(dāng)前
輸入合并到部分解中從而得到包含當(dāng)前輸入的新的部分解。
這一處理過程一直持續(xù)到n個輸入都被考慮完畢,則記入最優(yōu)解集
合中的輸入子集構(gòu)成這種量度意義下的問題的最優(yōu)解
貪心方法:這種能夠得到某種量度意義下的最優(yōu)解的分級處理方法
稱為貪心方法
注:
>貪心解=最優(yōu)解
>直接將目標(biāo)函數(shù)作為量度標(biāo)準(zhǔn)也不一定能夠得到問題的最優(yōu)解
>使用貪心策略求解的關(guān)鍵是選取能夠得到問題最優(yōu)解的量度標(biāo)準(zhǔn)。
3,貪心方法的抽象化控制描述
procedureGREEDY(A,n)
〃A(1:n)包含n個輸入〃
solution一①〃將解向量solution初始化為空〃
fori<—1tondo
x—SELECT(A)〃按照度量標(biāo)準(zhǔn),從A中選擇一個輸入,
其值賦予x并將之從A中刪除〃
ifFEASIBLE(solution,x)then〃判定x是否可以包含在當(dāng)前解向量
中,即是否能共同構(gòu)成可行解〃
solution<—UNION(solution,x)〃將x和當(dāng)前的解向量合并成
新的解向量,并修改目標(biāo)函數(shù)〃
endif
repeat
return
endGREEDY
3.2背包問題
1.問題的描述
已知FI種物品具有重量四儼2,…,Wj和效益值(PiR,…,PJ,及一個
可容納M重量的背包;設(shè)當(dāng)物品i全部或一部分X放入背包將得到Pi為的效
益,這里,OWX,<1,Pi>0o
問題:采用怎樣的裝包方法才能使裝入背包的物品的總效益最大?
分析:
①裝入背包的總重量不能超過M
②如果所有物品的總重量不超過M,即則把所有的物
品都裝入背包中將獲得最大可能的效益值
③如果物品的總重量超過了M,則將有物品不能(部分/全部)裝
入背包中。由于OWxiWl,所以可以把物品的一部分裝入背包,故最終
背包中可剛好裝入重量為M的若干物品(整體或一部分)。這種情況下,
如果背包沒有被裝滿,則顯然不能獲得最大的效益值。
目標(biāo):使裝入背包的物品的總效益達到最大。
問題的形式描述
目標(biāo)函數(shù):
EPiJ
\<i<n
約束條件:
Zwixi-M
\<i<n
0<x,<1,p.>0,w.>0,1<z<n
可行解:滿足上述約束條件的任一(Xi,X2,…,XJ都是問題
的一個可行解——可行解可能為多個。
(x1,x2,...,Xn)稱為問題的一個解向量
最優(yōu)解:能夠使目標(biāo)函數(shù)取最大值的可行解是問題的最優(yōu)解
——最優(yōu)解也可能為多個。
例3.1背包問題的實例
設(shè),n=3,M=20,
。
(Pi,p21p3)=(25,24,15),(W15W2,W3)=(18,15,10)
可能的可行解如下:
x
(X15X2JX3)SPii
①(1/2,1/3,1/4)16.524.25〃沒有裝滿背包〃
②(1,2/15,0)2028.2
③(0,2/3,1)2031
④(0,1,1/2)2031.5
2.貪心策略求解
度量標(biāo)準(zhǔn)的選擇:三種不同的選擇
D以目標(biāo)函數(shù)作為度量
即,每裝入一件物品,就使背包獲得最大可能的效益增量。
該度量標(biāo)準(zhǔn)下的處理規(guī)則是:
?按效益值的非增次序?qū)⑽锲芬患胤湃氲奖嘲?/p>
?如果正在考慮的物品放不進去,則只取其一部分裝滿背包:如
果該物品的一部分不滿足獲得最大效益增量的度量標(biāo)準(zhǔn),則在剩下的物
品種選擇可以獲得最大效益增量的其它物品,將它或其一部分裝入背包。
如:若AM=2,背包外還剩兩件物品i,j,且有0=4,Wj=4)和(9
=3,Wj=2),則下一步應(yīng)選擇j而非i放入背包:
p/2=2<Pj=3
實例分析(例3.1)
???p1>p2>p3
???首先將物品1放入背包,此時%=1,背包獲得Pi=25的效益增量,同時
背包容量減少w1=18個單位,剩余空間AM二2。
其次考慮物品2和3。就AM=2而言有,只能選擇物品2或3的一部分裝入
背包。
物品2:若X2=2/15,則p2X2=16/5=3.1
物品3:若X3=2/10,則P3X3=3
為使背包的效益有最大的增量,應(yīng)選擇物品2的2/15裝包,即
X2=2/15
最后,背包裝滿,AM=0,物品3不裝包,即X3=0o
背包最終可以獲得效益值=x1p1+x2p2+x3p3
=28.2(次優(yōu)解,非問題的最優(yōu)解)
2)以容量作為度量標(biāo)準(zhǔn)
以目標(biāo)函數(shù)作為度量標(biāo)準(zhǔn)所存在的問題:盡管背包的效
益值每次得到了最大的增加,但背包容量也過快地被消耗掉
了,從而不能裝入“更多”的物品。
改進:讓背包容量盡可能慢地消耗,從而可以盡量裝入
“較多”的物品。
即,新的標(biāo)準(zhǔn)是:以容量作為度量
該度量標(biāo)準(zhǔn)下的處理規(guī)則:
?按物品重量的非降次序?qū)⑽锲费b入到背包;
?如果正在考慮的物品放不進去,則只取其一部分裝
滿背包;
實例分析(例3.1)
*.*w3<w2<w1
???首先將物品3放入背包,此時X3=1,背包容量減少W3=10個單
位,還剩余空間AM=10。同時,背包獲得P3=15的效益增量。
其次考慮物品2。就AM=10而言有,也只能選擇物品2的一部分
裝入背包。下一步將放入物品2的10/15裝包,即
X2=10/15=2/3
最后,背包裝滿AM=0,物品1將不能裝入背包,故x[=0。
背包最終可以獲得效益值=x1p1+x2P2+X3p3
=31(次優(yōu)解,非問題的最優(yōu)解)
存在的問題:效益值沒有得到“最大程度”的增加
3)最優(yōu)的度量標(biāo)準(zhǔn)
影響背包效益值得因素:
■背包的容量M
-放入背包中的物品的重量及其可能帶來的效益值
可能的策略是:在背包效益值的增長速率和背包容量消耗速率之間
取得平衡,即每次裝入的物品應(yīng)使它所占用的每一單位容量能獲得當(dāng)前
最大的單位效益。
在這種策略下的量度是:已裝入的物品的累計效益值與所用容量之
比。
故,新的量度標(biāo)準(zhǔn)是:每次裝入要使累計效益值與所用容量的比值
有最多的增加(首次裝入)和最小的減?。ㄆ浜蟮难b入)。
此時,將按照物品的單位效益值:Pj/Wj比值的非增次序考慮。
實例分析(例3.1)
Pi/w1<p3/w3<p2/w2
???首先,將物品2放入背包,此時X2=1,背包容量減少W2=15
個單位,還剩余空間AM=5。同時,背包獲得P2=24的
效益增量。
其次,在剩下的物品1和3中,應(yīng)選擇物品3,且就AM=5而言有,
只能放入物品3的一部分到背包中。即
x3=5/10=1/2
最后,背包裝滿AM=0,物品1將不能裝入背包,故x[=00
最終可以獲得的背包效益值=Pi+x2P2+X3p3
=31.5(最優(yōu)解)
3.背包問題的貪心求解算法
算法3.2背包問題的貪心算法
procedureGREEDY-KNAPSACK(P,W,M,X,n)
〃P(1:n)和W(1:n)分別含有按P(i)/W(gP(i+1)/W(i+1)排序的n
件物品的效益值和重量。M是背包的容量大小,而X(1:n)是解
向量〃
realP(1:n),W(1:n),X(1:n),M,cu;
integerl,n
x—o〃將解向量初始化為0〃
cu<—M〃cu是背包的剩余容量〃
fori<-1tondo
ifW(i)>cuthenexitendif
X(i)I
cu<—cu-W(i)
repeat
ifi<nthenX(i)<—cu/W(i)endif
endGREEDY-KNAPSACK
4.最優(yōu)解的證明
即證明:由第三種策略所得到的貪心解是問題的最優(yōu)解。
最優(yōu)解的含義:在滿足約束條件的情況下,使目標(biāo)函數(shù)取極(大或
小)值的可行解。
貪心解是可行解,故只需證明:貪心解可使目標(biāo)函數(shù)取得極值。
證明的基本思想:
將此貪心解與(假設(shè)中的)任一最優(yōu)解相比較。
?如果這兩個解相同,則顯然貪心解就是最優(yōu)解。
?如果這兩個解不同,就設(shè)法去找兩者開始不同的第一個分量位置i,
然后設(shè)法用貪心解的這個為去替換最優(yōu)解對應(yīng)的分量,并證明最優(yōu)
解在分量代換前后總的效益值沒有任何變化(且不違反約束條件)。
?然后比較二者。若還不同,則反復(fù)進行代換,直到代換后產(chǎn)生的
“最
優(yōu)解”與貪心解完全一樣。
?在上述代換中,最優(yōu)解的效益值沒有任何損失,從而證明貪心解的
效益值與代換前后最優(yōu)解的效益值相同。即,貪心解如同最優(yōu)解一
樣可取得目標(biāo)函數(shù)的最大/最小值。
從而得證:該貪心解即是問題的最優(yōu)解。
定理3.1如果p「wep2/w2>..>pjwn,則算法GREEDY-
KNAPSACK對于給定的背包問題實例生成一個最優(yōu)解。
證明:
設(shè)X=(x],x2,xj是GREEDY-KNAPSACK所生成的貪心
解。
①如果所有的為都等于1,則顯然X就是問題的最優(yōu)解。否則,
②設(shè)j是使為人的最小下標(biāo)。由算法的執(zhí)行過程可知,
?Xj=11<i<j,
?0<Xj<1
?Xj=Oj<i<n
假設(shè)Y是問題的最優(yōu)解:Y=(yl5y2,...,yn)且有:
2w,=M
?若X=Y,則X就是最優(yōu)解。否則,
?X和Y至少在1個分量上存在不同。
設(shè)k是使得y^Xk的最小下標(biāo),則有yk<Xk??煞忠韵虑?/p>
況說明:
a)若kvj,則Xk=1。因為XQ從而有yk<xk
b)若k=j,由于=M,且對14iVj,有%=毛=1,而對j
〈區(qū)n,有為=0;故此時若y/Xk,貝1J將有與丫是可
行解相矛盾。而y/Xk,所以yk<Xk
c)若k>j,則z叼%>M,不能成立
在Y中作以下調(diào)整:將丫卜增加到Xk,因為yk<Xk,為保持解的可行性,
必須從d+力…,yj中減去同樣多的量。設(shè)調(diào)整后的解為Z=(Z1,Z2,…,ZJ,
其中Zj=Xj,1<i<k,且有:匯叫(匕-々)="(2--)
k<i<n
z的效益值有:
ZPA=E巴匕+(。-九)卬*。《/卬&-一£(乂一苒)叫/匕
l=k<i<>n
NN0,匕+[(-yQ"一Z(匕一N,)R,/明
\<i<nk.<i<n
=EPM
差值=0
由以上分析得,
■若ZPKi>ZPly,,貝LlY將不是最優(yōu)解;
1
■若2PK*=z?匕,則或者Z=X,貝JX就是最優(yōu)解;
■或者ZHX,則重復(fù)以上替代過程,或者證明Y不是最優(yōu)
解,或者把Y轉(zhuǎn)換成X,從而證明X是最優(yōu)解
3.3帶有限期的作業(yè)排序
1.問題描述
假定在一臺資源無約束的機器上處理n個作業(yè),每個作業(yè)
均可在單位時間內(nèi)完成;同時每個作業(yè)諸B有一個截至期限d/O,
當(dāng)且僅當(dāng)作業(yè)i在其截至期限以前被完成時,則獲得R>0的效益。
問題:求這n個作業(yè)的一個子集J,其中的所有作業(yè)都可
在其截至期限內(nèi)完成。——J是問題的一個可行解。
可行解J中的所有作業(yè)的效益之和是,具有最大效
益值之和的可行解是該問題的最優(yōu)解。ZP,
ZGJ
分析:
目標(biāo)函數(shù):ZP,
ieJ
約束條件:所有的作業(yè)都應(yīng)在其期限之前完成
>如果所有的作業(yè)都能在其期限之內(nèi)完成則顯然可以獲得
當(dāng)前最大效益值;
>否則,將有作業(yè)無法完成—決策應(yīng)該執(zhí)行哪些作業(yè),以
獲得最大可能的效益值。
例3.2n=4,(Pi,p2,p3,p4)=(100,10,15,20)
(drd2,d3,d4)=(2,1,2,1)o
可行解如下表所示:
可行解處理順序效益值
①
②(1)1100%
(2)210
③d,d
④(3)31524
(4)420
⑤di,d
(1,2)1103
⑥2,1
(1,3)1,3或3,1115
⑦
(1,4)4,1120
⑧
(2,3)2,325
⑨
(3,4)4,335
問題的最優(yōu)解是⑦。所允許的處理次序是:先處理作業(yè)4
再處理作業(yè)1。
1.帶有限期的作業(yè)排序算法
1)度量標(biāo)準(zhǔn)的選擇
以目標(biāo)函數(shù)Zp,作為量度。
ZGJ
量度標(biāo)準(zhǔn):下一個要計入的作業(yè)將是使得在滿足所產(chǎn)生的J是
一個可行解的限制條件下讓Ep,得到最大增加的
iwJ
作業(yè)。
處理規(guī)則:■按Pi的非增次序來考慮這些作業(yè);
?同時因受作業(yè)期限的限制,必須為作業(yè)安排合理
的處理順序。
例:例3.2求解
①首先令J=RP1<P4<P3<P2
②作業(yè)1具有當(dāng)前前最大效益值,且{1}是可行解,所以作
業(yè)1計入J(一般情況下,假定至少有一個時間單元)。
③在剩下的作業(yè)中,作業(yè)4具有最大效益值,且{1,4}也是
可行解,故作業(yè)4計入J,即J={1,4};
④考慮{1,3,4}和{1,2,4}均不能構(gòu)成新的可行解,作業(yè)3和2
將被舍棄。
故,最后的J={1,4},加工順序是:4,1o
最終效益值=120(問題的最優(yōu)解)
2)作業(yè)排序算法的概略描述
算法3.3
procedureGREEDY-JOB(D,J,n)
//作業(yè)按PAP22…NPn的次序輸入,它們的期限值D(廬1,
1<i<n,n>1oJ是在它們的截止期限前完成的作業(yè)的集合〃
J―{1}〃用作業(yè)序號代表作業(yè)〃
fori—2tondo
ifJU{i}的所有作業(yè)能在它們的截止期限前完成
thenJ-JU{i}
endif
repeat
endGREEDY-JOB
2.最優(yōu)解證明
定理3.2算法3.3對于作業(yè)排序問題的解是問題的一個最優(yōu)解
證明:
設(shè)J是由算法3.3所得的作業(yè)集合—貪心解,
I是一個最優(yōu)解的作業(yè)集合。
①若l=J,貝IJJ就是最優(yōu)解;否則
②I手J,則至少存在兩個作業(yè)a和b,使得a^J
且ae/,b曰且人七/。(為什么)
并設(shè)a是這樣的一個具有最高效益值的作業(yè)
(由算法的處理規(guī)則可得:對于在I中而不在J中的作業(yè)所有b,有:pa>pb)
設(shè)Sj和S1分別是J和I的可行的調(diào)度表。因為J和I都是可行
解,故這樣的調(diào)度表一定存在;
設(shè)i是既屬于J又屬于I地一個作業(yè),并設(shè)i在調(diào)度表Sj中的
調(diào)度時刻是[t,t+1],而在S|中的調(diào)度時刻是[t',
在Sj和S1中作如下調(diào)整:
?若t<t',則將Sj中在[t',t'+1]時刻調(diào)度的那個作業(yè)
(如果有的話)與i相交換。如果J中在%f+1]時刻沒有作
業(yè)調(diào)度,則直接將i移到[匕f+1]調(diào)度?!碌恼{(diào)度表也是
可行的。一?、
Sj:……I...........k……
6:I…?..........]………一
tt'
?若t'vt,則在S1中作類似的調(diào)換,即將SI中在[t,t+1]時刻
調(diào)度的那個作業(yè)(如果有的話)與湘交換。如果I中在[t,
t+1]時刻沒有作業(yè)調(diào)度,則直接將i移到[t,t+1]調(diào)度?!?/p>
樣,新的調(diào)度表也是可行的。
Sj:…………
S|:……...........h.....
----1-------------1-------
ft
對J和I中共有的所有作業(yè)作上述的調(diào)整。設(shè)調(diào)整后得到
的調(diào)度表為S'j和S'l,則在S'j和S'l中J和I中所有的共有作業(yè)將
在相同時間被調(diào)度。
設(shè)a在S'j中的調(diào)度時刻是%,ta+1],b是SI中該時刻調(diào)度
的作業(yè),則有Pa^Pb(為什么?)。
Sj:...................a...................
品..........?..........一
ta
在S'l中,去掉作業(yè)b,而去調(diào)度作業(yè)a,得到的是作業(yè)集
合kd-)u{a}的一個可行的調(diào)度表,且F的效益值不小
于I的效益值。而I'中比I少了一個與J不同的作業(yè)。
重復(fù)上述的轉(zhuǎn)換,可使I在不減效益值的情況下轉(zhuǎn)換成J。
從而J至少有和I一樣的效益值。所以J也是最優(yōu)解。
證畢。
3.如何判斷J的可行性
方法一:枚舉法,檢驗J中作業(yè)所有可能的排列,對于任一種次序排
列的作業(yè)序列,判斷這些作業(yè)是否能夠在其期限前完成
——若J中有k個作業(yè),則將要檢查k!個序列
判斷策略:
對于一個給定作業(yè)處理序列o=i-2…ik,由于作業(yè)匕完成的最早
時間是j,因此只要判斷出o排列中的每個作業(yè)的期限有djj2j,就
可得知o是一個允許的調(diào)度序列,從而J是一可行解。
反之,如果o排列中有一個作業(yè)有djjVj,則。將是一個行不通
的調(diào)度序列,因為至少作業(yè)勾不能在其期限之前完成。
方法二:檢查J中作業(yè)的一個特定序列就可判斷J的可行性:
這一特定序列是按照作業(yè)期限的非降次序排列的作業(yè)序列
定理3.3設(shè)J是k個作業(yè)的集合,。=可2…ik是J中作業(yè)的一種排
列,它使得功了加工…4ik。則
J是一個可行解,當(dāng)且僅當(dāng)J中的作業(yè)可以按照o
的次序而又不違反任何一個期限的情況來處理。
證明:
①如果J中的作業(yè)可以按照。的次序而又不違反任何一個
作業(yè)期限的情況來處理,貝IJJ是一個可行解
②現(xiàn)證若J是一個可行解,。是否代表一個可行的調(diào)度序
列?
?/J是可行解
???必存在一可行的調(diào)度序列。'=切2..小,使得備詞,
1<j<ko
★若。=。',則。即是可行的調(diào)度序列。否則,
★c#o',令a是使得1丸的最小下標(biāo)(如下圖)
設(shè)L=ia。則有:
b>a且dra>drb
故,在o'中調(diào)換q與%,所得的新序列?!?SR2…Sk的處理次
序不違反任何一個期限,而中位置a及a之前的作業(yè)均與。相同。
重復(fù)上述過程,則可將。'轉(zhuǎn)換成。且不違反任何一個期限,
故。是一個可行的調(diào)度序列
故定理得證。
4.帶有限期的作業(yè)排序算法的實現(xiàn)
對當(dāng)前正在考慮的作業(yè)j,按限期大小采用一種“插入排序”的方式,
嘗試將其“插入”到一個按限期從小到大順序構(gòu)造的作業(yè)調(diào)度序列中,
以此判斷是否能夠?qū)⒆鳂I(yè)j合并到當(dāng)前部分解J中:
▼如果有合適的插入位置,則插入到序列中,形成新的可行解序列。
▼否則,舍棄該作業(yè)。
具體如下:
假設(shè)n個作業(yè)已經(jīng)按照效益值從大到小的次序,即PAP2N…NPn的順
序排列好,每個作業(yè)可以在單位時間內(nèi)完成,并具有相應(yīng)的時間期限加
且至少有一個單位時間可以執(zhí)行作業(yè)
首先,將作業(yè)1計入部分解J中,止匕時J是可行的;
然后,依次考慮作業(yè)2到n。假設(shè)已經(jīng)處理了i-1個作業(yè),其中有k個作
業(yè)計入了部分解J中:J(1),J(2),…,J(k),且有
D(J(1))<D(J(2))<..<D(J(k))
對當(dāng)前正在考慮的作業(yè)i,將D(i)依次和D(J(k)),D(J(k-1)),…,D(J(1))相
比較。若
1)找到位置q:使得
★D(i)<D(J(1)),q<l<k,且
★D(J(q))<D(i)
★q<D(i)
此時,若D(J⑴)>1,qVlWk,即q位置之后的所有作業(yè)均可
推遲一個單位時間執(zhí)行,而又不違反各自的執(zhí)行期限。
執(zhí)行“移位”處理:將q位置之后的所有作業(yè)后移一位,將作
業(yè)i插入到位置q+1處,從而得到一個包含k+1個作業(yè)的新的可行解。
2)若找不到這樣的位置q,作業(yè)i將被舍棄。
對i之后的其它作業(yè)重復(fù)上述過程,直到n個作業(yè)處理完畢。最后J中所包含的
作業(yè)集合是此時算法的貪心解,根據(jù)定理3.2,也是問題的最優(yōu)解。
算法3.4帶有限期和效益的單位時間的作業(yè)排序貪心算法
procedureJS(D,J,n,k)
//n>1o作業(yè)已按3邛2?…邛n的順序排序。D(1),...,D(n)是期限值,J(i)是最優(yōu)解中的第i個作
業(yè),1<i<ko終止時,D(J(i))<D(J(i+1)),1<i<k//
integerD(0:n),J(0:n),i,k,n,r
D(0)-J(0)-0〃初始化〃
k—1;J⑴-1〃計入作業(yè)1〃
fori<-2tondo〃按p的非增次序考慮作業(yè)i。找i的插入位置并檢查可行性〃
r<-k「另一退出條件是
whileD(J(r))>D(i)andD(J(r))Nrdo//D(j(r))>r//
r—r-1〃這樣的r有D(J(r))>r//D(J(r))>D(i)而
repeatD(J(r))=r
IfD(J(r))<D(i)andD(i)>rthen〃把i插入到J中〃
fori<—ktor+1by-1do
J(i+1)-J(i)〃將插入點的作業(yè)后移一位〃
repeat
J(r+1)<-i;k<-k+1〃將i計入J中〃
endif
repeat
endJS
計算時間分析
fori<—2tondo今將循環(huán)n-1次-------------------------------------①
r<—k
whileD(J(r))>D(i)andD(J(r))#do9至多循環(huán)k次,
k是當(dāng)前計入J中的作業(yè)數(shù)
1-T--------------------------②
r<—r-1
repeat
IfD(J(r))<D(i)andD(i)>rthen
fori*-ktor+1by-1do力循環(huán)k-r次,r是插入點之前的位置
最壞情況下循環(huán)k次,插入到最頭部一一③
J(i+1)-J(i)
repeat
J(r+1)—l;k-k+1
endif
repeat
設(shè)s是最終計入J中的作業(yè)數(shù),則算法JS所需要的總時間是O(sn)。sWn,故
2
最壞情況:TJS=0(n),特例情況:Pi二d『n-i+1,IWiWn
最好情況:TJS=0(n),特例情況:Pi=n-i+l,d『i,IWiWn
6.一種“更快”的作業(yè)排序問題
判定作業(yè)i可行的另一種方法:
對于作業(yè)i,若還沒有給i分配處理時間,則分配給它時間片
[。-1,可,其中。是盡量取大且為空的時間片。
即:盡量推遲作業(yè)i的處理時間。這樣在安排作業(yè)處理次序時
不必每有一個作業(yè)加入就需移動J中已有的作業(yè)。
如果不存在這樣的時間片,作業(yè)i被舍棄。
(如何按照該方法改進算法?)
使用不相交集合的UNION和FIND算法(見1.4.3節(jié)),可以
將JS的計算時間降低到數(shù)量級接近0(n)。
(略)
3.4最優(yōu)歸并模式
1.問題的描述
1)兩個文件的歸并問題
兩個已知文件的一次歸并所需的計算時間=0(兩個文件的元素總數(shù))
例:
n個記錄的文件——
+-----k(n+m)個記錄的文件
m個記錄的文件——0(n+m)
2)多個文件的歸并
已知n個文件,將它們歸并成一個單一的文件
例:假定文件X1,X2,X3,X4,采用兩兩歸并的方式,可能的歸并模
式有:
①
XI+X2=YI+X3=Y2+X4=Y3
②X1+X2=
+一Y3
X3+X4=Y2
二路歸并模式:每次僅作兩個文件的歸并;當(dāng)有多個文件
時,采用兩兩歸并的模式,最終得到一個完整的記錄文件。
二元歸并樹:二路歸并模式的歸并過程可以用一個二元樹
的形式描述,稱之為二元歸并樹。
歸并樹的構(gòu)造
X(60)
?外結(jié)點:n個原始文件
?內(nèi)結(jié)點:一次歸并后得到的文件
(50)10X?在兩路歸并模式下,每個內(nèi)結(jié)點
3剛好有兩個兒子,代表把它的兩個
兒子表示的文件歸并成其本身所代
表的文件
X30
120X2
號數(shù)字代表文件葭
/又
★不同的歸并順序所需的計算時間是不同的。
例3.5已知Xi%%是分別為30、20、10個記錄長度的已分類文件。
將這3個文件歸并成長度為60的文件。可能的歸并過程和相應(yīng)的記錄移動
次數(shù)如下:
X1-]__________.
X2,移動5。次------------總移動次數(shù):110次
X,移動60次
X3
X2移動30次總移動次數(shù):90次
X1
問題:采用怎樣的歸并順序才能使歸并過程中元素的移
動次數(shù)最小(或執(zhí)行的速度最快)
2.貪心求解
1)度量標(biāo)準(zhǔn)的選擇
★任意兩個文件的歸并所需的元素移動次數(shù)與這兩個文件的長度
之和成正比;
★度量:目標(biāo)函數(shù)(元素移動數(shù)之和);
★度量標(biāo)準(zhǔn):每次歸并使目標(biāo)函數(shù)有最小的增加;
★處理規(guī)則:每次選擇長度最小的兩個文件進行歸并。
F4F3
(F1JF2JF3JF4JF5)=(20,30,10,5,30)
2)目標(biāo)函數(shù)的定義
目標(biāo):元素移動的次數(shù)最少
分析:為得到歸并樹根結(jié)點表示的歸并文件,外部結(jié)點中每個
文件的記錄需要移動的次數(shù)=該外部結(jié)點到根的距離,即根到該外
部結(jié)點路徑的長度。如,
則中所有記錄在整個歸并過程中移動的總量=|FJ3
帶權(quán)外部路徑長度:記4是由根到代表文件寫的外部結(jié)點的距
離,q是4的長度,則這棵樹所代表的歸并過程中元素移動總量是:
,稱為這棵樹的帶權(quán)外部路徑長度
l<i<n
最優(yōu)的二路歸并模式:與一棵具有最小帶權(quán)外部路徑長度的二
元歸并樹相對應(yīng)。
算法3.6生成二元歸并樹的算法
procedureTREE(L,n)
〃L是n個單結(jié)點的二元樹表〃
fori^1ton-1do
callGETNODE(T)〃構(gòu)造一顆新樹T〃
LCHILD(T)-LEAST(L)〃從表L中選當(dāng)前根WEIGHT最小的樹,
并從中刪除〃
RCHILD(T)-LEAST(L)
WEIGHT(T)^WEIGHT(LCHILD(T))+WEIGHT(RCHILD(T))
callINSERT(L,T)〃將歸并的樹T加入到表L中〃
repeat
return(LEAST(L))〃此時,L中的樹即為歸并的結(jié)果〃
endTREE
例3.6已知六個初始文件,長度分別為:2,3,5,7,9,13。
采用算法TREE,各階段的工作狀態(tài)如圖所示:
迭代L
0百⑸回萬百而
in
co寸
時間分析
1)循環(huán)體:n-1次
2)L以有序序列表示
LEAST(L):O⑴
INSERT(LJ):0(n)
總時間:0(n2)
3)L以min-堆表示
LEAST(L):O(logn)
INSERT(LJ):O(logn)
總時間:O(nlogn)
3.最優(yōu)解的證明
定理3.4若L最初包含個單結(jié)點的樹,這些樹有WEIGHT值為
(q1,q2,...,qn),則算法TREE對于具有這些長度的n個文件生成一棵最優(yōu)的
二元歸并樹。
證明:歸納法證明
①當(dāng)n=1時,返回一棵沒有內(nèi)部結(jié)點的樹。定理得證。
②假定算法對所有的9/2,…,qm),14mVn,生成一棵最優(yōu)二元歸
并樹。
③對于Q假定<qn,則和q2將是在for循環(huán)的第一次迭代中
首先選出的具有最小WEIGHT值的兩棵樹(的WEIGHT值);如圖所示,
設(shè)T是由這樣的兩棵樹構(gòu)成的子樹:
qiq2
■設(shè)「是一棵對于(q/2,…,q/的最優(yōu)二元歸并樹。
■設(shè)P是T'中距離根最遠的一個內(nèi)部結(jié)點。
若P的兩棵子樹不是q1和q2,則用q1和q2代換P當(dāng)前的子樹而
不會增加T'的帶權(quán)外部路徑長度。
故,T應(yīng)是最優(yōu)歸并樹中的子樹。
則在T中用一個權(quán)值為q1+q2的外部結(jié)點代換T,得到的是一
棵關(guān)于&+q2,…,qJ最優(yōu)歸并樹丁'。
而由歸納假設(shè),在用權(quán)值為q1+q2的外部結(jié)點代換了T之后,
過程TREE將針對(q1+q2,…,qj得到一棵最優(yōu)歸并樹。將T帶入該
樹,根據(jù)以上討論,將得到關(guān)于…,qj的最優(yōu)歸并樹。
故,TREE生成一棵關(guān)于…,q/的最優(yōu)歸并樹。
F(T)=F(T”)+qi+q2
則,
Fmin(T)=min(F(T))
=min(F(T”)+q1+q2)
=min(F(T"))++q?
=Fmin(T")++q2
5.k路歸并模式
>每次同時歸并k個文件。
>k元歸并樹:可能需要增加“虛”結(jié)點,以補充不足的外
首B結(jié)點o
★如果一棵樹的所有內(nèi)部結(jié)點的度都為k,則外部結(jié)點
數(shù)n滿足nmod(k-1)=1
★對于滿足nmod(k—1)=1的整數(shù)n,存在一棵具有n
個外部結(jié)點的k元樹T,且T中所有結(jié)點的度為k。
至多需要增加k-2個外部結(jié)點。
>k路最優(yōu)歸并模式的貪心規(guī)則:每一步選取k個具有最小
長度的文件歸并。
3.5最小生成樹
1.問題的描述
生成樹:設(shè)G=(V,E)是一個無向連通圖。如果G的生
成子圖T=(V,E)是一棵樹,則稱T是G的一棵
生成樹(spanningtree).
最小生成樹:帶有成本的圖的生成樹問題
2.貪心策略
度量標(biāo)準(zhǔn):選擇能使迄今為止所計入的邊的成本和有最小
增加的那條邊。
?Prim算法
?Kruskal算法
3.Prim算法
策略:使得迄今所選擇的邊的集合A構(gòu)成一棵樹;則將要計入到A中
的下一條邊(u,v),應(yīng)是E中一條當(dāng)前不在A中且使得AU{(u,v)}也是一棵
樹的最小成本邊。
邊成本
(1,2)10
(2,6)25
(3,6)15
(6,4)20
10
邊成本
(3,5)35
V(Tp)={123,4,5,6}
E(Tp)={(1,2),(2,6),(3,5),(4,6),(3,6)}
算法3.7Prim最小生成樹算法
procedurePRIM(E,COST,nJTJmincost)
//E是G的邊集。。。$丁("可是11結(jié)點圖6的成本鄰接矩陣,矩陣元素COST。,j)
是一個正實數(shù),如果不存在邊(i,j),則為+8。計算一棵最小生成樹并把它作
為一個集合存放到數(shù)組T(1:n-1,2)中(T(i,1),T(i,2))是最小成本生成樹的一條邊。
最小成本生成樹的總成本最后賦給mincost〃
realCOST(n,n),mincost
integerNEAR(n),n,i,k,I,T(1:n-1,2)
(k,I)一具有最小成本的邊
mincost<—COST(k,l)
(T(I,1),T(I,2))~(k,l)
fori<-1tondo〃將NEAR置初值〃
ifCOST(i,l)<COST(i,k)thenNEAR(i)-I
elseNEAR⑴—k
endif
repeat
NEAR(k)―NEAR。)-0
fori^2ton-1do〃找T的其余n-2條邊〃
設(shè)j是NEAR(j)K0且COST(j,NEAR(j))最小的下標(biāo)
(T(i,1),T(i,2))~(j,NEAR(j))
mincost-mincost+COST(j,NEAR(j))
NEAR。)-0
fork—1tondo〃修改NEAR〃
ifNEAR(k)#0andCOST(k,NEAR(k))>COST(kJ)
thenNEAR(k)-j
endif
repeat
repeat
ifmincost>0°thenprint(fnospanningtree')endif
endPRIM
計算復(fù)雜性:0(H2)
4.Kruskal算法
(連通)圖的邊按成本的非降次序排列,下一條計入生成樹T中的邊
是還沒有計入的邊中具有最小成本、且和T中現(xiàn)有的邊不會構(gòu)成環(huán)路的邊。
①②③④⑤⑥
邊成本
(1,2)10
(3,6)15
(4,6)20
(2,6)25
4
6
10
邊成本
(3,5)35
V(TQ={123,4,5,6}
E(TK)={(1,2),(2,6),(3,5),(4,6),(3,6)}
算法3.9Kruskal算法
procedureKRUSKAL(E,COST,N,T,mincost)
〃G有n個結(jié)點,E是G的邊集。(:。$丁(11?是邊(11田的成本。T是最小成本生成
樹的邊集,mincost是它而版本〃
realmincost,COST(1:n,1:n);integerPARENT(1:n),T(1:n-1,2),n
以邊成本為元素構(gòu)造一個min堆
PARENT-1〃每個結(jié)點都在不同的集合中〃
i—mincost—0
whilei<n-1and堆非空do
從堆中刪去最小成本邊(u,v)并重新構(gòu)造堆
j—FIND(u);k-FIND(v)
if(j#k)theni<—i+1
T(i,1)-u;T(i,2)<-v
mincost—mincost+COST(u,v)
callUNION(j,k)
endif
repeat
ifiHn-1thenprint('nospanningtree')endif
return
endKRUSKAL
注:
?邊集以min-堆的形式保存,一條當(dāng)前最小成本邊可以在
O(loge)的時間內(nèi)找到;
?當(dāng)且僅當(dāng)圖G是不連通的,iWn-l;此時算法具有最壞
的執(zhí)行時間;
?算法的計算時間是O(eloge)
實驗內(nèi)容
-單源最短路徑算法的完善和實現(xiàn)
-書上的單源最短路徑算法僅求出了從單源點到其它所有結(jié)點的最
短路徑長度。在此基礎(chǔ)上,擴充算法功能,使得新算法在找出這
些最短路徑長度的同時,也能求出路徑上的結(jié)點序列。
要求:
-給出新算法的描述
■用C語言編寫該算法的程序
-用書上的實例(或自行設(shè)計測試數(shù)據(jù))測試程序,輸出測試結(jié)果。
基本形式如下:
startendlengthnodeslist
Vi20ViV
v22
Vi30V1V4
v4
Vi80ViV2V3V5V6
v6
交實驗報告
實驗內(nèi)容、算法描述、程序設(shè)計、結(jié)果測試及分析等
3.6單源最短路徑
1.問題描述
■最短路徑問題:
?每對結(jié)點之間的路徑問題
?特定線路下的最短路徑問題
?單源最短路徑問題等
■單源最短路徑問題
已知一個n結(jié)點有向圖G=(V,E)和邊的權(quán)函數(shù)c(e),
求由G中某指定結(jié)點V。到其它各結(jié)點的最短路徑。
假定邊的權(quán)值為正。
■例3.10如圖所示。設(shè)V。是起始點,求V。到其它
各結(jié)點的最短路徑。
路徑長度
⑴V0V210
(2)v0v2v325
(3)v0v2v3v145
⑷v0v445
注:路徑按照長度的非降次序給出
2.貪心策略求解
1)度量標(biāo)準(zhǔn)
量度的選擇:迄今已生成的所有路徑長度之和——為使之達
到最小,其中任意一條路徑都應(yīng)具有“最小”長度:
假定已經(jīng)構(gòu)造了i條這樣的最短路徑,則下一條要構(gòu)造的路徑
應(yīng)是下一條最短的路徑。
處理規(guī)則:按照路徑長度的非降次序依次生成從結(jié)點V。到
其它各結(jié)點的最短路徑。
例:
問題:如何對尚未生成的路
v0^v2
徑長度進行排序,以確定其
v—>v—>v
023中最短者?
VQ-N2->Vg-
Voi
2)貪心算法
全設(shè)S是已經(jīng)對其生成了最短路徑的結(jié)點集合(包括v。)。
金對于當(dāng)前不在S中的結(jié)點w,記DIST(w)是從V。開始,
只經(jīng)過S中的結(jié)點而在w結(jié)束的那條最短路徑的長度。
O
則有,
wS
①如果下一條最短路徑是到結(jié)點u,則這條路徑是從結(jié)點V。出發(fā),
在u處終止,且只經(jīng)過那些在S中的結(jié)點,即由V。至u的這條最短路徑上
的所有中間結(jié)點都是S中的結(jié)點,證明如下:
設(shè)w是這條路徑上的任意中間結(jié)點,則從V。到u的路徑也包含了一
條從V。到W的路徑,且其長度小于從V。到U的路徑長度。
Vo,Sps2,???,w,???,sm_pu
t
均在s中
根據(jù)生成規(guī)則:最短路徑是按照路徑長度的非降次序生成的,因
此從V。到W的最短路徑應(yīng)該已經(jīng)生成。從而W也應(yīng)該在S中。
故,不存在不在s中的中間結(jié)點。
②所生成的下一條路徑的終點u必定是所有不在S內(nèi)的結(jié)點中具有
最小DIST(u)值的結(jié)點。
③如果選出了這樣結(jié)點U并生成了從V。到U的最短路徑之后,結(jié)點U將成為
S中的一個成員。此時,那些從V。出發(fā),只經(jīng)過S中的結(jié)點并且在S外的結(jié)
點w處結(jié)束的最短路徑長度可能會減小——DIST(w)的值變小:
這些長度發(fā)生改變的路徑,必定是一條從%出發(fā),經(jīng)過u然后到w的
更短的路徑。
★根據(jù)DIST(w)的定義,DIST(w)所表示的最短路徑上,所有中間
結(jié)點都在S中;故只考慮<u,w>£E和右的情況
★對于從V。至w,且經(jīng)過最后一個中間結(jié)點為u的最短路徑,有:
DIST(w)=DIST(u)+c(u,w)
★隨著u的加入,DIST(w)調(diào)整為
DIST(w)=min(DIST(w),DIST(u)+c(u,w))
算法3.10生成最短路徑的貪心算法
procedureSHORTEST-PATHS(v,COST,DIST,n)
〃G是一個n結(jié)點有向圖,它由其成本鄰接矩陣COST(n,n)表示。DIST(j)被置
從結(jié)點v到結(jié)點j的最短路徑長度,這里10"。DIST(v)被置成零〃
booleanS(1:n);realCOST(1:n,1:n),DIST(1:n)
integeru5v,n3num,i,w
fori—1tondo//將集合S初始化為空〃
S(i)<-0;DIST(i)-COST(vj)〃若<v,zE,則DIST(i)=8〃
repeat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版南雄市農(nóng)村集體資產(chǎn)租賃合同3篇
- 二零二五年度國際商務(wù)培訓(xùn)項目聘用專家合同3篇
- 2025年度二零二五綠色建筑設(shè)計與施工合同樣本4篇
- 二零二五年度木材加工鋼材買賣居間合同附帶鋼材加工行業(yè)標(biāo)準(zhǔn)制定4篇
- 二零二五年度天然氣運輸與新能源開發(fā)合同書
- 二零二五年度企業(yè)員工職業(yè)發(fā)展路徑規(guī)劃合同
- 2025年度棉布市場調(diào)研與銷售策略制定合同
- 2025年智能家居內(nèi)墻裝飾施工與智能化升級合同
- 2025年度個人購房擔(dān)保借款合同優(yōu)化版2篇
- 氨吸收塔的設(shè)計
- 中央2025年國務(wù)院發(fā)展研究中心有關(guān)直屬事業(yè)單位招聘19人筆試歷年參考題庫附帶答案詳解
- 2024年09月北京中信銀行北京分行社會招考(917)筆試歷年參考題庫附帶答案詳解
- 外呼合作協(xié)議
- 小學(xué)二年級100以內(nèi)進退位加減法800道題
- 保險公司2025年工作總結(jié)與2025年工作計劃
- 2024年公司領(lǐng)導(dǎo)在新年動員會上的講話樣本(3篇)
- 眼科護理進修專題匯報
- 介入手術(shù)室感染控制管理
- 2024北京初三(上)期末英語匯編:材料作文
- 2024年大型風(fēng)力發(fā)電項目EPC總承包合同
- 禮儀服務(wù)合同三篇
評論
0/150
提交評論