第4章-貪心算法課件_第1頁
第4章-貪心算法課件_第2頁
第4章-貪心算法課件_第3頁
第4章-貪心算法課件_第4頁
第4章-貪心算法課件_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

8:08上午第4章貪心算法110:46下午第4章貪心算法118:08上午第4章貪心算法

貪心算法總是作出在當(dāng)前看來最好的選擇。貪心算法不從整體最優(yōu)考慮,作出的選擇只是在某種意義上的局部最優(yōu)選擇。貪心算法不能對所有問題都得到整體最優(yōu)解.但對有些問題可以快速獲得最優(yōu)解。

在一些情況下,即使貪心算法不能得到整體最優(yōu)解,其最終結(jié)果卻是最優(yōu)解的很好近似。210:46下午第4章貪心算法 貪心算法總是作出在28:08上午第4章貪心算法本章主要知識點(diǎn):4.1活動安排問題4.2貪心算法的基本要素4.3最優(yōu)裝載4.4哈夫曼編碼4.5單源最短路徑4.6最小生成樹4.7多機(jī)調(diào)度問題4.8貪心算法的理論基礎(chǔ)310:46下午第4章貪心算法本章主要知識點(diǎn):338:08上午4.1活動安排問題

活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心算法提供了一個(gè)簡單、漂亮的方法使得盡可能多的活動能兼容地使用公共資源。410:46下午4.1活動安排問題活動安排問題就48:08上午4.1活動安排問題5

設(shè)有n個(gè)活動的集合E={1,2,…,n},其中每個(gè)活動都要求使用同一資源,而在同一時(shí)間內(nèi)只有一個(gè)活動能使用這一資源。

活動i占用區(qū)間[si,fi),活動j占用區(qū)間[sj,fj),

則活動i與活動j是相容的條件是si≥fj或sj≥fi。換句話說,就是后一個(gè)活動的開始時(shí)間不能在前一個(gè)活動結(jié)束之前。10:46下午4.1活動安排問題5設(shè)有n個(gè)活動的58:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolving活動名稱開始時(shí)間結(jié)束時(shí)間學(xué)術(shù)講座A9:0012:00會議8:0010:00音樂欣賞20:0023:00論文答辯A8:0015:00論文答辯B11:0014:00論文答辯C12:0016:00學(xué)術(shù)講座B15:0017:00放映電影18:0021:00演講比賽16:0018:00報(bào)告廳申請登記表xxxx年xx月xx日請給出安排方案要求:使報(bào)告廳安排的活動數(shù)最多10:46下午GreedyAlgorithmsCreat68:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolving活動名稱開始時(shí)間結(jié)束時(shí)間學(xué)術(shù)講座A9:0012:00會議8:0010:00音樂欣賞20:0023:00論文答辯A8:0015:00論文答辯B11:0014:00論文答辯C12:0016:00學(xué)術(shù)講座B15:0017:00放映電影18:0021:00演講比賽16:0018:00遞增報(bào)告廳申請登記表xxxx年xx月xx日10:46下午GreedyAlgorithmsCreat78:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolving活動名稱開始時(shí)間結(jié)束時(shí)間學(xué)術(shù)講座A9:0012:00會議8:0010:00音樂欣賞20:0023:00論文答辯A8:0015:00論文答辯B11:0014:00論文答辯C12:0016:00學(xué)術(shù)講座B15:0017:00放映電影18:0021:00演講比賽16:0018:00123456789報(bào)告廳申請登記表xxxx年xx月xx日10:46下午GreedyAlgorithmsCreat88:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolving活動名稱開始時(shí)間結(jié)束時(shí)間會議8:0010:00學(xué)術(shù)講座A9:0012:00論文答辯B11:0014:00論文答辯A8:0015:00論文答辯C12:0016:00學(xué)術(shù)講座B15:0017:00演講比賽16:0018:00放映電影18:0021:00音樂欣賞20:0023:00按結(jié)束時(shí)間遞增排序后的表格10:46下午GreedyAlgorithmsCreat98:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolving活動名稱開始時(shí)間結(jié)束時(shí)間activity18:0010:00activity29:0012:00activity311:0014:00activity48:0015:00activity512:0016:00activity615:0017:00activity716:0018:00activity818:0021:00activity920:0023:00按結(jié)束時(shí)間遞增排序后的表格10:46下午GreedyAlgorithmsCreat108:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat118:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat128:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat138:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat148:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat158:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat168:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat178:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolvinga1a3a6a8a2a4a5a9a789101112131415161718192021222310:46下午GreedyAlgorithmsCreat188:08上午GreedyAlgorithmsCreative

