第二章算法概述(下)_第1頁(yè)
第二章算法概述(下)_第2頁(yè)
第二章算法概述(下)_第3頁(yè)
第二章算法概述(下)_第4頁(yè)
第二章算法概述(下)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第二章第二章 算法概述(下)算法概述(下)第二章第二章 算法算法概述(下)概述(下)n2.3 常用算法簡(jiǎn)介2.3.1 枚舉算法2.3.2 迭代算法2.3.3 貪心算法注:課程安排上,建議這部分內(nèi)容放到第四章后再深入講解。2n枚舉法就是按問(wèn)題本身的性質(zhì),一一列舉出該問(wèn)題所有可能的解,并在逐一列舉的過(guò)程中,檢驗(yàn)每個(gè)可能解是否真正滿足問(wèn)題所求。若是則采納這個(gè)解,否則拋棄它。【例2-3-1】求1-1000中,能被3整除的數(shù)。 算法:(1)從1-1000中一一列舉,這是一個(gè)循環(huán)結(jié)構(gòu)(2)在循環(huán)中對(duì)每個(gè)數(shù)進(jìn)行檢驗(yàn): 凡是能被3整除的數(shù),打印輸出,否則繼續(xù)下一個(gè)數(shù)。 2.3.1 枚舉枚舉算法算法3枚舉法的

2、基本思想枚舉法的基本思想n根據(jù)問(wèn)題描述和相關(guān)的知識(shí),能為該問(wèn)題確定一個(gè)大概的解空間范圍。n枚舉法就是對(duì)該解空間范圍內(nèi)的眾多候選解按某種順序進(jìn)行逐一枚舉和檢驗(yàn),直到找到一個(gè)或全部符合條件的解為止。n計(jì)算機(jī)程序?qū)崿F(xiàn)枚舉算法的基本方法是:用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)一一列舉的過(guò)程,用分支結(jié)構(gòu)實(shí)現(xiàn)檢驗(yàn)的過(guò)程。4枚舉法的總體框架枚舉法的總體框架枚舉法一般使用循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn),其框架如下:設(shè)解的個(gè)數(shù)設(shè)解的個(gè)數(shù)n n初始為初始為0; 0; 循環(huán)循環(huán)( (枚舉每一可能解枚舉每一可能解) ):若若( ( 該解法滿足約束該解法滿足約束 ) ) :輸出這個(gè)解輸出這個(gè)解; ; 解的數(shù)量解的數(shù)量n n加加1; 1; 5【例2-3-2】

3、判斷誰(shuí)是小偷。n有四個(gè)嫌疑人: a說(shuō):我不是小偷。 b說(shuō):c是小偷。 c說(shuō):小偷肯定是d。 d說(shuō):c冤枉人! 四人中有三人說(shuō)的是真話,問(wèn)到底誰(shuí)是小偷?依次假設(shè)a、b、c、d為小偷進(jìn)行判斷6求解求解“誰(shuí)是小偷?誰(shuí)是小偷?”的算法的算法*n依次假設(shè)a、b、c、d為小偷,判斷四人說(shuō)話的真假。若在某假設(shè)下,得到的結(jié)果為三人說(shuō)真話、一人說(shuō)假話,該假設(shè)成立,此即為所求的解。n例如:假設(shè)a是小偷,則根據(jù)以上四人的回答可判斷a、b、c都說(shuō)的假話,所以這種假設(shè)不成立;同樣,假設(shè)b是小偷也不成立;假設(shè)c是小偷,則根據(jù)四人的回答可判斷a、b和d都說(shuō)的真話,只有c一人說(shuō)假話,所以假設(shè)成立。7求解求解“誰(shuí)是小偷?誰(shuí)是小

