版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
關(guān)于導(dǎo)引與基本數(shù)據(jù)結(jié)構(gòu)1第1頁,講稿共74頁,2023年5月2日,星期三2教材計(jì)算機(jī)算法基礎(chǔ)(第二版)余祥宣等華中科技大學(xué)出版社參考書:1.計(jì)算機(jī)算法設(shè)計(jì)與分析:王曉東,電子工業(yè)出版社2.算法分析與設(shè)計(jì):(美)古德里奇,(美)塔瑪西亞,霍紅衛(wèi)譯人民郵電出版社課時(shí)安排:28+12考試形式:閉卷成績(jī):平時(shí)50%+考試50%第2頁,講稿共74頁,2023年5月2日,星期三3序計(jì)算機(jī)算法是計(jì)算機(jī)科學(xué)和計(jì)算機(jī)應(yīng)用的核心數(shù)據(jù)結(jié)構(gòu)+算法=程序算法(algorithm)是一個(gè)在有限時(shí)間內(nèi)逐步執(zhí)行某種任務(wù)的過程數(shù)據(jù)結(jié)構(gòu)(datastructure)是一種系統(tǒng)組織和訪問數(shù)據(jù)的方法算法:計(jì)算機(jī)軟件的靈魂第3頁,講稿共74頁,2023年5月2日,星期三4問題求解(ProblemSolving)設(shè)計(jì)程序證明正確性分析算法理解問題精確解或近似解選擇數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)策略設(shè)計(jì)算法第4頁,講稿共74頁,2023年5月2日,星期三5章節(jié)安排第一章導(dǎo)引與基本數(shù)據(jù)結(jié)構(gòu) √第二章分治法 √第三章貪心方法 √第四章動(dòng)態(tài)規(guī)劃 √第五章檢索與周游 √第六章回溯法 ⊙第七章分枝-限界 ⊙第八章NP-問題
?算法研討環(huán)節(jié)
第5頁,講稿共74頁,2023年5月2日,星期三6第一章導(dǎo)引與基本數(shù)據(jù)結(jié)構(gòu)1.1算法的定義及特性1.什么是算法?
算法如數(shù)字、計(jì)算一樣,是一個(gè)基本概念。算法是解一類確定問題的任意一種特殊的方法。在計(jì)算機(jī)科學(xué)中,算法是使用計(jì)算機(jī)解一類問題的精確、有效方法的代名詞:
算法是一組有窮的規(guī)則,它規(guī)定了解決某一特定類型問題的一系列運(yùn)算。第6頁,講稿共74頁,2023年5月2日,星期三72.算法的五個(gè)重要特性
確定性、能行性、輸入、輸出、有窮性1)確定性:算法的每種運(yùn)算必須要有確切的定義,不能有二義性。例:不符合確定性的運(yùn)算
5/0
將6或7與x相加未賦值變量參與運(yùn)算第7頁,講稿共74頁,2023年5月2日,星期三82)能行性算法中有待實(shí)現(xiàn)的運(yùn)算都是基本的運(yùn)算,原理上每種運(yùn)算都能由人用紙和筆在有限的時(shí)間內(nèi)完成。例:整數(shù)的算術(shù)運(yùn)算是“能行”的實(shí)數(shù)(無理數(shù))的算術(shù)運(yùn)算是“不能行”的第8頁,講稿共74頁,2023年5月2日,星期三93)輸入每個(gè)算法有0個(gè)或多個(gè)輸入。這些輸入是在算法開始之前給出的量,取自于特定的對(duì)象集合——定義域(或值域)4)輸出一個(gè)算法產(chǎn)生一個(gè)或多個(gè)輸出,這些輸出是同輸入有某種特定關(guān)系的量。第9頁,講稿共74頁,2023年5月2日,星期三105)有窮性
一個(gè)算法總是在執(zhí)行了有窮步的運(yùn)算之后終止。計(jì)算過程:只滿足確定性、能行性、輸入、輸出四個(gè)特性但不一定能終止的一組規(guī)則。準(zhǔn)確理解算法和計(jì)算過程的區(qū)別:不能終止的計(jì)算過程:操作系統(tǒng)。算法是“可以終止的計(jì)算過程”。算法的時(shí)效性:只能把在相當(dāng)有窮步內(nèi)終止的算法投入到計(jì)算機(jī)上運(yùn)行。第10頁,講稿共74頁,2023年5月2日,星期三114.我們的主要任務(wù)算法學(xué)習(xí)將涉及5個(gè)方面的內(nèi)容:
1)設(shè)計(jì)算法:創(chuàng)造性的活動(dòng)
2)表示算法:思想的表示形式
3)確認(rèn)算法:證明算法的正確性程序的證明(程序的形式化證明技術(shù))
4)分析算法:算法時(shí)空特性分析
5)測(cè)試程序:“調(diào)試只能指出有錯(cuò)誤,而不能指出它們不存在錯(cuò)誤”
本課程集中于學(xué)習(xí)算法的設(shè)計(jì)與分析。通過學(xué)習(xí),掌握計(jì)算機(jī)算法設(shè)計(jì)和分析基本策略與方法,為設(shè)計(jì)更復(fù)雜、更有效的算法奠定基礎(chǔ)。第11頁,講稿共74頁,2023年5月2日,星期三125.課程關(guān)系數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)語言:結(jié)構(gòu)化設(shè)計(jì)數(shù)學(xué)基礎(chǔ)非數(shù)值計(jì)算領(lǐng)域的基本知識(shí)第12頁,講稿共74頁,2023年5月2日,星期三131.2分析算法1.分析算法的目的在于:通過對(duì)算法的分析,在把算法變成程序?qū)嶋H運(yùn)行前,就知道為完成一項(xiàng)任務(wù)所設(shè)計(jì)的算法的好壞,從而運(yùn)行好的算法,改進(jìn)差的算法,避免無益的人力和物力浪費(fèi)。算法分析是計(jì)算機(jī)領(lǐng)域的古老而前沿的課題。
進(jìn)行算法分析的基本技術(shù):抽象第13頁,講稿共74頁,2023年5月2日,星期三142.重要的假設(shè)和約定1)計(jì)算機(jī)模型的假設(shè)
Turing機(jī)模型:計(jì)算機(jī)形式理論模型通用計(jì)算機(jī)模型:順序計(jì)算機(jī)有足夠的“內(nèi)存”能在固定的時(shí)間內(nèi)存取數(shù)據(jù)單元
第14頁,講稿共74頁,2023年5月2日,星期三152)計(jì)算的約定
算法的執(zhí)行時(shí)間=∑Fi*ti
其中,F(xiàn)i是算法中用到的某種運(yùn)算i的次數(shù),ti是該運(yùn)算執(zhí)行一次所用的時(shí)間。確定使用什么樣的運(yùn)算及其執(zhí)行時(shí)間。從計(jì)算時(shí)間上,運(yùn)算的分類:
時(shí)間囿界于常數(shù)的運(yùn)算:
·基本算術(shù)運(yùn)算,如整數(shù)、浮點(diǎn)數(shù)的加、減、乘、除
·字符運(yùn)算
·賦值運(yùn)算
·過程調(diào)用等特點(diǎn):盡管每種運(yùn)算的執(zhí)行時(shí)間不同,但一般只花一個(gè)固定量的時(shí)間(單位時(shí)間)就可完成。第15頁,講稿共74頁,2023年5月2日,星期三162)計(jì)算的約定(續(xù))
其他運(yùn)算:
·字符串操作:與字符串中字符的數(shù)量成正比
·記錄操作:與記錄的屬性數(shù)、屬性類型等有關(guān)
·
特點(diǎn):運(yùn)算時(shí)間無定量如何分析非時(shí)間囿界于常數(shù)的運(yùn)算:分解成若干時(shí)間囿界于常數(shù)的運(yùn)算。
如:Tstring=Length(String)*tchar第16頁,講稿共74頁,2023年5月2日,星期三173)工作數(shù)據(jù)集的選擇編制能夠反映算法在最好、平均、最壞情況下工作的數(shù)據(jù)配置。然后使用這些數(shù)據(jù)配置運(yùn)行算法,以了解算法的性能。測(cè)試數(shù)據(jù)集的生成在目前算法證明與程序正確性證明沒有取得理論上的突破性進(jìn)展的情況下,是程序測(cè)試與算法分析中的關(guān)鍵技術(shù)之一。
·作為算法分析的數(shù)據(jù)集:典型特征
·作為程序性能測(cè)試的數(shù)據(jù)集:對(duì)執(zhí)行指標(biāo)產(chǎn)生影響的性質(zhì)第17頁,講稿共74頁,2023年5月2日,星期三183.如何進(jìn)行算法分析?對(duì)算法進(jìn)行全面分析,可分兩個(gè)階段進(jìn)行:事前分析:就算法本身,通過對(duì)其執(zhí)行性能的理論分析,得出關(guān)于算法特性——時(shí)間和空間的一個(gè)特征函數(shù)(Ο、Ω)——與計(jì)算機(jī)物理軟硬件沒有直接關(guān)系。事后測(cè)試:將算法編制成程序后實(shí)際放到計(jì)算機(jī)上運(yùn)行,收集其執(zhí)行時(shí)間和空間占用等統(tǒng)計(jì)資料,進(jìn)行分析判斷——直接與物理實(shí)現(xiàn)有關(guān)。第18頁,講稿共74頁,2023年5月2日,星期三191)事前分析目的:試圖得出關(guān)于算法執(zhí)行特性的一種形式描述,以“理論上”衡量算法的“好壞”。如何給出反映算法執(zhí)行特性的描述?最直接方法:統(tǒng)計(jì)算法中各種運(yùn)算的執(zhí)行情況,包括:引用了哪些運(yùn)算每種運(yùn)算被執(zhí)行的次數(shù)該種運(yùn)算執(zhí)行一次所花費(fèi)的時(shí)間等。
算法的執(zhí)行時(shí)間=∑Fi*ti第19頁,講稿共74頁,2023年5月2日,星期三20頻率計(jì)數(shù)
例:
x←x+yfori←1tondofori←1tondox←x+yforj←1tondorepeatx←x+yrepeatrepeat(a)(b)(c)
分析:
(a):x←x+y執(zhí)行了1次
(b):x←x+y執(zhí)行了n次
(c):x←x+y執(zhí)行了n2次定義:
頻率計(jì)數(shù):一條語句或一種運(yùn)算在算法(或程序)體中的執(zhí)行次數(shù)。第20頁,講稿共74頁,2023年5月2日,星期三21一條語句在整個(gè)程序運(yùn)行時(shí)實(shí)際執(zhí)行時(shí)間=
頻率計(jì)數(shù)*每執(zhí)行一次該語句所需的時(shí)間如何刻畫算法執(zhí)行特性的形式描述實(shí)際執(zhí)行時(shí)間受約于諸多實(shí)際因素,如機(jī)器類型、編程與語言、操作系統(tǒng)等,沒有統(tǒng)一的描述模型。在事前分析中,只限于確定與所使用的機(jī)器及其他環(huán)境因素?zé)o關(guān)的頻率計(jì)數(shù),依此建立理論分析模型。第21頁,講稿共74頁,2023年5月2日,星期三22數(shù)量級(jí)
語句的數(shù)量級(jí):語句的執(zhí)行頻率例:1,n,n2
算法的數(shù)量級(jí):算法所包含的所有語句的執(zhí)行頻率之和。算法的數(shù)量級(jí)從本質(zhì)上反映了一個(gè)算法的執(zhí)行特性。例:假如求解同一個(gè)問題的三個(gè)算法分別具有n,n2
,n3數(shù)量級(jí)。若n=10,則可能的執(zhí)行時(shí)間將分別是10,100,1000個(gè)單位時(shí)間——與環(huán)境因素?zé)o關(guān)。第22頁,講稿共74頁,2023年5月2日,星期三23
計(jì)算時(shí)間/頻率計(jì)數(shù)的表示函數(shù)通過事前分析給出算法計(jì)算時(shí)間(頻率計(jì)數(shù))的一個(gè)函數(shù)表示形式,一般記為與輸入規(guī)模n有關(guān)的函數(shù)形式:f(n)注:最高次項(xiàng)與函數(shù)整體的關(guān)系空間特性分析(略)第23頁,講稿共74頁,2023年5月2日,星期三242)事后測(cè)試目的:運(yùn)行程序,確定程序?qū)嶋H耗費(fèi)的時(shí)間與空間,驗(yàn)證先前的分析結(jié)論——包括正確性、執(zhí)行性能等,比較、優(yōu)化所設(shè)計(jì)的算法。分析手段:作時(shí)、空性能分布圖第24頁,講稿共74頁,2023年5月2日,星期三254.計(jì)算時(shí)間的漸近表示記:算法的計(jì)算時(shí)間為f(n)
數(shù)量級(jí)限界函數(shù)為g(n)其中,
n是輸入或輸出規(guī)模的某種測(cè)度。f(n)表示算法的“實(shí)際”執(zhí)行時(shí)間—與機(jī)器及語言有關(guān)。g(n)是形式簡(jiǎn)單的函數(shù),如nm,logn,2n,n!等。是事前分析中通過對(duì)計(jì)算時(shí)間或頻率計(jì)數(shù)統(tǒng)計(jì)分析所得的、與機(jī)器及語言無關(guān)的函數(shù)。
以下給出算法執(zhí)行時(shí)間:上界(О)、下界(Ω)、“平均”()的定義。第25頁,講稿共74頁,2023年5月2日,星期三261)上界函數(shù)定義1如果存在兩個(gè)正常數(shù)c和n0,對(duì)于所有的n≥n0,有|f(n)|≤c|g(n)|則記作f(n)=Ο(g(n))含義:如果算法用n值不變的同一類數(shù)據(jù)在某臺(tái)機(jī)器上運(yùn)行時(shí),所用的時(shí)間總是小于|g(n)|的一個(gè)常數(shù)倍。所以g(n)是計(jì)算時(shí)間f(n)的一個(gè)上界函數(shù)。f(n)的數(shù)量級(jí)就是g(n)。試圖求出最小的g(n),使得f(n)=Ο(g(n))。
第26頁,講稿共74頁,2023年5月2日,星期三27F(n)=3n+2
可取c=4,n0=2,O(n)F(n)=100n+6
可取c=101,n0=6,O(n)F(n)=2n2+11n-10
可取c=3,n0=10,O(n2)F(n)=6×2n+n2
可取c=7,n0=4,O(2n)第27頁,講稿共74頁,2023年5月2日,星期三28多項(xiàng)式定理:定理1若A(n)=amnm+…+a1n+a0是一個(gè)m次多項(xiàng)式,則有A(n)=Ο(nm)即:變量n的固定階數(shù)為m的任一多項(xiàng)式,與此多項(xiàng)式的最高階nm同階。
證明:取n0=1,當(dāng)n≥n0時(shí),有|A(n)|≤|am|nm+…+|a1|n+|a0|≤(|am|+|am-1|/n+…+|a0|/nm)nm
≤(|am|+|am-1|+…+|a0|)nm
令c=|am|+|am-1|+…+|a0|則,定理得證。第28頁,講稿共74頁,2023年5月2日,星期三29
計(jì)算時(shí)間的數(shù)量級(jí)對(duì)算法有效性的影響數(shù)量級(jí)的大小對(duì)算法的有效性有決定性的影響。
例:假設(shè)解決同一個(gè)問題的兩個(gè)算法,它們都有n個(gè)輸入,計(jì)算時(shí)間的數(shù)量級(jí)分別是n2和nlogn。則,n=1024:分別需要1048576和10240次運(yùn)算。n=2048:分別需要4194304和22528次運(yùn)算。分析:在n加倍的情況下,一個(gè)Ο(n2)的算法計(jì)算時(shí)間增長(zhǎng)4倍,而一個(gè)Ο(nlogn)算法則只用2倍多一點(diǎn)的時(shí)間即可完成。第29頁,講稿共74頁,2023年5月2日,星期三30
算法分類(計(jì)算時(shí)間)多項(xiàng)式時(shí)間算法:可用多項(xiàng)式(函數(shù))對(duì)其計(jì)算時(shí)間限界的算法。常見的多項(xiàng)式限界函數(shù)有:
Ο(1)<Ο(logn)<Ο(n)<Ο(nlogn)<Ο(n2)<Ο(n3)指數(shù)時(shí)間算法:計(jì)算時(shí)間用指數(shù)函數(shù)限界的算法常見的指數(shù)時(shí)間限界函數(shù):
Ο(2n)<Ο(n!)<Ο(nn)說明:當(dāng)n取值較大時(shí),指數(shù)時(shí)間算法和多項(xiàng)式時(shí)間算法在計(jì)算時(shí)間上非常懸殊。第30頁,講稿共74頁,2023年5月2日,星期三31典型的計(jì)算時(shí)間函數(shù)曲線第31頁,講稿共74頁,2023年5月2日,星期三32當(dāng)數(shù)據(jù)集的規(guī)模很大時(shí),要在現(xiàn)有的計(jì)算機(jī)系統(tǒng)上運(yùn)行具有比Ο(nlogn)復(fù)雜度還高的算法是比較困難的。指數(shù)時(shí)間算法只有在n取值非常小時(shí)才實(shí)用。要想在順序處理機(jī)上擴(kuò)大所處理問題的規(guī)模,有效的途徑是降低算法的計(jì)算復(fù)雜度,而不是(僅僅依靠)提高計(jì)算機(jī)的速度。第32頁,講稿共74頁,2023年5月2日,星期三33計(jì)算時(shí)間函數(shù)值比較第33頁,講稿共74頁,2023年5月2日,星期三34定義1.2如果存在兩個(gè)正常數(shù)c和n0,對(duì)于所有的n≥n0,有|f(n)|≥c|g(n)|則記作f(n)=Ω(g(n))含義:如果算法用n值不變的同一類數(shù)據(jù)在某臺(tái)機(jī)器上運(yùn)行時(shí),所用的時(shí)間總是不小于|g(n)|的一個(gè)常數(shù)倍。所以g(n)是計(jì)算時(shí)間f(n)的一個(gè)下界函數(shù)。試圖求出“最大”的g(n),使得f(n)=Ω(g(n))。2)下界函數(shù)第34頁,講稿共74頁,2023年5月2日,星期三35定義1.3如果存在正常數(shù)c1,c2和n0,對(duì)于所有的n≥n0,有c1|g(n)|≤|f(n)|≤c2|g(n)|則記作含義:算法在最好和最壞情況下的計(jì)算時(shí)間就一個(gè)常數(shù)因子范圍內(nèi)而言是相同的??煽醋鳎杭扔衒(n)=Ω(g(n)),又有f(n)=Ο(g(n))3)“平均情況”限界函數(shù)第35頁,講稿共74頁,2023年5月2日,星期三36漸近分析記號(hào)的若干性質(zhì)(1)傳遞性:f(n)=(g(n)),g(n)=(h(n))f(n)=(h(n));f(n)=O(g(n)),g(n)=O(h(n))f(n)=O(h(n));f(n)=(g(n)),g(n)=(h(n))f(n)=(h(n));(2)對(duì)稱性:f(n)=(g(n))
g(n)=(f(n)).(3)互對(duì)稱性:f(n)=O(g(n))
g(n)=(f(n));第36頁,講稿共74頁,2023年5月2日,星期三37根據(jù)上述定義,下面的結(jié)論對(duì)于后面的分析是有用的。①若f(n)=O(g(n))且g(n)=O(h(n)),則f(n)=O(h(n))。②若f(n)=O(Kg(n)),其中K為任意大于0的常數(shù),則f(n)=O(g(n))。③若f1(n)=O(g1(n))且f2(n)=O(g2(n)),則f1(n)+f2(n)=O(max(g1(n),g2(n)))④若f1(n)=O(g1(n))且f2(n)=O(g2(n)),則f1(n)*f2(n)=O(g1(n)*g2(n))第37頁,講稿共74頁,2023年5月2日,星期三38規(guī)則O(f(n))+O(g(n))=
O(max{f(n),g(n)})的證明:對(duì)于任意f1(n)
O(f(n)),存在正常數(shù)c1和自然數(shù)n1,使得對(duì)所有nn1,有f1(n)
c1f(n)。類似地,對(duì)于任意g1(n)
O(g(n)),存在正常數(shù)c2和自然數(shù)n2,使得對(duì)所有nn2,有g(shù)1(n)
c2g(n)。令c3=max{c1,c2},n3=max{n1,n2},
h(n)=max{f(n),g(n)}。則對(duì)所有的nn3,有
f1(n)+g1(n)
c1f(n)+c2g(n)
c3f(n)+c3g(n)=c3(f(n)+g(n))
c32max{f(n),g(n)}=2c3h(n)=O(max{f(n),g(n)}).第38頁,講稿共74頁,2023年5月2日,星期三395.常用的整數(shù)求和公式
在算法分析中,在統(tǒng)計(jì)語句的頻率時(shí),求和公式的一般表示形式為:如:第39頁,講稿共74頁,2023年5月2日,星期三40練習(xí)1.求下列函數(shù)的上界表達(dá)式第40頁,講稿共74頁,2023年5月2日,星期三412.(1)假設(shè)某算法在輸入規(guī)模為n時(shí)的計(jì)算時(shí)間為T(n)=2n。在某臺(tái)計(jì)算機(jī)上實(shí)現(xiàn)并完成該算法的時(shí)間為t秒。現(xiàn)有另一臺(tái)計(jì)算機(jī),其運(yùn)行速度為第一臺(tái)的64倍,那么在這臺(tái)新機(jī)器上用同一算法在t秒內(nèi)能解輸入規(guī)模為多大的問題?(2)若上述算法的計(jì)算時(shí)間改進(jìn)為T(n)=n2,其余條件不變,則在新機(jī)器上用t秒時(shí)間能解輸入規(guī)模為多大的問題?(3)若上述算法的計(jì)算時(shí)間改進(jìn)為T(n)=n,其余條件不變,則在新機(jī)器上用t秒時(shí)間能解輸入規(guī)模為多大的問題?第41頁,講稿共74頁,2023年5月2日,星期三42解:(1)設(shè)新機(jī)器用同一算法在t秒內(nèi)能解輸入規(guī)模為n1的問題。因此有:
2n1=
64*2n
,解得n1=n+6(2)n12=64n2,解得n1=8n(3)n1=64n結(jié)論:降低算法復(fù)雜度是提高計(jì)算效率的關(guān)鍵!第42頁,講稿共74頁,2023年5月2日,星期三431.3關(guān)于SPARKS語言本書為描述算法選用的一種類計(jì)算機(jī)語言類PASCAL語言結(jié)構(gòu)化程序描述第43頁,講稿共74頁,2023年5月2日,星期三441.基本語法成分1)數(shù)據(jù)類型:整型、實(shí)型、布爾型、字符型2)變量聲明:類型說明符變量;
integeri,j;booleanb;charc3)賦值運(yùn)算:(變量)←(表達(dá)式)4)邏輯運(yùn)算:andornot5)關(guān)系運(yùn)算:<≤=≠≥>6)數(shù)組聲明:integerA(1:5,7:20)第44頁,講稿共74頁,2023年5月2日,星期三458)控制結(jié)構(gòu):
順序:
分支:
·ifconditionthenS1elseS2endif
·case:cond1:S1;:cond2:S2;…:condn:Sn:else:Sn+1endcase循環(huán):
·whileconddoSrepeat
·loopSuntilcondrepeat
·forvble←starttofinishbyincrementdoSrepeat
2.同質(zhì)異項(xiàng)3.其它
函數(shù)的定義與調(diào)用、函數(shù)和過程、變量與形式參數(shù)第45頁,講稿共74頁,2023年5月2日,星期三461.4基本數(shù)據(jù)結(jié)構(gòu)1.棧和隊(duì)列棧和隊(duì)列:n個(gè)元素的線性表利用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)——鏈表實(shí)現(xiàn)?;蜿?duì)列利用靜態(tài)數(shù)據(jù)結(jié)構(gòu)——數(shù)組實(shí)現(xiàn)?;蜿?duì)列基于以上兩種表示形式的棧和隊(duì)列上的基本運(yùn)算第46頁,講稿共74頁,2023年5月2日,星期三472.樹1)樹的一般定義定義1.4樹(tree)是一個(gè)或多個(gè)結(jié)點(diǎn)的有限集合,它使得:有一個(gè)指定為根(root)的結(jié)點(diǎn)剩余結(jié)點(diǎn)被劃分成m≥0個(gè)不相交的集合:
T1,…,Tm
這些集合的每一個(gè)又都是一棵樹,并稱T1,…,Tm為根的子樹。第47頁,講稿共74頁,2023年5月2日,星期三48關(guān)于樹的重要概念結(jié)點(diǎn)的度(degree):一個(gè)結(jié)點(diǎn)的子樹數(shù)樹的度:樹中結(jié)點(diǎn)度的最大值結(jié)點(diǎn)的級(jí)(level)(又叫層):設(shè)根是1級(jí),若某結(jié)點(diǎn)在p級(jí),則它的兒子在p+1級(jí)樹的高度(或深度):樹中結(jié)點(diǎn)的最大級(jí)數(shù)葉子(終端結(jié)點(diǎn)):度為0的結(jié)點(diǎn)內(nèi)結(jié)點(diǎn)(非終端結(jié)點(diǎn)):度不為0的結(jié)點(diǎn)森林:m≥0個(gè)不相交樹的集合。第48頁,講稿共74頁,2023年5月2日,星期三492)二元樹定義1.5二元樹(binarytree)是結(jié)點(diǎn)的有限集合,它或者為空,或者由一個(gè)根和兩棵稱為左子樹和右子樹的不相交二元樹所組成。二元樹與度為2的樹的區(qū)別二元樹性質(zhì)1:
引理1.1
一棵二元樹第i級(jí)的最大結(jié)點(diǎn)數(shù)是2i-1。深度為k的二元樹的最大結(jié)點(diǎn)數(shù)為2k-1,k>0。
第49頁,講稿共74頁,2023年5月2日,星期三50第50頁,講稿共74頁,2023年5月2日,星期三51
特殊形態(tài)的二元樹①滿二元樹:深度為k且有2k-1個(gè)結(jié)點(diǎn)的二元樹
第51頁,講稿共74頁,2023年5月2日,星期三52②完全二元樹:一棵有n個(gè)結(jié)點(diǎn)深度為k的二元樹,當(dāng)它的結(jié)點(diǎn)相當(dāng)于深度為k的滿二元樹中編號(hào)為1到n的結(jié)點(diǎn)時(shí),稱該二元樹是完全的。完全二元樹的葉子結(jié)點(diǎn)至多出現(xiàn)在相鄰的兩級(jí)上。完全二元樹的結(jié)點(diǎn)可以緊湊地存放在一個(gè)一維數(shù)組中(性質(zhì)見引理1.2)。第52頁,講稿共74頁,2023年5月2日,星期三53
③堆:堆是一棵完全二元樹,它的每個(gè)結(jié)點(diǎn)的值至少和(大于或等于)該結(jié)點(diǎn)的兒子們(如果存在的話)的值一樣大(max-堆)(或小,min-堆)。④二分檢索樹:二分檢索樹T是一棵二元樹,它或者為空,或者其每個(gè)結(jié)點(diǎn)含有一個(gè)可以比較大小的數(shù)據(jù)元素,且有:
·T的左子樹的所有元素比根結(jié)點(diǎn)中的元素??;
·T的右子樹的所有元素比根結(jié)點(diǎn)中的元素大;
·T的左子樹和右子樹也是二分檢索樹。
注:二分檢索樹要求樹中所有結(jié)點(diǎn)的元素值互異第53頁,講稿共74頁,2023年5月2日,星期三543.圖
圖G由稱之為結(jié)點(diǎn)V和邊E的兩個(gè)集合組成,記為G=(V,E)。其中,V是一個(gè)有限非空的結(jié)點(diǎn)集合;E是結(jié)點(diǎn)對(duì)偶的集合,E的每一對(duì)偶表示G的一條邊。第54頁,講稿共74頁,2023年5月2日,星期三55有關(guān)圖的的重要概念無向圖:邊的表示(i,j)有向圖:邊的表示〈i,j〉成本:帶有成本的圖稱為網(wǎng)絡(luò)鄰接:如果存在邊(i,j)則稱結(jié)點(diǎn)i和j鄰接結(jié)點(diǎn)的度(出度/入度)路徑:由結(jié)點(diǎn)vp到vq的一條路(path)是結(jié)點(diǎn)
vp,
vi1,
vi2,
…,
vim,
vq的一個(gè)序列,它使得(vp,
vi1)
,(vi1
,vi2)
,
…,
(
vim,
vq)是E(G)的邊。路的長(zhǎng)度:組成路的邊數(shù)。第55頁,講稿共74頁,2023年5月2日,星期三56簡(jiǎn)單路徑:除了第一和最后一個(gè)結(jié)點(diǎn)可以相同以外,其它所有結(jié)點(diǎn)都不同。環(huán):第一個(gè)和最后一個(gè)結(jié)點(diǎn)相同的簡(jiǎn)單路。連通圖:在無向圖中,如果每對(duì)結(jié)點(diǎn)之間都存在一條路,則稱該圖是連通的。子圖:是由G的結(jié)點(diǎn)集V的子集(記為VB)和邊集E
中連接VB中結(jié)點(diǎn)的邊的子集所組成的圖。連通分圖:一個(gè)圖的最大連通子圖。有向圖的強(qiáng)連通性:在有向圖中,如果對(duì)于每一對(duì)結(jié)點(diǎn)i和j,既存在一條從i到j(luò)的路,又存在一條從j
到i的路,則稱該有向圖是強(qiáng)連通的。第56頁,講稿共74頁,2023年5月2日,星期三57圖的表示方法鄰接矩陣鄰接表第57頁,講稿共74頁,2023年5月2日,星期三581.5遞歸和消去遞歸遞歸
一個(gè)算法若其中有調(diào)用自身的過程,則稱該算法是一個(gè)遞歸算法。遞歸是一種強(qiáng)有力的設(shè)計(jì)方法遞歸的效率問題第58頁,講稿共74頁,2023年5月2日,星期三59
例1.3斐波那契(Fibonacci)序列:
F0=F1=1Fi=Fi-1+Fi-2
(i>1)
算法1.7求斐波那契數(shù)
procedureF(n)//返回第n個(gè)斐波那契數(shù)//integernifn<=1thenreturn(1)elsereturn(F(n-1)+F(n-2))endifendF算法效率:對(duì)F(n-1)、F(n-2)存在大量的重復(fù)計(jì)算改進(jìn):保存中間結(jié)果第59頁,講稿共74頁,2023年5月2日,星期三60練習(xí)題18ProcedureF1(n)Ifn<2thenreturn(1)Elsereturn(F2(2,n,1,1))EndifEndF1ProcedureF2(i,n,x,y)Ifi<=nThencallF2(i+1,n,y,x+y)EndifReturn(y)EndF2第60頁,講稿共74頁,2023年5月2日,星期三61練習(xí)17題假設(shè)t(n)是所給出的F(n)的時(shí)間函數(shù),證明t(n)=O(2n-2)第61頁,講稿共74頁,2023年5月2日,星期三62練習(xí)18題以下是計(jì)算第n個(gè)斐波那契數(shù)的函數(shù)ProcedureF1(n)If(n<2)thenreturn(1)Elsereturn(F2(2,n,1,1))EndifEndf1ProcedureF2(i,n,x,y)ifi≤nthencallF2(i+1,n,y,x+y)endifreturn(y)EndF2第62頁,講稿共74頁,2023年5月2日,星期三63例1.4歐幾里得算法已知兩個(gè)非負(fù)整數(shù)a和b,且a>b≥0,求這兩個(gè)數(shù)的最大公因數(shù)。輾轉(zhuǎn)相除法:若b=0,則a和b的最大公因數(shù)等于a;若b>0,則a和b的最大公因數(shù)等于b和用b除a的余數(shù)的最大公因數(shù)。算法1.8求最大公因數(shù)
procedureGCD(a,b)//約定a>b//ifb=0thenreturn(a)elsereturn(GCD(b,amodb))endifendGCD
例:GCD(22,8)=GCD(8,6)=GCD(6,2)=GCD(2,0)=2;第63頁,講稿共74頁,2023年5月2日,星期三64例1.5遞歸在非數(shù)值算法設(shè)計(jì)中的應(yīng)用已知元素x,判斷x是否在A(1:n)中。算法1.9在A(1:n)中檢索xprocedureSEARCH(i)//如果在A(1:n)//中有一元素A(k)=x,則將其第一次出現(xiàn)的下標(biāo)k返回,否則返回0//globaln,x,A(1:n)case:i>n:return(0):A(i)=x;return(i):else:return(SEARCH(i+1))endcaseendSEARCH第一次調(diào)用ans<-SEARCH(1)第64頁,講稿共74頁,2023年5月2日,星期三652.消去遞歸直接遞歸的消去規(guī)則:
基本思路:將遞歸過程中出現(xiàn)遞歸調(diào)用的地方,用等價(jià)的非遞歸代碼來代替,并對(duì)return語句做適當(dāng)處理。
13條規(guī)則:處理直接遞歸調(diào)用中的遞歸代碼和return語句,將之轉(zhuǎn)換成等價(jià)的迭代代碼。初始化
⑴在過程的開始部分,插入說明為棧的代碼并將其初始化為空。在一般情況下,這個(gè)棧用來存放參數(shù)、局部變量和函數(shù)的值、每次遞歸調(diào)用的返回地址。⑵將標(biāo)號(hào)L1附于第一條可執(zhí)行語句。然后對(duì)于每一處遞歸調(diào)用都用一組執(zhí)行下列規(guī)則的指令來代替。第65頁,講稿共74頁,2023年5月2日,星期三66
處理遞歸調(diào)用語句⑶將所有參數(shù)和局部變量的值存入棧。
棧頂指針可作為一個(gè)全程變量來看待。⑷建立第i個(gè)新標(biāo)號(hào)Li,并將i存入棧。這個(gè)標(biāo)號(hào)的i值將用來計(jì)算返回地址。此標(biāo)號(hào)放在規(guī)則⑺所描述的程序段中。⑸計(jì)算這次調(diào)用的各實(shí)在參數(shù)(可能是表達(dá)式)的值,并把這些值賦給相應(yīng)的形式參數(shù)。⑹插入一條無條件轉(zhuǎn)向語句轉(zhuǎn)向過程的開始部分:
GotoL1第66頁,講稿共74頁,2023年5月2日,星期三67
對(duì)遞歸嵌套調(diào)用的處理⑺如果這過程是函數(shù),則對(duì)遞歸過程中含有此次函數(shù)調(diào)用的那條語句做如下處理:將該語句的此次函數(shù)調(diào)用部分用從棧頂取回該函數(shù)值的代碼來代替,其余部分的代碼按原描述方式照抄,并將⑷中建立的標(biāo)號(hào)附于這條語句上。如果此過程不是函數(shù),則將⑷中建立的標(biāo)號(hào)附于⑹所產(chǎn)生的轉(zhuǎn)移語句后面的那條語句。以上步驟實(shí)現(xiàn)消去過程中的遞歸調(diào)用。下面對(duì)過程中出現(xiàn)return語句進(jìn)行處理(純過程結(jié)束處的end可看成是一條沒有值與之聯(lián)系的return語句)。第67頁,講稿共74頁,2023年5月2日,星期三68
對(duì)每個(gè)有return語句的地方,執(zhí)行下述規(guī)則:⑻如果棧為空,則執(zhí)行正常返回。⑼否則,將所有輸出參數(shù)(帶有返回值的出口參數(shù),out/inout型)的當(dāng)前值賦給棧頂上的那些對(duì)應(yīng)的變量。⑽如果棧中有返回地址標(biāo)號(hào)的下標(biāo),就插入一條此下標(biāo)從棧中退出的代碼,并把這個(gè)下標(biāo)賦給一個(gè)未使用的變量。⑾從棧中退出所有局部變量和參數(shù)的值并把它們賦給對(duì)應(yīng)的變量。⑿如果這個(gè)過程是函數(shù),則插入以下指令,這些指令用來計(jì)算緊接在return后面的表達(dá)式并將結(jié)果值存入棧頂。⒀用返回地址標(biāo)號(hào)的下標(biāo)實(shí)現(xiàn)對(duì)該標(biāo)號(hào)的轉(zhuǎn)向。第68頁,講稿共74頁,2023年5月2日,星期三69例1.6遞歸調(diào)用示例求數(shù)組元素中的最大值算法1.10遞歸求取數(shù)組元素的最大值
procedureMAX1(i)//查找數(shù)組A中最大值元素,并返回該元素的最大下標(biāo)。//globalintegern,A(1:n),j,kintegeriifi<nthenj←MAX1(i+1)//遞歸調(diào)用//ifA(i)>A(j)thenk←ielsek←jendifelsek←nendif
return(k)//遞歸調(diào)用的返回//endMAX1第69頁,講稿共74頁,2023年5月2日,星期三70消去上例中的遞歸算法1.11使用上述的規(guī)則消去例1.10中的遞歸代碼
procedureMAX2(i)localintegerj,k;globalintegern,A(1:n)i
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度環(huán)保設(shè)備采購(gòu)及運(yùn)營(yíng)維護(hù)合同2篇
- 二零二五年度出納崗位培訓(xùn)聘用合同范本3篇
- 二零二五年度高端定制家具設(shè)計(jì)與制造合同協(xié)議范本3篇
- 二零二五年度出租車行業(yè)車輛維修承包合同3篇
- 個(gè)人與個(gè)人之間特許經(jīng)營(yíng)權(quán)轉(zhuǎn)讓合同(2024版)3篇
- 2025年度人工智能技術(shù)應(yīng)用合作合同2篇
- 二零二五年度苗木育種技術(shù)合作開發(fā)合同3篇
- 二零二五年度建筑工程棄土清運(yùn)及環(huán)保處理服務(wù)合同
- 2025年圍墻安裝與智慧城市基礎(chǔ)設(shè)施連接合同3篇
- 室內(nèi)設(shè)計(jì)公司2025年度合作框架合同3篇
- 習(xí)近平法治思想概論教學(xué)課件緒論
- 寵物會(huì)展策劃設(shè)計(jì)方案
- 孤殘兒童護(hù)理員(四級(jí))試題
- 梁湘潤(rùn)《子平基礎(chǔ)概要》簡(jiǎn)體版
- 醫(yī)院急診醫(yī)學(xué)小講課課件:急診呼吸衰竭的處理
- 腸梗阻導(dǎo)管在臨床中的使用及護(hù)理課件
- 調(diào)料廠工作管理制度
- 小學(xué)英語單詞匯總大全打印
- 衛(wèi)生健康系統(tǒng)安全生產(chǎn)隱患全面排查
- GB/T 15114-2023鋁合金壓鑄件
- 貨物驗(yàn)收單表格模板
評(píng)論
0/150
提交評(píng)論