




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
算法設(shè)計(jì)與分析——分治法2023/2/41算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)分治法(divide-and-conquer)
分治策略是一種用得最多的一種有效方法,它的基本思想將問題分解成若干子問題,然后求解子問題。子問題較原問題無疑是要容易些,由此得出原問題的解,就是所謂的“分而治之”的意思。分治策略還可以遞歸進(jìn)行,即子問題仍然可以用分治策略來處理,最后的問題是非?;径?jiǎn)單。下面舉幾個(gè)例子。2023/2/42算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)1.合并排序合并算法排序即屬于分治方法。合并(Merge)就是將兩個(gè)或多個(gè)有序表合并成一個(gè)有序表,例如下圖所示的兩個(gè)有序表經(jīng)合并運(yùn)算后得到一個(gè)有序表。我們?cè)诖酥挥玫絻蓚€(gè)有序表的合并,稱為二路并〔Two-waymerge)。2023/2/43算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)合并排序(Mergesort)就是利用這種合并過程進(jìn)行排序,即先將n個(gè)數(shù)據(jù)看成n個(gè)長度為l的表,將相鄰的表成對(duì)合并,得到長度為2的n/2個(gè)有序表;進(jìn)一步再將相鄰表成對(duì)會(huì)并,得到長度為4的n/4個(gè)有序表;……;如此重復(fù)做下去,直至所有數(shù)據(jù)均合并到一個(gè)長度為n的有序表為止,即完成排序。上述每一次的合并過程稱為一趟〔Pass),整個(gè)排序過程叫二路合并排序。下圖是二路合并排序過程的一個(gè)例子。2023/2/44算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)[7][15][13][10][4][20][19][8][7][15][10][13][4][20][8][19][7][10][13][15][4][8][19][20][4][7][8][10][13][15][19][20]2023/2/45算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)對(duì)于二路合并,如果數(shù)據(jù)個(gè)數(shù)n是2的整數(shù)次方,則所需的趟數(shù)為logn,例如n=8,logn=3,故共需三趟合并過程。如果n不是2的整數(shù)次方,則在每趟合并時(shí)表的數(shù)目不一定總是偶數(shù)個(gè)。若表的數(shù)目為奇數(shù),就剩下一個(gè)表要“輪空”,直接進(jìn)入下一趟。這樣,下一趟合并時(shí)此表的長度與其它的表將不相同,因此我們?cè)O(shè)計(jì)的合并過程,并不要求待合并的兩個(gè)表長度必須相同。二路合并排序的時(shí)間復(fù)雜性為O(nlogn),與堆排序及快速排序平均情況的時(shí)間復(fù)雜性同樣數(shù)量級(jí)。2023/2/46算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)2.在互不相同的n個(gè)數(shù){x1,x2,…,xn}中,找出最大和最小的數(shù)。若用普通的算法為:begin
xmax←x1;xmin←x1fori=2tondobeginifxmax<xithenxmax←xi
ifxmin>xithenxmin←xi
endend2023/2/47算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)此算法的比較次數(shù)為2(n-1)=2n-2,顯然不是最優(yōu)的。如果用分治法解決法,寫出遞歸過程為:過程MAXMIN(x1,x2,…,xn)(1)如n=1,則xmax←x1,xmin←x1(2)如n=2,則比較x1與x2,令大者為xmax,小者為xmin(3)如n>2,則調(diào)用MAXMIN(x1,…,x[n/2])調(diào)用MAXMIN(x[n/2]+1,…,xn)比較兩個(gè)最大值,令大者為xmax比較兩個(gè)最小值,令小者為xmin。2023/2/48算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)下面分析用此算法的比較次數(shù)。設(shè)T(n)表示元素個(gè)數(shù)為n時(shí)的總比較次數(shù),則T(1)=0,T(2)=1(n>2)為方便起見,設(shè)n=2r,問題的逐層劃分如下表所示:可以證明
T(n)=3n/2-2此值恰好等于問題的下界,故這是最優(yōu)算法。2023/2/49算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)其實(shí),此問題也不一定要用遞歸算法來解決,可將數(shù)據(jù)分成兩個(gè)一組的n/2組,第一組比較一數(shù),令大的為xmax,小的為xmin,以后各組比較三次,先兩個(gè)數(shù)據(jù)比較,其中大者再與xmax比,小者再與xmin比,總比較次數(shù)也恰為。2023/2/410算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)3.兩數(shù)相乘我們研究兩個(gè)n位二進(jìn)制數(shù)相乘的問題。假設(shè)兩個(gè)一位數(shù)相乘,兩個(gè)一位數(shù)相加和任何數(shù)移位一步所需運(yùn)算時(shí)間均為O(1),即均為常數(shù)。用普通的方法運(yùn)算,將乘數(shù)的每一位(由低位至高位)逐個(gè)去乘被乘數(shù),每乘一次將成積與原來的積相加,然后乘數(shù)和乘積移位一步,如此下去直至乘數(shù)的最高位運(yùn)算完即得出結(jié)果,這樣運(yùn)算共需n2次一位乘一位運(yùn)算,n(n-1)次一位加一位運(yùn)算和n次移位,總運(yùn)算復(fù)雜性為O(n2)。2023/2/411算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)2023/2/412算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)現(xiàn)在用分治法來做。設(shè)n=2r,將兩個(gè)數(shù)都按位數(shù)劃分成兩段,如圖所示,2023/2/413算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)這需要三次n位的加法,一次n步移位,一次n/2步移位和四次n/2位的乘法。2023/2/414算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)設(shè)用分治法做兩個(gè)n位數(shù)乘法的復(fù)雜性為T(n),因加法和移位都是O(n),故2023/2/415算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)這樣并沒有顯出其優(yōu)越性,我們可以將其進(jìn)一步改進(jìn),增加一些加法運(yùn)算以減少乘法運(yùn)算。2023/2/416算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)上式的4次乘法可以由3次完成。2023/2/417算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)增加的加減運(yùn)算只影響K1值,卻使乘法減為三次,為分析簡(jiǎn)單可近似認(rèn)為K2和K1相等,令K=K1=K2,則2023/2/418算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)2023/2/419算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)顯然較普通方法更有效。這種思想同樣可以用于十進(jìn)制數(shù)的乘法中。類似于上述兩個(gè)例子,可以看出,一般情況下采用分治解決法劃分子問題時(shí),使各子問題的規(guī)模盡量相等為好。此外,如果是逐層劃分,采用遞歸形式可以使程序簡(jiǎn)而明,分析起來也較為方便。2023/2/420算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)4.循環(huán)賽日程表分治法不僅可以用來設(shè)計(jì)算法,而且在其他方面也有廣泛應(yīng)用。例如可以用分治思想來設(shè)計(jì)電路、構(gòu)造數(shù)學(xué)證明等?,F(xiàn)舉一例加以說明。設(shè)有n=2k個(gè)運(yùn)動(dòng)員要進(jìn)行網(wǎng)球循環(huán)賽?,F(xiàn)要設(shè)計(jì)一個(gè)滿足以下要求的比賽日程表:(1)每個(gè)選手必須與其他n-1個(gè)選手各賽一次;(2)每個(gè)選手一天只能賽一次;(3)循環(huán)賽一共進(jìn)行n-1天。按此要求可將比賽日程表設(shè)計(jì)-成有n行和n-l列的一個(gè)表。在表中第i行和第j列處填入第i個(gè)選手在第j無所遇到的選手。2023/2/421算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)按分治策略,我們可以將所有選手對(duì)分為兩組,n個(gè)選手的比賽日程表就可以通過為n/2個(gè)選手設(shè)計(jì)的比賽日程表來決定。遞歸地用這種一分為二的策略對(duì)選手進(jìn)行分割,直到只剩下2個(gè)選手時(shí),比賽日程表的制定就變得很簡(jiǎn)單。這時(shí)只要讓這2個(gè)選手進(jìn)行比賽就可以了。下圖所列出的正方形表是4個(gè)選手的比賽日程表。其中左上角與左下角的兩小塊分別為選手1至選手2和選手3至選手4第1天的比賽日程。據(jù)此,將左上角小塊中的所有數(shù)字按其相對(duì)位置抄到右下角,將左下角小塊中的所有數(shù)字按其相對(duì)位置抄到右上角,這樣我們就分別安排好了選手1至選手2和選手3至選手4在后2天的比賽日程。這種安排是符合要求的。2023/2/422算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)4個(gè)選手的比賽日程表2023/2/423算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)依此思想容易將這個(gè)比賽日程表推廣到具有任意多個(gè)選手的情形。下表是8個(gè)選手的日程安排表。2023/2/424算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)5.矩陣乘積的Strassen算法
C=AB=(cij)n×n。求C=AB即對(duì)n2個(gè)元素cij進(jìn)行計(jì)算,故要作n3次乘法。相當(dāng)時(shí)間內(nèi)沒有人懷疑過是否可以用少于n3次乘法來完成。其實(shí)不然,先以n=2的矩陣乘積為例。對(duì)于矩陣2023/2/425算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)則有共需作8次乘法。2023/2/426算法設(shè)計(jì)與分析演示稿紀(jì)玉波制作(C)Strassen提出的算法如下:令P=(a11+a22)(b11+b22)Q=(a21+a22)b11R=a11(b12-b22)S=a22(b21-b11)T=(a11+a12)b22U=(a21-a11)(b11+b12)V=(a12-a22)(b21+b22)則
c11=P+S-T+Vc12=R+Tc21=Q+Sc22=P+R-Q+U乘法次數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 分公司授權(quán)合同范本
- 2025年鄉(xiāng)村旅游點(diǎn)土地使用權(quán)出租合同模板
- 房屋貸款抵押合同細(xì)則
- 新能源汽車購買與服務(wù)保障合同
- 回民買房合同范本
- 團(tuán)購出行合同范本
- 土建建材外貿(mào)合同范例
- 黑色金屬廢料資源化研究-深度研究
- 2025年標(biāo)準(zhǔn)建筑材料采購合同范例
- 出租土地建房合同范本
- 固態(tài)電池發(fā)展趨勢(shì)研究
- 2025年哈爾濱幼兒師范高等??茖W(xué)校單招職業(yè)技能測(cè)試題庫完整
- 2025-2030年中國鐵精粉市場(chǎng)發(fā)展?fàn)顩r及營銷戰(zhàn)略研究報(bào)告
- 做最勇敢的自己
- 《生活污水》課件
- 2025年大慶職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(名師系列)
- GB/T 23694-2024風(fēng)險(xiǎn)管理術(shù)語
- 2025年蕪湖職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 創(chuàng)辦民辦學(xué)校項(xiàng)目可行性論證報(bào)告
- 《中國象棋基礎(chǔ)教程》課件
- 大模型落地應(yīng)用實(shí)踐方案
評(píng)論
0/150
提交評(píng)論