4、偷?”的算法的算法*n對(duì)a、b、c、d依次進(jìn)行判斷,顯然這是一個(gè)循環(huán)的過(guò)程。為了能進(jìn)行循環(huán)處理,需要對(duì)問(wèn)題進(jìn)行數(shù)字化:n設(shè)x為假設(shè)的小偷,x依次取值1、2、3、4(表示a、b、c、d);n用s1,s2,s3,s4表示在某個(gè)假設(shè)下(即x分別為1、2、3、4時(shí))四人說(shuō)話的狀態(tài)(說(shuō)真話為1,說(shuō)假話為0)。n據(jù)此可得到以下算法:初始:設(shè)s1=s2=s3=s4=0 (“=”表示賦值)8求解求解“誰(shuí)是小偷?誰(shuí)是小偷?”的算法的算法*循環(huán):對(duì)x=1,4 (假設(shè)4個(gè)可能的解)在此假設(shè)下,分別求四人的說(shuō)話狀態(tài)(s1s4)若x!=1,s1=1 (a說(shuō):“我不是小偷”。真話); 若x=3,s2=1 (b說(shuō):“c是小

5、偷”。真話);(“!=”表示不等于, “=”表示等于)若x=4,s3=1 (c說(shuō):“小偷肯定是d?!闭嬖?;若x!=4,s4=1 (d說(shuō):“c冤枉人!”真話)。若經(jīng)以上判斷后有s1+s2+s3+s4=3 (即三人說(shuō)真話,一人說(shuō)假話)假設(shè)成立,小偷即為此時(shí)x的值對(duì)應(yīng)的那個(gè)人。(算法的流程圖見(jiàn)書(shū)上圖2-3-1)9應(yīng)用枚舉法通常有以下幾個(gè)步驟:應(yīng)用枚舉法通常有以下幾個(gè)步驟:(1)建立問(wèn)題的數(shù)學(xué)模型,確定問(wèn)題的可能解的集合(可能的解空間)。(2)確定合理的篩選條件,用來(lái)選出問(wèn)題的解。(3)確定搜索策略,逐一枚舉可能解集合中的元素,驗(yàn)證是否是問(wèn)題的解。10枚舉法應(yīng)用舉例枚舉法應(yīng)用舉例n將蘋(píng)果、桔子、香蕉

6、、梨、菠蘿5種水果做水果拼盤(pán),每個(gè)水果拼盤(pán)有3種不同的水果,且有序擺放。問(wèn)可以有多少種?11問(wèn)題分析問(wèn)題分析:n使用列表保存5種水果名。n通過(guò)三重循環(huán)結(jié)構(gòu),枚舉各種可能的方案nx、y、z的取值范圍為5種水果(解空間)n它們互不相等(篩選條件)n擺放先后次序有區(qū)別輸出所有可能的方案。1213算法步驟描述算法步驟描述:n步驟1:建立水果列表fruit;n步驟2:使變量x遍歷fruitn步驟3:對(duì)于x的每個(gè)值,使變量y遍歷fruit步驟4:對(duì)于x、y的每個(gè)值,使變量z遍歷fruit步驟5:n若zx且 zy 且xy 打印該方案14Python實(shí)現(xiàn)程序*#Fruit platefruit=apple,o

7、range,banana,pear,pineapplen=1for x in fruit: for y in fruit: for z in fruit: if z!=x and z!=y and x!=y: print(n,x,y,z) n+=1枚舉法的優(yōu)化枚舉法的優(yōu)化n通過(guò)一些制約條件,減少解空間可能解的數(shù)量,使檢驗(yàn)的工作量較少。n“水果拼盤(pán)”改進(jìn)的算法步驟描述:步驟1:建立水果列表fruit;步驟2:使變量x遍歷fruit步驟3:對(duì)于x的每一取值,使變量y遍歷fruit步驟4:若xy使變量z遍歷fruit若zx且 zy 打印該方案打印該方案15#Fruit platefruit=appl

8、e,orange,banana,pear,pineapplen=1for x in fruit: for y in fruit: if x!=y: for z in fruit: if z!=x and z!=y: print(n,x,y,z) n+=116問(wèn)題拓展:如果擺放次序無(wú)關(guān),怎樣求解?枚舉法的枚舉法的應(yīng)用應(yīng)用n打印“九九乘法表”n可使用枚舉法的問(wèn)題還有如n完全平方數(shù)17完全平方數(shù)是指能寫(xiě)成一個(gè)正整數(shù)的平方的數(shù),如25=52,所以,25是完全平方數(shù)。100=102,所以,100也是完全平方數(shù)。o百錢(qián)買(mǎi)百雞問(wèn)題:有一個(gè)人有一百塊錢(qián),打算買(mǎi)一百只雞。到市場(chǎng)一看,大雞三塊錢(qián)一只,小雞一塊錢(qián)三

9、只,不大不小的雞兩塊錢(qián)一只?,F(xiàn)在,請(qǐng)你編一程序,幫他計(jì)劃一下,怎么樣買(mǎi)法,才能剛好用一百塊錢(qián)買(mǎi)一百只雞?此題很顯然是用枚舉法,我們以三種雞的個(gè)數(shù)為枚舉對(duì)象(分別設(shè)為x,y,z),以三種雞的總數(shù)(x+y+z)和買(mǎi)雞用去的錢(qián)的總數(shù)(x*3+y*2+z/3)為判定條件,窮舉各種雞的個(gè)數(shù)。182.3.2 迭代和迭代和遞推遞推算算法法n迭代: 是一種不斷用變量的舊值遞推新值的過(guò)程。n迭代算法是計(jì)算機(jī)解決問(wèn)題的一種基本方法。它利用計(jì)算機(jī)運(yùn)算速度快、適合做重復(fù)性操作的特點(diǎn),從一個(gè)初始變量值出發(fā),讓計(jì)算機(jī)對(duì)一組指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行,每次執(zhí)行這組指令(或步驟)時(shí),都從變量的原值推出它的一個(gè)新值。最終得

10、到所求解。19n一個(gè)最簡(jiǎn)單的迭代例子:考慮求 1+2+3+,直到和達(dá)到1000時(shí)的自然數(shù)問(wèn)題。可以設(shè)一個(gè)累加變量s(初始s=0),然后通過(guò)循環(huán)將自然數(shù)1、2、3依次加到該累加變量s中,直到s1000為止,這時(shí)最后一個(gè)加入的自然數(shù)就是所求之?dāng)?shù)。這個(gè)例子就體現(xiàn)了迭代的思想,累加變量s就是迭代變量。20應(yīng)用迭代算法的通常應(yīng)用迭代算法的通常步驟步驟(1)確定迭代變量在可以用迭代算法解決的問(wèn)題中,至少存在一個(gè)直接或間接地不斷由舊值遞推出新值的變量,這個(gè)變量就是迭代變量。一般在確定迭代變量的同時(shí),還要指定其初始值。(2)建立迭代關(guān)系式所謂迭代關(guān)系式,是指如何從變量的前一個(gè)值推出其下一個(gè)值的公式(或關(guān)系)。

