算法設(shè)計(jì)與分析-迭代法1_第1頁
算法設(shè)計(jì)與分析-迭代法1_第2頁
算法設(shè)計(jì)與分析-迭代法1_第3頁
算法設(shè)計(jì)與分析-迭代法1_第4頁
算法設(shè)計(jì)與分析-迭代法1_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

算法設(shè)計(jì)與分析

DesignandAnalysisofAlgorithms122023/11/21第三章迭代法主要內(nèi)容3==簡單地迭代運(yùn)算==迭代(輾轉(zhuǎn)法) 是一種不斷用變量地舊值遞推新值地過程分類精確迭代 楊輝三角,內(nèi)存移動(dòng)算法等近似迭代二分法與牛頓迭代法等設(shè)計(jì)方法確定迭代模型控制迭代過程2023/11/214例三-一輸出如圖所示地楊輝三角形。一一一一二一一三三一一四六四一……………(一)楊輝三角形一一一一二一一三三一一

四六四一……………(二)楊輝三角形存儲(chǔ)格式問題分析存儲(chǔ):A[n,n]矩陣矩陣:A={a零,零,a一,零,a一,一,…,ai,零,…,ai,i,…,an-一,n-一}元素之間地關(guān)系:ai,j=ai-一,j-一+ai-一,j==簡單地迭代運(yùn)算==2023/11/215例三-一輸出如圖所示地楊輝三角形。==簡單地迭代運(yùn)算==一一一一二一一三三一一

四六四一……………(二)楊輝三角形存儲(chǔ)格式算法設(shè)計(jì)與描述輸入:n輸出:楊輝三角Yanghui(n){a[零,零]一,a[一,零]一,a[一,一]一;fori二ton-一do{a[i,零]一;a[i,i]一;forj一toi-一doa[i,j]a[i-一,j-一]+a[i-一,j];}output(a);}算法分析(一)輸入n,規(guī)模為n(二)核心操作:a[i,j]a[i-一,j-一]+a[i-一,j]地加法運(yùn)算及兩邊地值;(三)依據(jù)定理二.五算法地時(shí)間復(fù)雜度為T(n)==Θ(n二)2023/11/216一一一一二一一三三一一

四六四一……………楊輝三角與斐波那契數(shù)列F(零)=一F(一)=一F(二)=二F(三)=三F(四)=五==簡單地迭代運(yùn)算==關(guān)于楊輝三角靚麗地Fibonacciai/ai-一2023/11/217==簡單地迭代運(yùn)算==靚麗地Fibonacci2023/11/218例三-二穿越沙漠問題問題分析==簡單地迭代運(yùn)算==用一輛吉普車穿越一零零零公里地沙漠。吉普車地總裝油量為五零零升,耗油率為一升/公里。由于沙漠沒有油庫,需要先用這輛車在沙漠建立臨時(shí)油庫。該吉普車以最少地耗油量穿越沙漠,應(yīng)在什么地方建油庫,以及各處地貯油量。?km終點(diǎn)?L起點(diǎn)五零零km五零零L第一加油站一零零零L五零零/三km第二加油站一五零零L五零零/五km第三加油站2023/11/219例三-二穿越沙漠問題問題分析==簡單地迭代運(yùn)算==計(jì)算模型設(shè)起點(diǎn)到終點(diǎn)距離為distance,終點(diǎn)到加油站地距離為dis,加油站地油量為oil,加油站編號(hào)為n,計(jì)算模型如下:?km終點(diǎn)?L起點(diǎn)五零零km五零零L第一加油站一零零零L五零零/三km第二加油站一五零零L五零零/五km第三加油站2023/11/2110例三-二穿越沙漠問題==簡單地迭代運(yùn)算==算法分析問題規(guī)模:distance與n核心語句:求加油站距離,規(guī)律如下:五零零+五零零/三+五零零/五+……+五零零/二*n-一=distance可得如下公式:

===O(logn)2023/11/2111==簡單地迭代運(yùn)算==思考題: 猴子吃桃問題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè),第二天早上又將剩下地桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃前一天剩下地一半零一個(gè)。到第一零天早上想再吃時(shí),見只剩下一個(gè)桃子了。求第一天摘多少個(gè)桃子2023/11/2112例三-三內(nèi)存移動(dòng)問題問題分析建立存原序列地?cái)?shù)組a[n]與移位后數(shù)列b[n],b[(k+i)modn]=a[i],i∈[零,n-一]時(shí)間漸近復(fù)雜度O(n),空間漸近復(fù)雜度O(二*n)(二)建立存原序列地?cái)?shù)組a[n]與臨時(shí)變量tmp,令tmp=a[n-一]a[n-一]=a[n-二]a[n-i]=a[n-i-一],i∈[一,n-一]時(shí)間漸近復(fù)雜度O(k*n),空間漸近復(fù)雜度O(n+一)=O(n)==簡單地迭代運(yùn)算==數(shù)組有n個(gè)數(shù)據(jù),要將它們順序循環(huán)向后移k位,即前面地元素向后(右)移k位,后面地元素則循環(huán)向前移k位,例:零,一,二,三,四,五循環(huán)移三位后為:三,四,五,零,一,二??紤]到n會(huì)很大,不允許用二*n及以上個(gè)空間來完成此題。2023/11/2113例三-三內(nèi)存移動(dòng)問題問題分析若n=五,k=三時(shí),零,一,二,三,四移動(dòng)三位后為二,三,四,零,一,一輪移動(dòng)恰好完任務(wù)(零三一四二零)。若n=六,k=三時(shí),零,一,二,三,四,五移動(dòng)三位后為三,四,五,零,一,二,用三輪移動(dòng)完任務(wù)(零三零,一四一,二五二)。==簡單地迭代運(yùn)算==數(shù)組有n個(gè)數(shù)據(jù),要將它們順序循環(huán)向后移k位,即前面地元素向后(右)移k位,后面地元素則循環(huán)向前移k位xi=(i+k)modn(三-一)移動(dòng)地輪數(shù):n與k地最大公約數(shù)Q每輪移動(dòng)地元素?cái)?shù)量:n/Q2023/11/2114例三-三內(nèi)存移動(dòng)問題設(shè)數(shù)列元素個(gè)數(shù)為n,向右移動(dòng)次數(shù)為k,位置編號(hào)為零,一,二,…,i,…,n-一。則按照式(三-一)計(jì)算位置:Loc一:x一=(x零+k)modn,設(shè)商為y零,x一=k+x零-n*y零;Loc二:x二=(x一+k)modn,設(shè)商為y一,x二=二*k+x零-n*(y零+y一);……按上述規(guī)律,可得下式:xi=(x零+i*k-n*(y零+y一+…+yi-一))modn(三-二)由式(三-二)得xi=(x零+i*k)modn設(shè)第i次連續(xù)移動(dòng)后,回到初始位置,則有必有xi=(x零+i*k)modn=x零(三-三)設(shè)第p輪連續(xù)移動(dòng)地起始位置為xp,則有:xi=(xp+i*k)modn=xp(三-四)==簡單地迭代運(yùn)算==必有:i*kmodn=零成立實(shí)踐經(jīng)驗(yàn)告訴我們,不一定要移動(dòng)完成2023/11/2115例三-三內(nèi)存移動(dòng)問題==簡單地迭代運(yùn)算==因有:i*kmodn=零成立可設(shè):i*k/n=yi*k=n*y設(shè)k與n地最大公約數(shù)Q,則有k=a*Q,n=b*Q,可得k/n=y/i=a*Q/b*Q=a/b,a,b互質(zhì)。i為最小移動(dòng)次數(shù),必滿足i=b?!鄋=i*Q∴i=n/Q計(jì)算模型(一)求最大公約數(shù)—?dú)W幾里得定理,當(dāng)r≠零時(shí),有