Thinking&ProblemSolving問題描述n個(gè)需要排隊(duì)使用某個(gè)公共資源的活動。S={a1,……,an}ai在半開區(qū)間[si,fi)使用資源,其中si=開始時(shí)間,fi=結(jié)束時(shí)間目標(biāo):安排最大可能的非重疊活動集合10:46下午GreedyAlgorithmsCreat19greedySelector:publicstaticintgreedySelector(int[]s,int[]f,booleana[]){;//n個(gè)活動按照結(jié)束時(shí)間從小到大排序后存放于s[],f[]中intn=s.length-1a[1]=true;intj=1;intcount=1;for(inti=2;i<=n;i++){if(s[i]>=f[j]){a[i]=true;j=i;

count++;}elsea[i]=false;}returncount;}

8:08上午Creative

Thinking&ProblemSolving復(fù)雜度:

(n)如果給定的活動沒有事先按結(jié)束時(shí)間排序,需要先排序,這樣整個(gè)算法的時(shí)間復(fù)雜性是?greedySelector:10:46下午Creati20214.2貪心算法的基本要素

對于一個(gè)具體的問題,怎么知道是否可用貪心算法解此問題,以及能否得到問題的最優(yōu)解呢?

從許多可以用貪心算法求解的問題中看到這類問題一般具有2個(gè)重要的性質(zhì):

貪心選擇性質(zhì) 最優(yōu)子結(jié)構(gòu)性質(zhì)。

214.2貪心算法的基本要素 對于一個(gè)具體的問題,218:08上午4.2貪心算法的基本要素1.貪心選擇性質(zhì)

貪心選擇性質(zhì)是指所求問題的整體最優(yōu)解可以通過一系列局部最優(yōu)的選擇,即貪心選擇來達(dá)到。這是貪心算法可行的第一個(gè)基本要素,也是貪心算法與動態(tài)規(guī)劃算法的主要區(qū)別。動態(tài)規(guī)劃算法通常以自底向上的方式解各子問題貪心算法通常以自頂向下的方式進(jìn)行,以迭代的方式作出相繼的貪心選擇,每作一次貪心選擇就將所求問題簡化為規(guī)模更小的子問題。

對于一個(gè)具體問題,要確定它是否具有貪心選擇性質(zhì),必須證明每一步所作的貪心選擇最終導(dǎo)致問題的整體最優(yōu)解。2210:46下午4.2貪心算法的基本要素1.貪心選擇性質(zhì)2228:08上午4.2貪心算法的基本要素2.最優(yōu)子結(jié)構(gòu)性質(zhì)

當(dāng)一個(gè)問題的最優(yōu)解包含其子問題的最優(yōu)解時(shí),稱此問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。問題的最優(yōu)子結(jié)構(gòu)性質(zhì)是該問題可用動態(tài)規(guī)劃算法或貪心算法求解的關(guān)鍵特征。即此二種算法都要求問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。2310:46下午4.2貪心算法的基本要素2.最優(yōu)子結(jié)構(gòu)性質(zhì)238:08上午4.2貪心算法的基本要素3.貪心算法與動態(tài)規(guī)劃算法的差異

貪心算法和動態(tài)規(guī)劃算法都要求問題具有最優(yōu)子結(jié)構(gòu)性質(zhì),這是2類算法的一個(gè)共同點(diǎn)。但是,對于具有最優(yōu)子結(jié)構(gòu)的問題應(yīng)該選用貪心算法還是動態(tài)規(guī)劃算法求解?

下面研究2個(gè)經(jīng)典的組合優(yōu)化問題,并以此說明貪心算法與動態(tài)規(guī)劃算法的主要差別。2410:46下午4.2貪心算法的基本要素3.貪心算法與動態(tài)248:08上午4.2貪心算法的基本要素0-1背包問題:

給定n種物品和一個(gè)背包。物品i的重量是Wi,其價(jià)值為Vi,背包的容量為C。應(yīng)如何選擇裝入背包的物品,使得裝入背包中物品的總價(jià)值最大?25在選擇裝入背包的物品時(shí),對每種物品i只有2種選擇,即裝入背包或不裝入背包。不能將物品i裝入背包多次,也不能只裝入部分的物品i。10:46下午4.2貪心算法的基本要素0-1背包問題:258:08上午4.2貪心算法的基本要素背包問題:

與0-1背包問題類似,所不同的是在選擇物品i裝入背包時(shí),可以選擇物品i的一部分,而不一定要全部裝入背包,1≤i≤n。26

這2類問題都具有最優(yōu)子結(jié)構(gòu)性質(zhì),極為相似,但背包問題可以用貪心算法求解,而0-1背包問題卻不能用貪心算法求解。

10:46下午4.2貪心算法的基本要素背包問題:26268:08上午4.2貪心算法的基本要素用貪心算法解背包問題的基本步驟:

首先計(jì)算每種物品單位重量的價(jià)值Vi/Wi,然后,依貪心選擇策略,將盡可能多的單位重量價(jià)值最高的物品裝入背包。若將這種物品全部裝入背包后,背包內(nèi)的物品總重量未超過C,則選擇單位重量價(jià)值次高的物品并盡可能多地裝入背包。依此策略一直地進(jìn)行下去,直到背包裝滿為止。 具體算法可描述如下頁:

2710:46下午4.2貪心算法的基本要素用貪心算法解背包問278:08上午4.2貪心算法的基本要素voidKnapsack(intn,floatM,floatv[],floatw[],floatx[]){Sort(n,v,w);inti;for(i=1;i<=n;i++)x[i]=0;floatc=M;for(i=1;i<=n;i++){if(w[i]>c)break;x[i]=1;c-=w[i];}if(i<=n)x[i]=c/w[i];}28

算法knapsack的主要計(jì)算時(shí)間在于將各種物品依其單位重量的價(jià)值從大到小排序。因此,算法的計(jì)算時(shí)間上界為O(nlogn)。當(dāng)然,為了證明算法的正確性,還必須證明背包問題具有貪心選擇性質(zhì)。10:46下午4.2貪心算法的基本要素voidKnap288:08上午4.2貪心算法的基本要素

對于0-1背包問題,貪心選擇之所以不能得到最優(yōu)解是因?yàn)樵谶@種情況下,它無法保證最終能將背包裝滿,部分閑置的背包空間使每公斤背包空間的價(jià)值降低了。 0-1背包舉例:設(shè)背包的容量w=6,

(Wi,Vi)|(1,3),(3,6),(5,9)為三個(gè)物品重量和價(jià)值

按照貪心算法得最大價(jià)值=9,實(shí)際上可以得到12.實(shí)際在考慮0-1背包問題時(shí),應(yīng)比較選擇該物品和不選擇該物品所導(dǎo)致的最終方案,然后再作出最好選擇。第三章使用動態(tài)規(guī)劃方法解決了0-1背包。2910:46下午4.2貪心算法的基本要素 對于0-1背298:08上午4.3最優(yōu)裝載 有一批集裝箱要裝上一艘載重量為c的輪船。其中集裝箱i的重量為Wi。最優(yōu)裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。1.算法描述 最優(yōu)裝載問題可用貪心算法求解。采用重量最輕者先裝的貪心選擇策略,可產(chǎn)生最優(yōu)裝載問題的最優(yōu)解。具體算法描述如下頁。

3010:46下午4.3最優(yōu)裝載 有一批集裝箱要裝308:08上午4.3最優(yōu)裝載template<classType>voidLoading(intx[],Typew[],Typec,intn)//w數(shù)組按單位重量價(jià)值非遞減排序。{Sort(w,n);for(inti=1;i<=n;i++)x[i]=0;for(inti=1;i<=n&&w[i]<=c;i++){x[i]=1;c-=w[i];}}3110:46下午4.3最優(yōu)裝載template<class318:08上午4.3最優(yōu)裝載2.貪心選擇性質(zhì) 設(shè)集裝箱依其重量從小到大排序,(x1,x2,..xn)是其最優(yōu)解,xi={0,1},設(shè)xk是第一個(gè)等于1的。(1)如k=1,則滿足貪心選擇性質(zhì)(2)如k≠1,用x1替換xk,構(gòu)造的新解同原解最優(yōu)值相同,故也是最優(yōu)解。因此滿足貪心選擇性質(zhì)。