11、迭代關(guān)系式的建立是解決迭代問(wèn)題的關(guān)鍵,通??梢皂樛苹虻雇频姆椒▉?lái)完成。21(3)對(duì)迭代過(guò)程進(jìn)行控制 什么時(shí)候結(jié)束迭代過(guò)程?這是編寫(xiě)迭代程序必須考慮的問(wèn)題。根據(jù)算法“有限性”的性質(zhì),不能讓迭代過(guò)程無(wú)休止地重復(fù)執(zhí)行下去。 迭代過(guò)程的控制通常有兩種情況:a. 所需的迭代次數(shù)是個(gè)確定的值,可以計(jì)算出來(lái)??梢詷?gòu)建一個(gè)固定次數(shù)的循環(huán)來(lái)實(shí)現(xiàn)對(duì)迭代過(guò)程的控制。(常用for語(yǔ)句)b. 所需的迭代次數(shù)開(kāi)始時(shí)無(wú)法確定。需要進(jìn)一步分析出用來(lái)結(jié)束迭代過(guò)程的條件。例如,當(dāng)計(jì)算精度滿足要求后結(jié)束。(常用while語(yǔ)句)22迭代算法迭代算法舉例舉例n驗(yàn)證谷角猜想。日本數(shù)學(xué)家谷角靜夫在研究自然數(shù)時(shí)發(fā)現(xiàn)了一個(gè)奇怪現(xiàn)象:對(duì)于任意一

12、個(gè)自然數(shù)對(duì)于任意一個(gè)自然數(shù) n ,若,若 n 為偶數(shù)為偶數(shù),則將其除以,則將其除以 2 ;若;若 n 為奇數(shù),則將其乘以為奇數(shù),則將其乘以 3 ,然后再加,然后再加 1 。如此經(jīng)過(guò)有限次運(yùn)算后,。如此經(jīng)過(guò)有限次運(yùn)算后,總可以得到自然數(shù)總可以得到自然數(shù) 1 。n要求:寫(xiě)出算法,由鍵盤(pán)輸入一個(gè)自然數(shù) n ,把 n 經(jīng)過(guò)有限次運(yùn)算后,最終變成自然數(shù) 1 的全過(guò)程打印出來(lái)。2324n分析: 定義迭代變量為 n ,按照谷角猜想的內(nèi)容,可以得到兩種情況下的迭代關(guān)系式: 當(dāng) n 為偶數(shù)時(shí), n=n/2 ; 當(dāng) n 為奇數(shù)時(shí), n=n*3+1 。 這就是需要計(jì)算機(jī)重復(fù)執(zhí)行的迭代過(guò)程。n確定結(jié)束迭代過(guò)程的條件:

13、 這個(gè)迭代過(guò)程需要重復(fù)執(zhí)行多少次,才能使迭代變量 n 最終變成自然數(shù) 1 ?分析題目要求不難看出,對(duì)任意給定的一個(gè)自然數(shù) n ,只要經(jīng)過(guò)有限次運(yùn)算后,能夠得到自然數(shù) 1 ,就完成了驗(yàn)證工作。 因此,用來(lái)結(jié)束迭代過(guò)程的條件為: n=1 。25驗(yàn)證谷角猜想流程圖驗(yàn)證谷角猜想流程圖遞推與迭代遞推與迭代n與迭代相近的概念是遞推。設(shè)要求問(wèn)題規(guī)模為n的解,當(dāng)n=1時(shí),解已知或能方便得到,根據(jù)遞推關(guān)系,能從i-1規(guī)模的解,推出i規(guī)模的解(i=2、3、n),這就是遞推。n當(dāng)然也可以反過(guò)來(lái),從n、n-1、3、2反推到1。26n植樹(shù)節(jié)那天,有五位同學(xué)參加了植樹(shù)活動(dòng),植樹(shù)節(jié)那天,有五位同學(xué)參加了植樹(shù)活動(dòng),他們完成植

14、樹(shù)的棵樹(shù)都不相同。他們完成植樹(shù)的棵樹(shù)都不相同。n問(wèn)第一位同學(xué)植了多少棵時(shí),他指著旁邊的問(wèn)第一位同學(xué)植了多少棵時(shí),他指著旁邊的第二位同學(xué)說(shuō)比他多植了兩棵;追問(wèn)第二位第二位同學(xué)說(shuō)比他多植了兩棵;追問(wèn)第二位同學(xué),他又說(shuō)比第三位同學(xué)多植了兩棵;同學(xué),他又說(shuō)比第三位同學(xué)多植了兩棵;. 如此,都說(shuō)比另一位如此,都說(shuō)比另一位 同學(xué)多植兩棵。最后同學(xué)多植兩棵。最后 問(wèn)到第五位同學(xué)時(shí),問(wèn)到第五位同學(xué)時(shí), 他說(shuō)自己植了他說(shuō)自己植了10棵???。 n到底第一位同學(xué)植了到底第一位同學(xué)植了 多少棵樹(shù)?多少棵樹(shù)?27【例2-3-6】植樹(shù)問(wèn)題28n分析:設(shè)第i位同學(xué)植樹(shù)的棵樹(shù)為ai,欲求a1,需從第五位同學(xué)植樹(shù)的棵數(shù)a5入手

15、,根據(jù)“多兩棵”這個(gè)規(guī)律,按照一定順序逐步進(jìn)行推算:(1) a5=10;(2) a4=a5+2=12;(3) a3=a4+2=14;(4) a2=a3+2=16;(5) a1=a2+2=18;這就是遞推的思想遞推與迭代遞推與迭代n遞推方法是數(shù)學(xué)解題中的一種常用方法。n對(duì)一個(gè)序列來(lái)說(shuō),如果已知它的通項(xiàng)公式,則要求數(shù)列的第n項(xiàng)或前n項(xiàng)之和是很容易的。但許多情況下,要得到數(shù)列的通項(xiàng)公式很困難,然而可觀察到數(shù)列相鄰位置上的數(shù)據(jù)之間存在一定的關(guān)系。使用遞推方法可以避開(kāi)求通項(xiàng)公式的困難,在一次次循環(huán)中,通過(guò)已知的項(xiàng)推算出其后繼值,直到最終找到所需的那一項(xiàng)。29遞推與迭代遞推與迭代n遞推的過(guò)程實(shí)際上就是迭代