(二)令q=b,移動(dòng)次數(shù):i=n/q(三)計(jì)算元素移動(dòng)位置:m=(m+k)modn2023/11/2116例三-三內(nèi)存移動(dòng)問題==簡單地迭代運(yùn)算==xp=(xp-一+i*k)modn算法地改觀察實(shí)例n=六,k=三,第一輪循環(huán)為零-三-零,執(zhí)行過程為:tmp零,m零;i零,m三,s三,a[三]零,tmp三;i一,m零,s零,a[零]三,tmp零。2023/11/2117例三-三內(nèi)存移動(dòng)問題==簡單地迭代運(yùn)算==jn/q-一;p一(i+j*k)modn;tmpa[p一];for(jj-一;j>=零;j--){p二(i+j*k)modn;a[p一]=a[p二];p一=p二;}a[p二]=tmp;改后地實(shí)例執(zhí)行過程為:i一,p一三,tmp三;i零,p二零,a[三]零;a[零]三。算法地改未改為:tmp零,m零;i零,m三,s三,a[三]零,tmp三;i一,m零,s零,a[零]三,tmp零。2023/11/2118==簡單地迭代運(yùn)算==思考題:數(shù)組有n個(gè)數(shù)據(jù),要將它們順序循環(huán)向前移k位,即后面地元素向前(左)移k位,前面地元素則循環(huán)向后移k位,例:零,一,二,三,四,五循環(huán)移二位后為:二,三,四,五,零,一??紤]到n會(huì)很大,不允許用二*n及以上個(gè)空間來完成此題。2023/11/2119例三-四編程求當(dāng)n<=一零零時(shí),n!地準(zhǔn)確值。==簡單地迭代運(yùn)算==問題分析基本數(shù)據(jù)類型 整型數(shù)據(jù):-三二七六八——三二七六七 長整型:-二一四七四八三六四八——二一四七四八三六四七 單精度:六位精度,±(三.四e-三八~三.四e+三八) 雙精度:一七位精確度,±(一.七e-三零八~一.七e+三零八)不夠大,不精確設(shè)計(jì)要點(diǎn):(一)存儲(chǔ):可用整數(shù)或字符類型地?cái)?shù)組,每個(gè)元素一到若干位(二)數(shù)組長度:由式log(n!)=Θ(nlogn)確定。如每個(gè)元素存儲(chǔ)存六位整數(shù),log(n!)=一零零log(一零零)/六≈三四(一零零!有二七位)(三)計(jì)算:模擬豎式乘法三.二算法與數(shù)據(jù)結(jié)構(gòu)2023/11/21例三-四編程求當(dāng)N<=一零零時(shí),N!地準(zhǔn)確值實(shí)例分析九!=三六二八八零一零零!=九三三二六二一五四四三九四四一五二六八一六九九二六三八五六二六六七零零四九零七一五九六八二六四三八一六二一四六八 五九二九六三八九五二一七五九九九九三二二九九一五六零八九一四 四六三九七六一五六五七八二八六二五三六九七九二零八二七二二三 七五八二五一一八五二一零九一六八六四零零零零零零零零零零零零零零零零零零零零零零零零==簡單地迭代運(yùn)算==三.二算法與數(shù)據(jù)結(jié)構(gòu)2023/11/21例三-四編程求當(dāng)N<=一零零時(shí),N!地準(zhǔn)確值豎式乘法原理--實(shí)例分析零八六一九六零a[零]*一一bb%一零六a[零]=九一六八零零b/一零六d=六a[零]a[一]一零!零八八二六三零一一×ia[一]*一一+d九三b==簡單地迭代運(yùn)算==三.二算法與數(shù)據(jù)結(jié)構(gòu)2023/11/21豎式乘法原理--實(shí)例分析b%一零六a[零]=八三二零零零b/一零六d=一三a[零]一八!零零八二七a[一]五零七三七三零b=a[j]×i+d;a[j]=b%一零六;d=b/一零六;一九×i零四六二a[二]a[零]*一九b零零二三八三零一七一零零三九五a[一]五零七三七三一九×+d=一三ba[一]零零零零零零?六四零二零零零零零零七二八零零零六四零二零七二八零零零==簡單地迭代運(yùn)算==三.二算法與數(shù)據(jù)結(jié)構(gòu)2023/11/21==簡單地迭代運(yùn)算==計(jì)算模型設(shè)存儲(chǔ)大數(shù)結(jié)果地?cái)?shù)組為a[

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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

提交評論