版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)與C/C++&Java北京工業(yè)大學(xué)計算機學(xué)院軟件學(xué)科部陳文博
2004數(shù)據(jù)結(jié)構(gòu)與算法1第十章算法設(shè)計與分析導(dǎo)論數(shù)據(jù)結(jié)構(gòu)與算法2主要內(nèi)容
算法設(shè)計與分析內(nèi)容介紹算法分析的方法遞歸與分治算法回溯算法貪心算法
數(shù)據(jù)結(jié)構(gòu)與算法3算法設(shè)計與分析內(nèi)容介紹從引例看算法設(shè)計表達算法的抽象機制數(shù)學(xué)算法與數(shù)據(jù)結(jié)構(gòu)算法算法與數(shù)據(jù)結(jié)構(gòu)的關(guān)系算法分析的方法常用算法模式數(shù)據(jù)結(jié)構(gòu)與算法4010203040506071234四染色地理結(jié)論的實現(xiàn)123456712345670111111100011010011001010100111101111001011000110從引例看算法設(shè)計11數(shù)據(jù)結(jié)構(gòu)與算法5BacktrackingAlgorithmIdea數(shù)據(jù)結(jié)構(gòu)與算法6publicbooleanbacktrack(){
Stack
S=newArrayStack();//Initializesystem;i=1;//the
i
isnumberofatask
j=1;//the
j
isitemnumberofchoice
do{
}(!wholeprojecthascompleted)}//accomplishbacktrack數(shù)據(jù)結(jié)構(gòu)與算法7do{while((!Thechoiceexceedsthescope)&&(!wholeprojecthascompleted)){
if(!matchConstraint(i,j))j++;
elsebreak;}
if(!Thechoiceexceedsthescope){
S.push((i,j));i++;j=1;//newtaskinbeginning}elseif(!S.empty()){(i,j)=S.pop();j++;//testnewchoice}elsereturn
false;
if(wholeprojecthascompleted))return
true;}(!wholeprojecthascompleted)數(shù)據(jù)結(jié)構(gòu)與算法8
ADT
Stack
{
數(shù)據(jù)對象:
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
數(shù)據(jù)關(guān)系:
R={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}
約定an
端為棧頂,a1端為棧底。
}ADTStack
基本操作:
Stack()
empty()
push(e)
pop()數(shù)據(jù)結(jié)構(gòu)與算法9表達算法的抽象機制數(shù)
據(jù)
模
型初始狀態(tài)結(jié)果狀態(tài)算
法頂層算法底層算法宏觀步驟
算法骨干變量抽象
運算粗化微觀步驟
算法細節(jié)變量具體
運算細化ADT(抽象)運算步驟數(shù)據(jù)結(jié)構(gòu)與算法10數(shù)學(xué)層面的算法與數(shù)據(jù)結(jié)構(gòu)層面的算法數(shù)據(jù)結(jié)構(gòu)層面的算法publicObjectpop(){
if(empty())
thrownewEmptyStackException();
ObjecttopElement=stack[top];
returntopElement;}涉及對具體數(shù)據(jù)結(jié)構(gòu)的操作數(shù)據(jù)結(jié)構(gòu)與算法11數(shù)學(xué)層面的算法不涉及對具體數(shù)據(jù)結(jié)構(gòu)的操作只使用數(shù)據(jù)結(jié)構(gòu)ADT的接口數(shù)據(jù)結(jié)構(gòu)與算法12算法與數(shù)據(jù)結(jié)構(gòu)的關(guān)系算法vs
抽象的邏輯的數(shù)據(jù)結(jié)構(gòu)四染色算法vs
具體的數(shù)據(jù)結(jié)構(gòu)四染色算法vs
邏輯的數(shù)據(jù)結(jié)構(gòu)
(往往由控制結(jié)構(gòu)得到體現(xiàn))whileifelseifdo數(shù)據(jù)結(jié)構(gòu)與算法13算法分析的方法
漸進時間復(fù)雜度平均時間復(fù)雜度
一般的分析方法遞歸方程的求解數(shù)據(jù)結(jié)構(gòu)與算法14四染色算法的分析例四染色回溯算法4*4*4……4n=4nT(n)=O(4n)數(shù)據(jù)結(jié)構(gòu)與算法15voidhanoi(intn,charx,chary,charz){//將塔座x上按直徑由小到大且至上而下編號為1至n//的n個圓盤按規(guī)則搬到塔座z上,y可用作輔助塔座。
if(n==1)move(x,1,z);//將編號為1的圓盤從x移到z
else{hanoi(n-1,x,z,y);
//將x上編號為1至n-1的圓盤移到y(tǒng),z作輔助塔
move(x,n,z);
//將編號為n的圓盤從x移到zhanoi(n-1,y,x,z);
//將y上編號為1至n-1的圓盤移到z,x作輔助塔
}}Hanoi塔算法的分析數(shù)據(jù)結(jié)構(gòu)與算法16T(n)T(n-1)T(n-1)O(1)T(n)=T(n-1)+O(1)+T(n-1)=2T(n-1)+O(1)遞歸方程的求解數(shù)據(jù)結(jié)構(gòu)與算法17T(n)=2T(n-1)+O(1)
=2(2T(n-2)+O(1))+O(1)
=4T(n-2)+3O(1)
=4(2T(n-3)+O(1))+3O(1)
=8T(n-3)+7O(1)
=8(2T(n-4)+O(1))+7O(1)
=16T(n-4)+15O(1)
……T(n)=2kT(n-k)+(2k-1)O(1)數(shù)據(jù)結(jié)構(gòu)與算法18T(n)=2kT(n-k)+(2k-1)O(1)n-k=1
k=n-1T(n)=2n-1T(1)+(2n-1-1)O(1)
=2n-1O(1)+(2n-1-1)O(1)
=2·2n-1O(1)-O(1)
=(2n–1)
O(1)T(n)=O(2n)
數(shù)據(jù)結(jié)構(gòu)與算法19常用算法模式遞歸與分治算法動態(tài)規(guī)劃貪心算法回溯算法分支限界算法概率算法遺傳算法數(shù)據(jù)結(jié)構(gòu)與算法20遞歸算法數(shù)據(jù)結(jié)構(gòu)與算法21
后置遞歸法(Postponingthework)的設(shè)計思想為:假如某個問題的求解過程可以分成若干步進行,并且當(dāng)前這一步的解可以直接求得,則先求出當(dāng)前這一步的解,對于余下的問題,若問題的性質(zhì)和原問題類似,則又可遞歸求解。
數(shù)據(jù)結(jié)構(gòu)與算法22遞歸的終結(jié)狀態(tài)是,當(dāng)前的問題可以直接求解,對原問題而言,則是已走到了求解的最后一步。
鏈表是可以如此求解的一個典型例子。例如:編寫“刪除單鏈表中所有值為x
的數(shù)據(jù)元素”的算法。數(shù)據(jù)結(jié)構(gòu)與算法23
1)單鏈表是一種順序結(jié)構(gòu),必須從第一個結(jié)點起,逐個檢查每個結(jié)點的數(shù)據(jù)元素;分析:
2)從另一角度看,鏈表又是一個遞歸結(jié)構(gòu),若
L
是線性鏈表
(a1,a2,,an)
的頭指針,則
L->next是線性鏈表
(a2,,an)的頭指針。數(shù)據(jù)結(jié)構(gòu)與算法24
a1
a2
a3
an
…L例如:
a1
a2
a3
an
L
a1
a2
a3
an
L已知下列鏈表1)“a1=x”,則
L仍為刪除
x后的鏈表頭指針2)“a1≠x”,則余下問題是考慮以
L->next為頭指針的鏈表……
a1
L->nextL->next=p->nextp=L->next數(shù)據(jù)結(jié)構(gòu)與算法25void
delete_L(LinkList&L,ElemTypex){
//刪除以L為頭指針的帶頭結(jié)點的單鏈表中
//所有值為x的數(shù)據(jù)元素
if(L->next){
if(L->next->data==x){p=L->next;L->next=p->next;delete(p);delete_L(L,x);}
else
delete_L(L->next,x);}}//delete數(shù)據(jù)結(jié)構(gòu)與算法26void
delete_L(LinkList&L,ElemTypex){
//L為無頭結(jié)點的單鏈表的頭指針
if(L){
if(L->data=x){p=L;L=L->next;delete(p);delete_L(L,x);}
else
delete_L(L->next,x);}}4.遞歸函數(shù)中的尾遞歸容易消除。數(shù)據(jù)結(jié)構(gòu)與算法27voiddelete(LinkList&L,ElemTypex){
//L為帶頭結(jié)點的單鏈表的頭指針
p=L->next;pre=L;
while(p){
if(p->data=x){pre->next=p->next;free(p);p=pre->next;}
else{pre=p;p=p->next;}}}上述遞歸算法可改寫為迭代的形式數(shù)據(jù)結(jié)構(gòu)與算法28遞歸與分治算法數(shù)據(jù)結(jié)構(gòu)與算法29
若求解問題的規(guī)模為n
其次,逐步合并子問題的解,直到獲得原問題的解。
首先,把問題分解為k個性質(zhì)相同、但規(guī)模
較小的子問題(1kn),并求解這些子問題。(如果這些子問題的規(guī)模還不夠“小”
,則可以進一步分解,直到可以求解為止)
分治法的概念數(shù)據(jù)結(jié)構(gòu)與算法30PP1P2Pk……T1(n)T2(n)Tk(n)T(n)時間復(fù)雜度:T(n)=T1(n)+T2(n)+……+Tk(n)+C(n)
C(n)數(shù)據(jù)結(jié)構(gòu)與算法31voidmergeSort(RcdType&SR[],ints,intt){//將SR[s..t]歸并排序
if(s==t)return;
intm=(s+t)/2;mergeSort(SR,s,m);mergeSort(SR,m+1,t);merge(SR,s,m,t);}//mergeSort例歸并排序數(shù)據(jù)結(jié)構(gòu)與算法32T(n)T(n/2)T(n/2)Cn數(shù)據(jù)結(jié)構(gòu)與算法33T(n)=T(n/2)+T(n/2)+Cn
=2T(n/2)+Cn
=2(2T(n/4)+C(n/2))+Cn
=4T(n/4)+
Cn+Cn
=4T(n/4)+2Cn
=8T(n/8)+3Cn
=2kT(n/2k)+kCn
……2k=nk=log2nT(n)=nT(1)+log2n?Cn=Cnlog2n+d
?
nT(n)=O(nlog2n)數(shù)據(jù)結(jié)構(gòu)與算法34分治算法的設(shè)計模式divide-and-conquer(P){
if(|P|)<=n0)adhocery(P);
dividePintosmallersubinstancesP1,P2,…,Pk;
for(i=1;i<=k;i++)yi=divide-and-conquer(Pi);
returnmerge(y1,…,yk);}數(shù)據(jù)結(jié)構(gòu)與算法35最接近點對問題分析(直線上n個點,假設(shè)只有一對符合條件)算出每兩個點的距離.若排序,需O(n2),希望O(nlog2n)mS1S2p1p2p3q3q1q2d=min{|p1-p2|,|q1-q2|}數(shù)據(jù)結(jié)構(gòu)與算法36publicstaticdoublenearPair(S){n=|S|;
if(n<2)return;m=S中各點坐標(biāo)的中位數(shù);
構(gòu)造S1和S2;
//S1={x?S|x<=m},S2={x?S|x>m}d1=nearPair(S1);d2=nearPair(S2);d=min(d1,d2,q-p);
returnd;}T(n)=2T(n/2)+O(n)=O(nlog2n)數(shù)據(jù)結(jié)構(gòu)與算法37貪心算法數(shù)據(jù)結(jié)構(gòu)與算法38貪心算法的概念
在解決某一問題的過程中,貪心算法總是做出在當(dāng)前看來最好的選擇。
也就是說,貪心算法并不從整體最優(yōu)考慮,它所做出的選擇只是在某種意義上的局部最優(yōu)選擇。(最終結(jié)果并不總是整體最優(yōu))
貪心算法合理的稱謂:就急算法數(shù)據(jù)結(jié)構(gòu)與算法39四種硬幣
0.250.100.050.01
找顧客0.61
0.61-0.25=0.360.36-0.25=0.110.11-0.10=0.010.01-0.01=0.00整體最優(yōu)(幣數(shù)最少)本例的幣值結(jié)構(gòu)具有最優(yōu)子結(jié)構(gòu)性質(zhì)找錢問題數(shù)據(jù)結(jié)構(gòu)與算法40若四種硬幣
0.110.050.01
找顧客0.15
0.15-0.11=0.040.04-0.01=0.030.03-0.01=0.020.02-0.01=0.01一般可以得到整體近似最優(yōu)解0.01-0.01=0.000.15-3*0.05=0.00數(shù)據(jù)結(jié)構(gòu)與算法41貪心算法的設(shè)計模式Greedy(inputSet,Solution,target
){
Solution=?;target=?;
while(!findSolution){
x=select(inputSet);
iffeasible(Solution,x){
Solution=Solution∪x;change(target,x)}}
return
Solution;}數(shù)據(jù)結(jié)構(gòu)與算法42最小生成樹問題
(ST
G=(V,E))publicstaticvoidprim(intn,float[][]c){T=?;S={1};
while(S!=V){(i,j)=min(c[i][j])|i∈S&&j∈V-S
T=T
∪{(i,j)};
S=S
∪{j};}}數(shù)據(jù)結(jié)構(gòu)與算法43abcdegf例如:195141827168213ae12dcbgf7148531621所得生成樹權(quán)值和=
14+8+3+5+16+21
=67數(shù)據(jù)結(jié)構(gòu)與算法44回溯算法數(shù)據(jù)結(jié)構(gòu)與算法45數(shù)據(jù)結(jié)構(gòu)與算法46
回溯算法術(shù)語
1.解向量:問題解的向量表示形式。
(x1,x2,…,xk)kn,n:問題的規(guī)模。
2.約束條件
1)顯式約束:對分量xi的取值限定。
2)隱式約束:為滿足問題的解,不同分
量之間應(yīng)遵守的約束。
3.解空間:對于問題的一個實例,解向量滿足
顯式約束條件的所有多元組,構(gòu)成了該
實例的一個解空間。數(shù)據(jù)結(jié)構(gòu)與算法47
狀態(tài)空間樹
用于描述解空間的邏輯結(jié)構(gòu)樹
目標(biāo)函數(shù)與最優(yōu)解
1.目標(biāo)函數(shù):衡量問題解
“優(yōu)劣”的標(biāo)準(zhǔn)
2.最優(yōu)解:使目標(biāo)函數(shù)取極
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中考物理復(fù)習(xí)主題單元11第28課時焦耳定律課件
- 冀少版八年級生物上冊第五單元第一節(jié)細菌課件
- 冀少版八年級生物上冊第三單元第二節(jié)光合作用的原料課件
- 初三化學(xué)第一輪復(fù)習(xí)教學(xué)教案
- 《馬詩》教學(xué)設(shè)計
- 住宅小區(qū)監(jiān)理廉潔自律協(xié)議
- 五年級語文下冊第二單元教學(xué)設(shè)計教案
- 木材加工廠工人工作證使用辦法
- 船舶制造乳膠漆粉刷施工合同
- 碳基金碳資產(chǎn)管理辦法
- 體育教師技能培訓(xùn)課件
- 交通運輸系統(tǒng)安全生產(chǎn)治本攻堅三年行動方案
- 《平衡計分卡》課件
- 設(shè)計管理策劃書
- 文化與藝術(shù)行業(yè)2024年人力資源管理與制度優(yōu)化
- 《區(qū)塊鏈原理詳解》課件
- 利用質(zhì)量管理工具改進醫(yī)院感染控制標(biāo)準(zhǔn)的執(zhí)行與管理研究
- 掌握動物園營銷技巧
- 第4課+中古時期的亞洲【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 五年級上冊英語期中試卷-閩教版
- 特種設(shè)備的安全使用與維護培訓(xùn)教材
評論
0/150
提交評論