16、的過(guò)程,即不斷用變量的舊值推出新值的過(guò)程。n一般遞推使用數(shù)組(列表),在循環(huán)處理時(shí)利用其下標(biāo)的變化實(shí)現(xiàn)變量的迭代,而狹義的迭代是指使用簡(jiǎn)單變量來(lái)完成這一過(guò)程。30n程序設(shè)計(jì)中的數(shù)組(列表)是指具有相同名稱、通過(guò)下標(biāo)區(qū)分的一組變量。 如:a0、a1、a2或b1,1、b1,2、b1,3、b2,1、b2,2、b2,3等。 在循環(huán)結(jié)構(gòu)中,通過(guò)變量控制其下標(biāo)值的變化(如ai、bi,j),達(dá)到變量輪換的目的。例如:循環(huán):從a0到a9 循環(huán):ai, i從0到931實(shí)施遞推的步驟實(shí)施遞推的步驟n確定遞推變量n遞推變量可以是簡(jiǎn)單變量,也可是一維或多維組合對(duì)象(數(shù)組)。n建立遞推關(guān)系n從變量的前一些值推出其下一個(gè)

17、值的公式或關(guān)系。這是解決遞推問(wèn)題的關(guān)鍵。n確定初始(邊界)條件n根據(jù)問(wèn)題最簡(jiǎn)單的情景確定其初始數(shù)據(jù)n對(duì)遞推過(guò)程進(jìn)行控制32遞推應(yīng)用舉例:楊輝三角形遞推應(yīng)用舉例:楊輝三角形33特點(diǎn): 第k行有k個(gè)數(shù); 每行的首尾兩數(shù)均為1; 除首尾兩數(shù)外,其余各數(shù)均為上一行肩上兩數(shù)之和。計(jì)算機(jī)中存儲(chǔ)34算法(偽代碼形式): 輸入n(楊輝三角形的行數(shù))。 設(shè)置二維數(shù)組an,n。 循環(huán)(i從1到n):對(duì)于每行的首尾數(shù)ai,1=1,ai,i=1(首尾兩數(shù)均為1)對(duì)于每行的其余數(shù)ai,j=ai-1,j-1+ai-1,j (i為行數(shù),j為該行中的列位置) 輸出:打印以上值(即二維數(shù)組an,n的值)。為打印出三角形形式,在

18、循環(huán)中需控制打印位置及換行,具體由程序設(shè)計(jì)語(yǔ)句控制。35n設(shè)置二維數(shù)組y(n,n), 根據(jù)構(gòu)成規(guī)律實(shí)施遞推:ny(i,j)=y(i-1,j-1)+y(i-1,j) i=3,4,n ;j=2,3,i-1n初始值:y(i,1)=y(i,i)=1 i=1,2,nn格式控制: 設(shè)置二重循環(huán)。外循環(huán)i控制行數(shù),內(nèi)循環(huán)j控制打印每行中數(shù)字。 (為了輸出左右對(duì)稱的數(shù)字三角形,用二個(gè)內(nèi)循環(huán),內(nèi)循環(huán)k控制每行前導(dǎo)空格,j控制打印每行中數(shù)字。)36n=int(input(n=)y= 0 for k in range(n+1) for k in range(n+1)for i in range(1,n+1): yi

19、1=1 yii=1for i in range(3,n+1): for j in range(2,i): yij=yi-1j-1+yi-1j#print formatfor i in range(1,n+1): for j in range(1,i+1): print( ,yij,end=) print()2.3.3 貪心算法n貪心算法(又稱貪婪算法)是指在問(wèn)題求解時(shí)總是作出當(dāng)前看是最好的選擇。n也就是說(shuō),不從整體最優(yōu)上加以考慮,它所做出的僅是在某種意義上的局部最優(yōu)解。n貪心算法不是對(duì)所有問(wèn)題都能得到整體最優(yōu)解,但對(duì)范圍相當(dāng)廣泛的許多問(wèn)題它能產(chǎn)生整體最優(yōu)解或者是整體最優(yōu)解的近似解。 37基本思

20、想n在買(mǎi)東西時(shí),售貨員常常計(jì)算最少需要找多少?gòu)埩沐X(qián),以便簡(jiǎn)化工作流程。n比如買(mǎi)東西需要48.5元,交給售貨員100元整,按照現(xiàn)在的貨幣體系,則售貨員最少需要找三張零鈔: 50元一張、 1元一張、 5角一張。n這就包含了貪心算法的基本思想。38貪心算法貪心算法的的求解求解策略策略:1)建立數(shù)學(xué)模型來(lái)描述問(wèn)題。)建立數(shù)學(xué)模型來(lái)描述問(wèn)題。 2)把求解的問(wèn)題分成若干個(gè)子問(wèn)題。)把求解的問(wèn)題分成若干個(gè)子問(wèn)題。 3)對(duì)每一子問(wèn)題求解,得到子問(wèn)題的局部最優(yōu))對(duì)每一子問(wèn)題求解,得到子問(wèn)題的局部最優(yōu)解。解。 4)把子問(wèn)題)把子問(wèn)題的局部最優(yōu)的局部最優(yōu)解解合成為原來(lái)合成為原來(lái)解問(wèn)題的解問(wèn)題的一個(gè)解。一個(gè)解。394