3.最優(yōu)子結(jié)構(gòu)性質(zhì)

最優(yōu)裝載問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)

T(1,n,w)=1+T(2,n,w-w1) 算法loading的主要計(jì)算量在于將集裝箱依其重量從小到大排序,故算法所需的計(jì)算時(shí)間為O(nlogn)。

3210:46下午4.3最優(yōu)裝載2.貪心選擇性質(zhì)32328:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsASCII碼Morse碼定長變長4.4哈夫曼編碼10:46下午CreativeThinking&Pr33abcdef0000010100111001018:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms看一個(gè)例子有一個(gè)100,000個(gè)字符的數(shù)據(jù)文件,字符集為:{a,b,c,d,e,f}總位數(shù)=3*100,000=300,000比特定長編碼abcdef00000101001110010110:4634abcdef01000110118:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms若在100,000個(gè)字符的數(shù)據(jù)文件中,每個(gè)字符出現(xiàn)的頻率分別為(每100個(gè)):

a45,b13,c12,d16,e9,f5變長編碼總位數(shù)=(1*45+1*13+2*12+2*16+2*9+2*5)*1000=142,000

比特節(jié)省空間>50%abcdef010001101110:46下午Creati358:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…例子10:46下午CreativeThinking&Pr368:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…a解碼10:46下午CreativeThinking&Pr378:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…a解碼10:46下午CreativeThinking&Pr388:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…ba看出問題了嗎解碼10:46下午CreativeThinking&Pr398:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…bad01解碼10:46下午CreativeThinking&Pr408:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…bad解碼10:46下午CreativeThinking&Pr418:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…bada?e?解碼10:46下午CreativeThinking&Pr428:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsabcdef0100011011…0101100…bada?e?aaae如何解決解碼時(shí)的二義性?

解碼10:46下午CreativeThinking&Pr43abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms新的變長編碼有什么不同?…0101100…a解碼abcdef010110011111011100abcdef01011001111101110010:4644abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms新的變長編碼有什么不同?…0101100…ax解碼abcdef010110011111011100abcdef01011001111101110010:4645abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms新的變長編碼有什么不同?…0101100…axx解碼abcdef010110011111011100abcdef01011001111101110010:4646abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms新的變長編碼有什么不同?…0101100…axxb解碼abcdef010110011111011100abcdef01011001111101110010:4647abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms新的變長編碼有什么不同?…0101100…axxbx解碼abcdef010110011111011100abcdef01011001111101110010:4648abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms新的變長編碼有什么不同?…0101100…axxbxx解碼abcdef010110011111011100abcdef01011001111101110010:4649abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms新的變長編碼有什么不同?…0101100…axxbxxc解碼abcdef010110011111011100abcdef01011001111101110010:4650abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms前綴碼

Prefixcode前綴碼:給定一個(gè)序列的集合,若不存在一個(gè)序列是另一個(gè)序列的前綴,則該序列集合稱為前綴碼。abcdef01011001111101110010:4651abcdef01011001111101110045131216958:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms總位數(shù)=(1*45+3*13+3*12+3*16+4*9+4*5)*1000=224,000

比特25%abcdef01011001111101110045131252abcdef0000010100111001018:08上午GreedyAlgorithmsf:5e:9c:12b:13a:45d:16582886141410000000011111定長碼xxx:xxx:xx+=xxxx定長編碼二叉樹abcdef00000101001110010110:4653abcdef0101100111110111008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9c:12b:13a:45d:16100010001111055302514前綴碼xxx:xxx:xx+=xxxx哈夫曼編碼二叉樹abcdef01011001111101110010:46548:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsB(T)=∑c∈CdT(c)f(c)dt(c)葉子c在T中的深度f(c)c在文件中出現(xiàn)的頻度C字符集B(T)平均比特?cái)?shù)代價(jià)10:46下午CreativeThinking&Pr558:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms最優(yōu)問題貪心算法

