計算機(jī)算法設(shè)計與第第章_第1頁
計算機(jī)算法設(shè)計與第第章_第2頁
計算機(jī)算法設(shè)計與第第章_第3頁
計算機(jī)算法設(shè)計與第第章_第4頁
計算機(jī)算法設(shè)計與第第章_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章回溯法1學(xué)習(xí)要點(diǎn)理解回溯法的深度優(yōu)先搜索策略。掌握用回溯法解題的算法框架(1)遞歸回溯(2)迭代回溯(3)子集樹算法框架(4)排列樹算法框架2通過應(yīng)用范例學(xué)習(xí)回溯法的設(shè)計策略。(1)裝載問題;(2)批處理作業(yè)調(diào)度;(3)符號三角形問題(4)n后問題;(5)0-1背包問題;(6)最大團(tuán)問題;(7)圖的m著色問題(8)旅行售貨員問題(9)圓排列問題(10)電路板排列問題(11)連續(xù)郵資問題3有許多問題,當(dāng)需要找出它的解集或者要求回答什么解是滿足某些約束條件的最佳解時,往往要使用回溯法?;厮莘ǖ幕咀龇ㄊ撬阉鳎蚴且环N組織得井井有條的,能避免不必要搜索的窮舉式搜索法。這種方法適用于解一些組合數(shù)相當(dāng)大的問題?;厮莘ㄔ趩栴}的解空間樹中,按深度優(yōu)先策略,從根結(jié)點(diǎn)出發(fā)搜索解空間樹。算法搜索至解空間樹的任意一點(diǎn)時,先判斷該結(jié)點(diǎn)是否包含問題的解。如果肯定不包含,則跳過對該結(jié)點(diǎn)為根的子樹的搜索,逐層向其祖先結(jié)點(diǎn)回溯;否則,進(jìn)入該子樹,繼續(xù)按深度優(yōu)先策略搜索?;厮莘?問題的解空間問題的解向量:回溯法希望一個問題的解能夠表示成一個n元式(x1,x2,…,xn)的形式。顯約束:對分量xi的取值限定。隱約束:為滿足問題的解而對不同分量之間施加的約束。解空間:對于問題的一個實(shí)例,解向量滿足顯式約束條件的所有多元組,構(gòu)成了該實(shí)例的一個解空間。注意:同一個問題可以有多種表示,有些表示方法更簡單,所需表示的狀態(tài)空間更?。ù鎯α可伲阉鞣椒ê唵危?。n=3時的0-1背包問題用完全二叉樹表示的解空間5生成問題狀態(tài)的基本方法擴(kuò)展結(jié)點(diǎn):一個正在產(chǎn)生兒子的結(jié)點(diǎn)稱為擴(kuò)展結(jié)點(diǎn)活結(jié)點(diǎn):一個自身已生成但其兒子還沒有全部生成的節(jié)點(diǎn)稱做活結(jié)點(diǎn)死結(jié)點(diǎn):一個所有兒子已經(jīng)產(chǎn)生的結(jié)點(diǎn)稱做死結(jié)點(diǎn)深度優(yōu)先的問題狀態(tài)生成法:如果對一個擴(kuò)展結(jié)點(diǎn)R,一旦產(chǎn)生了它的一個兒子C,就把C當(dāng)做新的擴(kuò)展結(jié)點(diǎn)。在完成對子樹C(以C為根的子樹)的窮盡搜索之后,將R重新變成擴(kuò)展結(jié)點(diǎn),繼續(xù)生成R的下一個兒子(如果存在)寬度優(yōu)先的問題狀態(tài)生成法:在一個擴(kuò)展結(jié)點(diǎn)變成死結(jié)點(diǎn)之前,它一直是擴(kuò)展結(jié)點(diǎn)回溯法:為了避免生成那些不可能產(chǎn)生最佳解的問題狀態(tài),要不斷地利用限界函數(shù)(boundingfunction)來處死那些實(shí)際上不可能產(chǎn)生所需解的活結(jié)點(diǎn),以減少問題的計算量。具有限界函數(shù)的深度優(yōu)先生成法稱為回溯法6回溯法的基本思想(1)針對所給問題,定義問題的解空間;(2)確定易于搜索的解空間結(jié)構(gòu);(3)以深度優(yōu)先方式搜索解空間,并在搜索過程中用剪枝函數(shù)避免無效搜索。常用剪枝函數(shù):用約束函數(shù)在擴(kuò)展結(jié)點(diǎn)處剪去不滿足約束的子樹;用限界函數(shù)剪去得不到最優(yōu)解的子樹。用回溯法解題的一個顯著特征是在搜索過程中動態(tài)產(chǎn)生問題的解空間。在任何時刻,算法只保存從根結(jié)點(diǎn)到當(dāng)前擴(kuò)展結(jié)點(diǎn)的路徑。如果解空間樹中從根結(jié)點(diǎn)到葉結(jié)點(diǎn)的最長路徑的長度為h(n),則回溯法所需的計算空間通常為O(h(n))。而顯式地存儲整個解空間則需要O(2h(n))或O(h(n)!)內(nèi)存空間。7遞歸回溯回溯法對解空間作深度優(yōu)先搜索,因此,在一般情況下用遞歸方法實(shí)現(xiàn)回溯法。voidbacktrack(intt){

if(t>n)output(x);

elsefor(inti=f(n,t);i<=g(n,t);i++){x[t]=h(i);if(constraint(t)&&bound(t))backtrack(t+1);}}8迭代回溯采用樹的非遞歸深度優(yōu)先遍歷算法,可將回溯法表示為一個非遞歸迭代過程。voiditerativeBacktrack(){intt=1;

while(t>0){

if(f(n,t)<=g(n,t))for(inti=f(n,t);i<=g(n,t);i++){x[t]=h(i);

if(constraint(t)&&bound(t)){

if(solution(t))output(x);

elset++;}}

elset--;}}9子集樹與排列樹遍歷子集樹需O(2n)計算時間遍歷排列樹需要O(n!)計算時間voidbacktrack(intt){if(t>n)output(x);elsefor(inti=0;i<=1;i++){x[t]=i;if(legal(t))backtrack(t+1);}}voidbacktrack(intt){if(t>n)output(x);elsefor(inti=t;i<=n;i++){swap(x[t],x[i]);if(legal(t))backtrack(t+1);swap(x[t],x[i]);}}10裝載問題有一批共n個集裝箱要裝上2艘載重量分別為c1和c2的輪船,其中集裝箱i的重量為wi,且裝載問題要求確定是否有一個合理的裝載方案可將這個集裝箱裝上這2艘輪船。如果有,找出一種裝載方案。容易證明,如果一個給定裝載問題有解,則采用下面的策略可得到最優(yōu)裝載方案。(1)首先將第一艘輪船盡可能裝滿;(2)將剩余的集裝箱裝上第二艘輪船。將第一艘輪船盡可能裝滿等價于選取全體集裝箱的一個子集,使該子集中集裝箱重量之和最接近。由此可知,裝載問題等價于以下特殊的0-1背包問題。用回溯法設(shè)計解裝載問題的O(2n)計算時間算法。在某些情況下該算法優(yōu)于動態(tài)規(guī)劃算法。11裝載問題解空間:子集樹可行性約束函數(shù)(選擇當(dāng)前元素):上界函數(shù)(不選擇當(dāng)前元素):當(dāng)前載重量cw+剩余集裝箱的重量r當(dāng)前最優(yōu)載重量bestwvoidbacktrack(inti){//搜索第i層結(jié)點(diǎn)

if(i>n)//到達(dá)葉結(jié)點(diǎn)更新最優(yōu)解bestx,bestw;return;r-=w[i];

if(cw+w[i]<=c){//搜索左子樹

x[i]=1;cw+=w[i];

backtrack(i+1);cw-=w[i];}

if(cw+r>bestw){x[i]=0;//搜索右子樹

backtrack(i+1);}r+=w[i];}12批處理作業(yè)調(diào)度給定n個作業(yè)的集合{J1,J2,…,Jn}。每個作業(yè)必須先由機(jī)器1處理,然后由機(jī)器2處理。作業(yè)Ji需要機(jī)器j的處理時間為tji。對于一個確定的作業(yè)調(diào)度,設(shè)Fji是作業(yè)i在機(jī)器j上完成處理的時間。所有作業(yè)在機(jī)器2上完成處理的時間和稱為該作業(yè)調(diào)度的完成時間和。批處理作業(yè)調(diào)度問題要求對于給定的n個作業(yè),制定最佳作業(yè)調(diào)度方案,使其完成時間和達(dá)到最小。tji機(jī)器1機(jī)器2作業(yè)121作業(yè)231作業(yè)323這3個作業(yè)的6種可能的調(diào)度方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;它們所相應(yīng)的完成時間和分別是19,18,20,21,19,19。易見,最佳調(diào)度方案是1,3,2,其完成時間和為18。13批處理作業(yè)調(diào)度解空間:排列樹voidFlowshop::Backtrack(inti){if(i>n){for(intj=1;j<=n;j++)bestx[j]=x[j];bestf=f;}elsefor(intj=i;j<=n;j++){f1+=M[x[j]][1];f2[i]=((f2[i-1]>f1)?f2[i-1]:f1)+M[x[j]][2];f+=f2[i];if(f<bestf){Swap(x[i],x[j]);Backtrack(i+1);Swap(x[i],x[j]);}f1-=M[x[j]][1];f-=f2[i];}}classFlowshop{friendFlow(int**,int,int[]);private:voidBacktrack(inti);int**M,//各作業(yè)所需的處理時間*x,//當(dāng)前作業(yè)調(diào)度*bestx,//當(dāng)前最優(yōu)作業(yè)調(diào)度*f2,//機(jī)器2完成處理時間

f1,//機(jī)器1完成處理時間

f,//完成時間和

bestf,//當(dāng)前最優(yōu)值

n;//作業(yè)數(shù)};14符號三角形問題++-+-+++----+-+++--++--+---+下圖是由14個“+”和14個“-”組成的符號三角形。2個同號下面都是“+”,2個異號下面都是“-”。在一般情況下,符號三角形的第一行有n個符號。符號三角形問題要求對于給定的n,計算有多少個不同的符號三角形,使其所含的“+”和“-”的個數(shù)相同。15符號鑰三角穴形問完題解向量:用n元組x[箏1:年n]表示脅符號張三角仗形的韻第一鐵行??尚谐中约s牽束函屬數(shù):導(dǎo)當(dāng)前淋符號本三角雨形所商包含惰的“+”個數(shù)必與“-”個數(shù)霧均不奇超過n*協(xié)(n全+1殖)/車4無解漂的判連斷:n*獎(n紗+1昏)/凍2為奇沈數(shù)vo目idTr眠ia勁ng乎le為::Ba您ck軍tr濤ac檔k(i紛ntt){if就(寸(c聲ou惰nt宋>ha冤lf唇)|師|(御t*(泛t-盟1)鑼/2翻-c拘ou恥nt蒙>h關(guān)al作f)節(jié))哲re逆tu驢rn表;if煩(憲t>放n)徒s腐um曉++子;el死sefo監(jiān)r桑(in潔ti=細(xì)0;斥i<鉗2;糠i+叢+)貞{p[基1]相[t弱]=椒i;co醉un設(shè)t+辟=i座;fo蹄r詢(in想tj=哨2;柏j<司=t;鹿j++崗)爽{p[熟j]薪[t上-j禾+1性]=瞇p[較j-炒1]字[t韻-j帶+1胡]^差p[予j-扒1]孕[t想-j襪+2愈];co容un奶t+封=p糞[j座][桃t-化j+底1]腦;}Ba姻ck妨tr腰ac急k(刷t+壩1)寬;fo曲r純(in巷tj=今2;延j<銷=t;喬j++檔)co誓un州t-瀉=p乓[j鮮][鐵t-務(wù)j+筋1]涉;co婦un剛t-背=i猜;}}+軟+嗽-合+臘-邪+染++愛-庸-酒-勸-贊+-桐+臺+陷+薦--讓+疏+燈--加+奶--焰-+復(fù)雜卸度分敏析計算民可行正性約雜束需互要O別(n男)時椒間,吩在最個壞情伸況下豪有O(繼2n)個濫結(jié)點(diǎn)伶需要萄計算克可行棵性約衡束,餡故解茫符號殃三角蘋形問狗題的玩回溯牢算法策所需塔的計毀算時笑間為念O養(yǎng)(n牽2n)。16n后問其題在n×纏n格的飄棋盤窩上放柱置彼尺此不鳴受攻慎擊的n個皇塘后。饅按照咱國際幣象棋帶的規(guī)宮則,紡皇后凈可以伶攻擊托與之壇處在澤同一隆行或循同一偏列或延同一怨斜線屬上的忍棋子劍。n后問腫題等廢價于者在n×彎n格的謠棋盤野上放吩置n個皇煮后,菜任何2個皇祥后不辣放在誕同一希行或振同一樂列或純同一陡斜線限上。1234567812345678QQQQQQQQ17解向牛量:(x1,判x2,吐…紙,xn)顯約我束:xi=1癢,2乏,寇…竊,n隱約們束:1)不同頁列:xixj2)不處稠于同榆一正砍、反問對角雪線:|i-床j||xi-xj|n后問臺題bo測olQu撫ee陶n:額:Pl奶ac趴e(i國ntk){fo云r繩(in趴tj=義1;易j<k;絮j++肌)if沉(幣(ab后s(稿k-折j)=啊=ab搏s(道x[薄j]嚇-x寇[k正])模)|糧|(脹x[兵j]=凝=x[見k])層)字re括tu想rn危f并al波se齡;re季tu少rn相t舞ru效e;}vo得idQu領(lǐng)ee罰n:杏:Ba的ck跳tr規(guī)ac北k(i族ntt){if躲(順t>把n)促s膨um型++禾;el走sefo辣r宰(in愿ti=霞1;乏i<組=n;躲i++窗)盲{x[假t]=呀i;if埋(Pl風(fēng)ac劉e(沙t))沾B箏ac諒kt而ra圣ck窯(t繡+1某);}}180-惰1背呈包問黎題解空部間:皇子集宏樹可行覽性約珍束函勤數(shù):上界調(diào)函數(shù)漫:te桐mp蓮la窄te種<c罰la唐ssTy催pe安w,鋸cl移as塔sTy乓pe本p>Ty腦pe辭pKn菜ap慈<Ty握pe慢w,Ty餅pe披p>:慶:Bo謠un炕d(i囑nti){/單/計算騎上界Ty止pe鈔wcl殿ef掉t勁=棟c撒-cw;可/煎/剩余清容量Ty灘pe城pb予=落cp遲;//以物暢品單商位重?fù)屏績r擋值遞堂減序觀裝入堆物品wh壓il云e夏(i欠<朗=梳n您&&w[衡i]菠<=將c緊le圓ft秧)億{cl泛ef遺t勾-=w[猶i];b源+=p[觸i];i+奇+;}//裝滿仍背包if皮(塔i耀<=絨n侮)仔b冷+=p[稿i]甘/w莊[i]凝*報cl框ef罷t;re梁tu飽rn懶b扇;}19最大猴團(tuán)問營題給定哪無向綠圖G=灑(V,E)。如恒果UV,且魚對任系意u,vU有(u,v)E,則態(tài)稱U是G的完全靈子圖。G的完章全子美圖U是G的團(tuán)芳當(dāng)且隨僅當(dāng)U不包粗含在G的更饑大的昨完全問子圖更中。G的最大肺團(tuán)是指G中所葛含頂染點(diǎn)數(shù)哄最多曬的團(tuán)惹。如果UV且對喊任意u,vU有(u,v)E,則餡稱U是G的空子毫圖。G的空察子圖U是G的獨(dú)立恥集當(dāng)且襲僅當(dāng)U不包塌含在G的更毫大的憲空子掏圖中璃。G的最大要獨(dú)立持集是G中所撞含頂階點(diǎn)數(shù)屋最多幅的獨(dú)習(xí)立集群。對于到任一晶無向多圖G=寒(V,E)其補(bǔ)圖G=(悟V1,E1脖)定義旱為:V1續(xù)=V,且(u,v)E1當(dāng)且春僅當(dāng)(u,v)E。U是G的最隱大團(tuán)億當(dāng)且惠僅當(dāng)U是G的最吉大獨(dú)渠立集勻。124531245320最大章團(tuán)問吊題解空叫間:懸子集估樹可行剩性約掃束函妹數(shù):神頂點(diǎn)i到已殲選入污的頂槽點(diǎn)集蹦中每優(yōu)一個絡(luò)頂點(diǎn)貞都有沃邊相貪連。上界劑函數(shù)鵝:有踢足夠菊多的犯可選碧擇頂鬼點(diǎn)使堪得算伴法有蔑可能消在右絕子樹汽中找作到更姑大的旋團(tuán)。vo宇idCl梳iq選ue瓜::Ba輕ck憐tr達(dá)ac重k(i隙nti){/謎/計算艘最大治團(tuán)if渣(馳i洞>泡n)獻(xiàn){撈//到達(dá)剪葉結(jié)旦點(diǎn)fo終r雖(in千tj花=民1;妹j否<松=攝n;澤j貝++才)be蠟st辨x[志j]忠=x[塑j];be都st悉n=cn;匪re帖tu毛rn既;}//檢查雕頂點(diǎn)i與當(dāng)摩前團(tuán)襯的連五接in圣tOK盆=銅1圾;fo污r盞(in絲式tj絲式=毛1;勻j餃<蜻i纖;梨j+末+)if載(x[敵j]嘗&&a[凍i]皮[j]浙==象0套)凳{//柿i與j不相絲式連OK倍=初0張;壇b驅(qū)re量ak謙;}if及(出OK槐)亭{/餐/進(jìn)入拘左子鏈樹x[決i]濁=泡1;cn++乎;Ba威ck耕tr忠ac潤k(匪i+脹1)信;x[故i]職=叼0;cn--犬;}if便(cn+近n仿-粱i罩>be毛st晴n)普{(diào)/員/進(jìn)入顛右子怒樹x[托i]紹=境0;Ba刃ck威tr抵ac顆k(誓i+盡1)穿;}}復(fù)雜打度分素析最大泄團(tuán)問邊題的魂回溯線算法ba衛(wèi)ck芽tr父ac痕k所需色的計怎算時皮間顯魔然為O(婦n2n)。1245321進(jìn)一曲步改拋進(jìn)選擇跟合適避的搜訓(xùn)索順殲序,可家以使叨得上飯界函評數(shù)更捷有效辱的發(fā)厘揮作意用。北例如千在搜暴索之宣前可蠻以將陣頂點(diǎn)例按度黑從小客到大航排序生。這狂在某軌種意謹(jǐn)義上桂相當(dāng)盒于給濫回溯霧法加飼入了碑啟發(fā)取性。定義Si={已vi,vi+群1,.府..顛,vn},依鑒次求悼出Sn,Sn-天1,.肚..犬,S1的解順。從過而得屯到一槳個更精瞎確的每上界膨函數(shù),若cn庫+Si<=帆ma缺x則剪液枝。鋼同時廁注意父到:架從Si+集1到Si,如惡果找堵到一率個更眠大的幸團(tuán),聲那么vi必然放屬于倡找到汁的團(tuán)孔,此甘時有Si=Si+伙1+1,否勿則Si=Si+此1。因此破只要ma穿x的值繳被更恭新過匙,就拳可以陪確定毛已經(jīng)樸找到疊最大喘值,輩不必個再往弊下搜震索了爺。22圖的m著色圣問題給定趴無向怨連通漠圖G和m種不點(diǎn)同的切顏色表。用大這些收顏色疾為圖G的各遣頂點(diǎn)陽著色梁,每癢個頂弦點(diǎn)著失一種答顏色奴。是奮否有兇一種蹲著色派法使G中每滑條邊盞的2個頂贊點(diǎn)著迅不同壓顏色船。這閥個問臭題是鳴圖的m可著酸色判餅定問鐵題。循若一哄個圖亂最少勞需要m種顏萍色才凱能使殊圖中巧每條謙邊連繼接的2個頂刊點(diǎn)著元不同桑顏色潛,則沃稱這憶個數(shù)m為該牽圖的鬧色數(shù)礎(chǔ)。求透一個雅圖的斜色數(shù)m的問霸題稱賣為圖億的m可著蘋色優(yōu)偶化問剪題。23解向拿量:(x1,乏x2,靜…嚴(yán),xn)表示及頂點(diǎn)i所著幣顏色x[摔i]可行軟性約困束函鋪數(shù):跡頂點(diǎn)i與已鏡著色竭的相巖鄰頂巧點(diǎn)顏親色不弦重復(fù)固。圖的協(xié)m著祖色問繞題vo釋idCo寧lo皆r:篩:Ba鋪ck答tr敘ac孤k(i代ntt){if玻(屢t>犧n)丙{su敬m+商+;fo婆r籌(in黃ti=另1;稿i轟<=杜n;侄i些++晉)co裹ut<<x[會i]山<<探'薯'疼;co鋸ut<<en疏dl;}el嚴(yán)sefo耳r師(in濾ti=嚼1;珍i<脅=m;眉i++江)鴉{x[青t]=聯(lián)i;if恥(Ok料(t))略B顛ac勒kt纏ra崗ck朱(t蝕+1搭);}}bo踢olCo軌lo害r:注:Ok(i落ntk){/修/檢查瞇顏色抖可用舍性fo便r倘(in槳tj=腹1;僑j<諒=n;哨j++妖)if姨(增(a[倉k]濫[j]=夾=1華)&食&(跳x[部j]卷==x[拉k])稱)傻re涼tu君rn辰f待al胡se拜;re五tu袖rn精t慶ru夢e;}復(fù)雜度分析圖m可著色問題的解空間樹中內(nèi)結(jié)點(diǎn)個數(shù)是對于每一個內(nèi)結(jié)點(diǎn),在最壞情況下,用ok檢查當(dāng)前擴(kuò)展結(jié)點(diǎn)的每一個兒子所相應(yīng)的顏色可用性需耗時O(mn)。因此,回溯法總的時間耗費(fèi)是24旅行掌售貨芽員問偉題解空凝間:舅排列裁樹te遍mp片la今te出<c串la哪ss養(yǎng)T增yp弟e>vo土id率T輝ra象ve沃li租ng體<T憐yp融e>錯::Ba怖ck飛tr農(nóng)ac過k(i板nti){if旨(趨i額==磚n丟)暖{if緣瑞(研a[上x[括n-包1]歐][爸x[步n]廳]聚!=No撫Ed虎ge&&唯a維[x逆[n羅]]鍋[1香]鍋!=No膠Ed掘ge&&(c苦c既+籌a[涼x[旬n-皇1]抵][篩x[膠n]秩]某+綁a[特x[祥n]捏][娃1]蜂<be捕st允c||be析st網(wǎng)c==No鳥Ed挽ge))武{fo霜r讓(in俯tj只=燈1;濃j悟<臟=害n;憤j煌++失)be脹st棵x[友j]怠=x[漲j];be餃st虛c=慈cc今+慶a雀[x副[n共-1慈]]允[x聲[n革]]逆+蝕a情[x悔[n搭]]比[1粒];燈}}el心se窮{fo愉r朵(in絹tj凱=膽i;宿j臨<鉛=覺n;蛾j騾++爛)//是否陷可進(jìn)鐮入x[獨(dú)j]子樹?if備(長a[渾x[霞i-烏1]河][欄x[肺j]圈]簽!=No云Ed傷ge&&(c分c難+腳a[挨x[憂i-箱1]照][獅x[撐i]需]久<be煉st混c||be宴st望c==No繼Ed們ge))棍{//搜索背子樹Sw勸ap爬(x醉[i],x[勤j])壓;cc鹿+咐=圾a[僚x[篇i-省1]觸][望x[井i]除];Ba糊ck凝tr鋸ac差k(賓i+塵1)騾;cc誼-廢=宗a[鉤x[碑i-室1]功][盈x[擋i]杜];Sw綱ap鈔(x議[i],x[稱j])污;}}}復(fù)雜壯度分基析算法ba眉ck俊tr喂ac醬k在最行壞情頸況下帽可能虜需要杏更新拍當(dāng)前錯最優(yōu)裹解O(松(n你-1翼)!庸)次,裹每次烤更新be晚st跟x需計鋤算時董間O(浩n),從達(dá)而整扮個算漆法的脆計算乳時間洋復(fù)雜萄性為O(診n!)。25圓排奔列問企題給定n個大約小不檢等的付圓c1芝,c否2,宗…,cn,現(xiàn)絕要將壁這n個圓吹排進(jìn)揪一個糕矩形龜框中趟,且桶要求婆各圓眼與矩扎形框格的底塊邊相杏切。哈圓排閑列問芹題要傷求從n個圓凈的所纏有排蝦列中擴(kuò)找出有有最商小長姑度的懶圓排占列。床例如碼,當(dāng)n=瘡3,且盛所給扯的3個圓暗的半曉徑分災(zāi)別為1,1,2時,枯這3個圓餃的最曲小長與度的泥圓排銳列如罵圖所介示。曲其最蔑小長坑度為26圓排覺列問餓題fl超oa譽(yù)tCi符rc職le踩::Ce術(shù)nt測er(i圓ntt){/耗/計算涼當(dāng)前溪所選追擇圓配的圓賄心橫島坐標(biāo)fl憲oa癢t贊te雞mp瓣=0織;fo挽r冬(in窮tj=今1;丹j<t;毅j++非)丸{fl葵oa甩tva禁lu木ex=x照[j只]+妖2.濱0*sq跑rt烘(r管[t]*r[未j])于;if迫(va端lu露ex>t并em梁p)脹t紹em席p=va境lu承ex;}re跑tu然rn煮t專em顛p;}vo紋idCi菜rc狀le枯::Co宜mp楚ut保e(v曾oi寨d){/某/計算烘當(dāng)前叢圓排掌列的第長度fl攀oa哪t甘lo廟w=徑0,hi菌gh會=0渡;fo后r五(in秤ti=侄1;價i<炮=n;另i++索)額{if落(x[濟(jì)i]代-r恥[i]<仔l(wèi)o腰w)若l址ow辛=x[爺i]冶-r莫[i];if佩(x[阻i]僅+r午[i]>司hi醬gh汗)禾hi者gh痕=x[冤i]罵+r垂[i];}if始(模hi背gh偵-l晝ow務(wù)<m楊in器)摟mi嗎n=怪hi現(xiàn)gh愿-l因ow當(dāng);}vo害idCi養(yǎng)rc富le竹::Ba睡ck懇tr趙ac蜘k(i沾ntt){if攤(距t>白n)噴C欄om濱pu勺te拜()深;el擊sefo父r嫁(in羞tj頁=趨t;未j法<庭=可n;慌j廣++安)鎖{Sw態(tài)ap革(r僅[t],r[外j])辟;fl坊oa鴿tce扒nt肝er陸x=Ce嶄nt計er初(t);if叛(門ce韻nt矩er蝴x+悔r[笑t]載+r麥[1滿]<驗(yàn)mi鐵n)關(guān){萍//下界原約束x[昌t]=ce寫nt乳er饑x;Ba拜ck蓮tr馬ac德k(曉t+喬1)當(dāng);}Sw話ap信(r勿[t],r[轎j])療;}}復(fù)雜虹度分廉析由于舌算法ba遲ck北tr外ac灑k在最扮壞情蹄況下仁可能幣需要偽計算O(彼n!)次當(dāng)躁前圓貢排列欄長度瘋,每閑次計歲算需O(揮n)計算造時間澆,從抗而整駱個算迎法的虜計算恒時間月復(fù)雜密性為O(爭(n襪+1呼)!像)上述蕉算法蓄尚有播許多雕改進(jìn)幅的余踢地。霧例如固,象1,翼2,嶼…,像n-扎1,蛇n和n,掏n-脅1,盆…涂,2花,1這種薄互為蠅鏡像肝的排舅列具洽有相有同的酷圓排挑列長董度,子只計吃算一爪個就滑夠了循,可尿減少寇約一砌半的妥計算形量。君另一峽方面重,如案果所飼給的n個圓鏡中有k個圓輕有相鐮同的鏡半徑艘,則職這k個圓媽產(chǎn)生殼的k!個完塘全相細(xì)同的擠圓排桂列,挽只計拆算一蠻個就豪夠了由。27連續(xù)驕郵資基問題假設(shè)超國家鵝發(fā)行顛了n種不革同面宜值的零郵票呼,并窄且規(guī)芬定每抖張信耍封上荒最多狗只允姑許貼m張郵泛票。騙連續(xù)走郵資省問題瘦要求咐對于殺給定誦的n和m的值巨,給懲出郵打票面圾值的昆最佳裕設(shè)計腎,在1張信扛封上竟可貼才出從作郵資1開始盈,增近量為1的最所大連撕續(xù)郵肺資區(qū)腎間。例如叨,當(dāng)n=侵5和m=仁4時,讓面值攤為(1顯,3跨,1按1,馳15咐,3鍵2)的5種郵辨票可綱以貼貿(mào)出郵閃資的拔最大創(chuàng)連續(xù)早郵資役區(qū)間音是1到70。28連續(xù)豬郵資粥問題解向失量:叮用n元組x[猴1:舞n]表示n種不茫同的冷郵票毀面值惡,并換約定舍它們色從小異到大狼排列餃。x[劑1]吸=1是唯產(chǎn)一的嶺選擇呀。可行慣性約害束函太數(shù):謀已選口定x[將1:滅i-姥1],最留大連蟲續(xù)郵廢資區(qū)吩間是[1嘗:r漲],接景下來x[傾i]的可乏取值屬范圍劈燕是[x首[i擁-1躬]

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論