21、0【例2-3-8】最優(yōu)裝載問(wèn)題最優(yōu)裝載問(wèn)題n有n個(gè)集裝箱希望能裝上一艘載重量為C的輪船,其中集裝箱i的重量為Wi。由于載重量的限制,這些集裝箱不能全部裝船。在裝載體積不受限制的情況下,問(wèn)最多能裝載多少個(gè)集裝箱。載重受限,希望個(gè)數(shù)最多n最優(yōu)裝載問(wèn)題可用貪心算法求最優(yōu)解。其貪心選擇策略是:重量輕者優(yōu)先裝載。算法描述:算法描述: 對(duì)數(shù)組w由小到大排序(即重量輕者在前); residualc / residual存儲(chǔ)剩余載重量; 循環(huán)(i從1到n): 若wi residual : 輸出一個(gè)解 i residual residualwi 否則: 跳出循環(huán)41W 存儲(chǔ)每個(gè)集裝箱的重量C為船允許載重量,n為

22、集裝箱個(gè)數(shù)42【例2-3-9】活動(dòng)安排問(wèn)題活動(dòng)安排問(wèn)題設(shè)有n個(gè)活動(dòng)的集合S=1,2,n,其中每個(gè)活動(dòng)都要求使用同一資源,如演講會(huì)場(chǎng)等,但同一時(shí)間內(nèi)只有一個(gè)活動(dòng)能使用這一資源。怎樣安排才可以舉行盡可能多的活動(dòng)?是區(qū)間調(diào)度問(wèn)題,可用貪心算法有效求解先直觀分析:先直觀分析:先到先服務(wù)先到先服務(wù)?短活動(dòng)優(yōu)先短活動(dòng)優(yōu)先?早結(jié)束的活動(dòng)早結(jié)束的活動(dòng)優(yōu)先!優(yōu)先!43活動(dòng)安排討論數(shù)據(jù)n先到先服務(wù)?n(1,5),(2,3),(4,5)n短活動(dòng)優(yōu)先?n(1,5),(5,9),(4,6)點(diǎn)擊圖片返回分析分析n每個(gè)活動(dòng)都有使用的起始時(shí)間bi和結(jié)束時(shí)間ei (顯然biei)。對(duì)于活動(dòng)i和j,若biej或bjei(即一個(gè)活

23、動(dòng)結(jié)束后另一個(gè)才開(kāi)始),則活動(dòng)i與活動(dòng)j相容。n問(wèn)題即為:求相容的最大活動(dòng)集合。n示例數(shù)據(jù)(按結(jié)束時(shí)間排序)44利用貪心策略,可以對(duì)表中的活動(dòng)作如下選擇: 首先選取活動(dòng)1放入相容集合A,A:1。因?yàn)槠浣Y(jié)束時(shí)間最早。 而后在與活動(dòng)1相容的待定集合4,5,6,7,8,9中,選擇結(jié)束時(shí)間最早的活動(dòng)4 放入相容集合A,A:1,4。 再次在與活動(dòng)1和4都相容的待定集合7,8,9中,選擇結(jié)束時(shí)間最早的活動(dòng)7 放入相容集合A,A:1,4,7; 最后在待定集合中選擇與活動(dòng)1、4、7都相容的活動(dòng)9 放入相容集合A。得到最終的相容活動(dòng)安排1,4,7,9。4546活動(dòng)安排過(guò)程(時(shí)間分布圖)算法(偽代碼形式): 對(duì)所有活動(dòng)按結(jié)束時(shí)間的先后排序(早結(jié)束者在前)。 記錄第1個(gè)活動(dòng),并使j=1。 循環(huán)(i從2到n): 若第i個(gè)活動(dòng)的開(kāi)始時(shí)間第j個(gè)活動(dòng)的結(jié)束時(shí)間:記錄該第i個(gè)活動(dòng)j=i 輸出所有記錄的活動(dòng)。47n貪心算法要想找到最優(yōu)解,需要兩個(gè)條件

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論