GreedyAlgorithm10:46下午CreativeThinking&Pr568:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms貪心算法

GreedyAlgorithm哈夫曼編碼

Huffmancodes10:46下午CreativeThinking&Pr578:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9c:12b:13a:45min-priorityQueue按頻率遞增排序d:1610:46下午CreativeThinking&Pr588:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9c:12b:13a:45d:161410:46下午CreativeThinking&Pr598:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9c:12b:13a:45d:161410:46下午CreativeThinking&Pr608:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9c:12b:13a:45d:1614Newnode10:46下午CreativeThinking&Pr618:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9a:45d:1614c:12b:132510:46下午CreativeThinking&Pr628:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9a:45d:1614c:12b:132510:46下午CreativeThinking&Pr638:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9a:45d:1614c:12b:13253010:46下午CreativeThinking&Pr648:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9a:45d:1614c:12b:13253010:46下午CreativeThinking&Pr658:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9a:45d:1614c:12b:13253010:46下午CreativeThinking&Pr668:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9a:45d:1614c:12b:1325305510:46下午CreativeThinking&Pr678:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsf:5e:9a:45d:1614c:12boot000111010110:46下午CreativeThinking&Pr688:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsHuffman(C)n

︱C︱//C數(shù)組記錄所有字符的發(fā)生頻度QC/*min-priorityqueue*/

for

i

1to

n-1{allocateanewnodez

left[z]xExtract-Min(Q)

right[z]yExtract-Min(Q)

f[z]f[x]+f[y]Insert(Q,z)}

returnExtract-Min(Q)哈夫曼算法偽碼返回樹的root10:46下午CreativeThinking&Pr698:08上午Creative

Thinking&ProblemSolving設(shè)C為一字母表,其中每個(gè)字符c∈C

具有頻率f[c]。設(shè)x和y為C中具有最低頻率的兩個(gè)字符,則存在C的一種最優(yōu)前綴編碼,其中x和y的編碼長度相同但最后一位不同。證明方法:貪心選擇性質(zhì)bycxxycbxcybTT’T“10:46下午CreativeThinking&Pr70B(T)-B(T’)=…..=(f(b)-f(x))(dT(b)-dT(x))≥0B(T’)-B(T”)=…..=(f(c)-f(y))(dT’(c)-dT’(y))≥0由此推出B(T)≥B(T’)≥B(T”)因?yàn)門是最優(yōu)解,因此只有B(T)=B(T”)成立也就是發(fā)生頻率最低的兩個(gè)字符在哈夫曼樹的最低層,存在一種形式既是一個(gè)父節(jié)點(diǎn)的二個(gè)孩子節(jié)點(diǎn)。B(T)-B(T’)=…..718:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms設(shè)T為表示字母表C上的一種最優(yōu)前綴編碼的一棵滿二叉樹,對每個(gè)字符c∈C

定義有頻率f[c]??紤]T中任意兩個(gè)為兄弟葉節(jié)點(diǎn)的字符x和y,并設(shè)z為它們的父節(jié)點(diǎn)。那么,若認(rèn)為z是一個(gè)頻率為f[z]=f[x]+f[y]的字符的話,樹T’=T-{x,y}就表示了字母表C’=C-{x,y}∪{z}上的一種最優(yōu)前綴編碼。證明:

推導(dǎo)可得:B(T)=B(T’)+f(x)+f(y)用反證法可以證明B(T’)一定是一個(gè)最優(yōu)解最優(yōu)子結(jié)構(gòu)性質(zhì)10:46下午CreativeThinking&Pr728:08上午4.5單源最短路徑 給定帶權(quán)有向圖G=(V,E),其中每條邊的權(quán)是非負(fù)實(shí)數(shù)。另外,還給定V中的一個(gè)頂點(diǎn),稱為源?,F(xiàn)在要計(jì)算從源到所有其他各頂點(diǎn)的最短路徑長度。這里路徑的長度是指路徑上各邊權(quán)之和。這個(gè)問題通常稱為單源最短路徑問題。

1.算法基本思想 Dijkstra算法是解單源最短路徑問題的貪心算法。7310:46下午4.5單源最短路徑 給定帶權(quán)有向圖G=738:08上午4.5單源最短路徑

基本思想:設(shè)置頂點(diǎn)集合S并不斷地作貪心選擇來擴(kuò)充這個(gè)集合。一個(gè)頂點(diǎn)屬于集合S當(dāng)且僅當(dāng)從源到該頂點(diǎn)的最短路徑長度已知。 初始時(shí),S中僅含有源。從源只經(jīng)過S中頂點(diǎn)到達(dá)u(S外)稱為從源到u的特殊路徑,用數(shù)組dist記錄當(dāng)前每個(gè)頂點(diǎn)的最短特殊路徑長度。具有最短特殊路徑長度值最小的為最短路徑已知。每次從V-S中取出具有最短特殊路長度的頂點(diǎn)u,將u添加到S中,同時(shí)對數(shù)組dist作必要的修改。直到S包含了所有V中頂點(diǎn).7410:46下午4.5單源最短路徑 基本思想:設(shè)置頂點(diǎn)集合748:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE1031422879帶有非負(fù)邊權(quán)的圖10:46下午CreativeThinking&Pr758:08上午Creative

Thinking&ProblemSolvingDijkstra

算法例子演示ABCDE1031422879初始化:0∞∞∞∞Q:ABCDEDist0∞∞∞∞S:

{}10:46下午CreativeThinking&Pr768:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE10314228790∞∞∞∞“A”

Extract-Min(Q):Q:ABCDEdist0∞∞∞∞S:

{A}10:46下午CreativeThinking&Pr778:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE10314228790103∞∞Q:ABCDEdist0∞∞∞∞S:

{A}10

3∞∞10:46下午CreativeThinking&Pr788:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE10314228790∞∞Q:ABCDE

0∞∞∞∞S:

{AC}10

3∞∞“C”

Extract-Min(Q):10310:46下午CreativeThinking&Pr798:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE10314228790115Q:ABCDE

0∞∞∞∞S:

{AC}10

3∞∞73

711

510:46下午CreativeThinking&Pr808:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE10314228790115Q:ABCDE

0∞∞∞∞S:

{ACE}10

3∞∞73

711

5“E”

Extract-Min(Q):10:46下午CreativeThinking&Pr818:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE10314228790115Q:ABCDE

0∞∞∞∞S:

{ACE}10

3∞∞73

711

510:46下午CreativeThinking&Pr828:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE10314228790115Q:A

B

CDE

0∞∞∞∞S:

{ACEB}10

3∞∞73

711

5“B”

Extract-Min(Q):

71110:46下午CreativeThinking&Pr838:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE1031422879095Q:A

B

CDE

0∞∞∞∞S:

{ACEB}10

3∞∞73

711

5

711910:46下午CreativeThinking&Pr848:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsDijkstra

算法例子演示ABCDE1031422879095Q:A

B

C

D

E

0∞∞∞∞S:

{ACEBD}10

3∞∞73

711

5

7119“D”

Extract-Min(Q):10:46下午CreativeThinking&Pr858:08上午4.5單源最短路徑2.算法的正確性和計(jì)算復(fù)雜性(1)貪心選擇性質(zhì)(2)最優(yōu)子結(jié)構(gòu)性質(zhì)(3)計(jì)算復(fù)雜性 對于具有n個(gè)頂點(diǎn)和e條邊的帶權(quán)有向圖,如果用帶權(quán)鄰接矩陣表示這個(gè)圖,那么Dijkstra算法的主循環(huán)體需要時(shí)間。這個(gè)循環(huán)需要執(zhí)行n-1次,所以完成循環(huán)需要時(shí)間。算法的其余部分所需要時(shí)間不超過。8610:46下午4.5單源最短路徑2.算法的正確性和計(jì)算復(fù)868:08上午4.6最小生成樹

設(shè)G=(V,E)是無向連通帶權(quán)圖,即一個(gè)網(wǎng)絡(luò)。E中每條邊(v,w)的權(quán)為c[v][w]。如果G的子圖G’是一棵包含G的所有頂點(diǎn)的樹,則稱G’為G的生成樹。生成樹上各邊權(quán)的總和稱為該生成樹的耗費(fèi)。在G的所有生成樹中,耗費(fèi)最小的生成樹稱為G的最小生成樹。

8710:46下午4.6最小生成樹 設(shè)G=(V,E)是878:08上午4.6最小生成樹1.最小生成樹性質(zhì)

用貪心算法設(shè)計(jì)策略可以設(shè)計(jì)出構(gòu)造最小生成樹的有效算法。Prim算法和Kruskal算法,這2個(gè)算法做貪心選擇的方式不同,但它們都利用了最小生成樹性質(zhì): 設(shè)G=(V,E)是連通帶權(quán)圖,U是V的真子集。如果(u,v)E,且uU,vV-U,且在所有這樣的邊中,(u,v)的權(quán)c[u][v]最小,那么一定存在G的一棵最小生成樹,它以(u,v)為其中一條邊。這性質(zhì)有時(shí)也稱為MST(最小生成樹)性質(zhì)。

8810:46下午4.6最小生成樹1.最小生成樹性質(zhì)88888:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms輸入:一個(gè)連通非有向圖G=(V,E),其權(quán)函數(shù)為w:E→R.輸出:

一個(gè)連接所有頂點(diǎn)且權(quán)值

最小的生成樹(spanningtree)

T

:最小生成樹

Minimumspanningtreesw(T)=∑(u,v)∈T

w(u,v)MST10:46下午CreativeThinking&Pr898:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms31461258107915MST例子G=(V,E)10:46下午CreativeThinking&Pr908:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms31461258107915MST例子MSTG=(V,E)10:46下午CreativeThinking&Pr918:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsMST對現(xiàn)實(shí)世界的抽象電信網(wǎng)絡(luò)通信集成電路布線交通10:46下午CreativeThinking&Pr928:08上午交通Creative

Thinking&ProblemSolvingGreedyAlgorithms10:46下午交通CreativeThinking&938:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms電信10:46下午CreativeThinking&Pr948:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms電信10:46下午CreativeThinking&Pr958:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms最優(yōu)子結(jié)構(gòu)Optimal

Substructure10:46下午CreativeThinking&Pr968:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms最優(yōu)子結(jié)構(gòu)Optimal

SubstructureuvT1T210:46下午CreativeThinking&Pr978:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsuvT1T2w(T)=w(u,v)+w(T1)+w(T2)最優(yōu)子結(jié)構(gòu)證明10:46下午CreativeThinking&Pr988:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms最優(yōu)子結(jié)構(gòu)證明uvT1T2T=T1∪{(u,v)}∪T2T’=T1’∪{(u,v)}∪T2設(shè)

T1’比

T1更優(yōu)∴

T

’<T矛盾設(shè)T是最優(yōu)MSTCutandpaste10:46下午CreativeThinking&Pr998:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsuvT1T2w(T)=w(u,v)+w(T1)+w(T2)10:46下午CreativeThinking&Pr1008:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithms貪心選擇性質(zhì)重要局部最優(yōu)即全局最優(yōu)10:46下午CreativeThinking&Pr1018:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsuvw(T)=w(T1)+w(u,v)+w(T2)T1和T2連接的最短邊證明:T1T210:46下午CreativeThinking&Pr1028:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsuvw(T)=w(T1)+w(u,v)+w(T2)證明:T1T2u’v’w(T’)=w(T1)+w(u’,v’)+w(T2)Cutandpaste10:46下午CreativeThinking&Pr1038:08上午Creative

Thinking&ProblemSolvingGreedyAlgorithmsuvT1T2開始節(jié)點(diǎn)選最短邊10:46下午CreativeThinking&Pr1048:08上午4.6最小生成樹2.Prim算法(選頂點(diǎn)加入集合S)

設(shè)G=(V,E)是連通帶權(quán)圖,V={1,2,…,n}。 構(gòu)造G的最小生成樹的Prim算法的基本思想是:首先置S={1},然后,只要S是V的真子集,就作如下的貪心選擇:選取滿足

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論