算法導(dǎo)論學(xué)習(xí)報告參考
算法導(dǎo)論學(xué)習(xí)報告參考
第一部分 學(xué)習(xí)內(nèi)容歸納
“計算機算法是以一步接一步的方式來詳細描述計算機如何將輸入轉(zhuǎn)化為所要求的輸出的過程,或者說,算法是對計算機上執(zhí)行的計算過程的具體描述。”(參考文獻:百度百科)《算法設(shè)計與分析》是一門面向設(shè)計,在計算機科學(xué)中處于核心地位的課程。這門課程主要講授了在計算機應(yīng)用中經(jīng)常遇到的問題和求解的方法,分治法、動態(tài)規(guī)劃法、隨機算法等設(shè)計算法的基本原理、技巧和算法復(fù)雜性的分析,以及計算理論簡介。
第一部分“概論和數(shù)學(xué)準備”在簡單了解了算法的基本概念和復(fù)雜性、研究步驟等幾個重要知識點后,著重學(xué)習(xí)了算法的數(shù)學(xué)基礎(chǔ),包括生成函數(shù)、差方方程的求解等,主要適用于求解算法的時間復(fù)雜性。
“任何可以用計算機求解的問題所需要的計算時間都與其規(guī)模有關(guān):問題的規(guī)模越小,解題所需的計算時間往往也越短,從而也就比較容易處理。”(參考文獻:《計算機算法設(shè)計與分析(第3版)》)而第二部分介紹的算法常用技術(shù)之首——分治法就運用了這樣的思想。分治法的要領(lǐng)在于Divide(子問題的劃分)-Conquer(子問題的求解)-Combine(子問題解的組合)。由于子問題和原問題是同類的,遞歸的思想在分治法中顯得尤其重要,它們經(jīng)常同時運用在算法設(shè)計中。這部分內(nèi)容從Select(求第k小元)算法,尋找最近點對算法和快速傅立葉變換FFT等實際應(yīng)用中深化對分治法思想的理解,同時也強調(diào)了平衡思想的重要性。
第三部分“動態(tài)規(guī)劃”與分治法類似,同樣是把問題層層分解成規(guī)模越來越小的同類型的子問題。但與分治法不同的是,分治法中的子問題通常是相互獨立的,而動態(tài)規(guī)劃法中的子問題很多都是重復(fù)的,因此通常采用遞推的方法以避免重復(fù)計算。然而,也不是所有的情況下都采用遞推法,當(dāng)有大量的子問題無需求解時,更好的方式是采用動態(tài)規(guī)劃法的變形——備忘錄方法。通常需要用到動態(tài)規(guī)劃法求解的問題都具有子問題的高度重復(fù)性和最優(yōu)子結(jié)構(gòu)性質(zhì)兩大特征,這也是我們分析問題和設(shè)計算法時的關(guān)鍵點。最長公共子序列LCS問題和最優(yōu)二分搜索樹就是從動態(tài)規(guī)劃法的兩個主要特征角度分析問題,進而設(shè)計出相應(yīng)的解決算法的。而這部分內(nèi)容中的另一個問題——流水作業(yè)調(diào)度,則告訴我們采用動態(tài)規(guī)劃時偶爾也得不到高效的算法,我們要學(xué)會將已有的知識靈活運用,適當(dāng)加工。
第四部分“集合算法”中首先介紹了一種分析算法復(fù)雜度的手法——平攤分析(Amortized Analysis)。與之前我們所接觸的算法分析方法即逐一考慮執(zhí)行每條指令所需的時間復(fù)雜度再進行累加的方法不同,平攤分析是對若干條指令從整體角度考慮其時間復(fù)雜度,通過這樣的方法獲得的時間復(fù)雜度更加貼近實際的情況。平攤分析的主要方法有聚集方法,會計方法和勢能方法。聚集方法將指令的時間復(fù)雜度分類計算再相加;會計方法采用了耗費提前計算的思想;勢能方法引入了勢函數(shù)的概念,從每步操作的數(shù)據(jù)結(jié)構(gòu)狀態(tài)和勢函數(shù)的關(guān)系角度分析得出操作的平攤代價。“集合算法”這一部分主要分析了Union(合并集合)和Find(給出元素所在集合名)這兩種運算。從上學(xué)期的《數(shù)據(jù)結(jié)構(gòu)》課程的學(xué)習(xí)中,我們就已經(jīng)發(fā)現(xiàn)集合和樹之間的關(guān)系是密不可分的,我們經(jīng)常用樹結(jié)構(gòu)來表示集合。而2-3樹是一種特殊的每個內(nèi)結(jié)點都只有2個或3個兒子的樹,廣泛的應(yīng)用于可實現(xiàn)Member(查找)、Insert(插入)、Delete(刪除)操作的數(shù)據(jù)結(jié)構(gòu)——字典,可實現(xiàn)Insert、Delete、Union和Min(查找最小葉結(jié)點)的數(shù)據(jù)結(jié)構(gòu)——可并堆,可實現(xiàn)Insert、Delete、Find、Concatenate(保序合并)和Split(分裂)的數(shù)據(jù)結(jié)構(gòu)——可連接隊列等。
之前討論的算法中每一步計算步驟都是確定的,然而第五部分“隨機算法”中所討論的隨機化算法允許算法在執(zhí)行的過程中隨機的選擇下一個執(zhí)行步驟。“在許多情況下,當(dāng)算法在執(zhí)行過程中面臨一個選擇時,隨機性選擇常比最優(yōu)選擇省時。因此隨機化算法可在很大程度上降低算法的復(fù)雜度。”(參考文獻:《計算機算法設(shè)計與分析(第3版)》)隨機化算法對問題用同一輸入算法求解時可能會得到完全不同的效果,這是它的基本特征——算法在執(zhí)行時產(chǎn)生真正隨機的結(jié)果。一般情況下,隨即算法分為兩大類——Las Vegas算法和Monte Carlo算法。Las Vegas算法不會得到不準確的結(jié)果,但有時卻會找不到解,這時就需要重復(fù)調(diào)用算法進行計算。而Monte Carlo算法用來求取問題的準確解。它能保證求得一個截但無法保證其正確性,這是Monte Carlo算法的主要缺點。不過由于每次執(zhí)行的算法都是獨立的,通過反復(fù)執(zhí)行算法可以有效的將發(fā)生錯誤的概率大大降低。另外,對于一個已經(jīng)有了平均性質(zhì)較好的確定性算法的問題,通過Sherwood隨機化方法可將確定性算法改成隨機算法,以解決其在最壞情況下效率不高的問題,提高了算法的性能。隨機化算法為很多用確定性算法難以很好的解決的難解問題提供了高效的解決途徑,具有很高的實用價值。
第六部分“NP完全性理論與近似算法”首先介紹了計算模型、確定性和非確定性圖靈(Turing)機。“在進行問題的計算復(fù)雜性分析之前,首先必須建立求解問題所用的計算模型,包括定義該計算模型中所用的基本運算,其目的是使問題的計算復(fù)雜性分析有一個共同的客觀尺度。”(參考文獻:《計算機算法設(shè)計與分析(第3版)》)隨機存取機RAM(Random Access Machine)、隨機存取存儲程序機RASP(Random Access Stored Program Machine)和圖靈機(Turing Machine)是三種基本的計算模型。RAM和RASP的相同處在于都有各種尋址指令且時間復(fù)雜性數(shù)量級相同,不同處在于RAM程序的不允許修改和RASP程序的可修改性。RAM程序和RASP程序之間可以相互模擬。圖靈機可以計算函數(shù)部分的遞歸函數(shù),涉及到遞歸可枚舉集、遞歸集、原始遞歸集、部分遞歸函數(shù)、完全遞歸函數(shù)和原始遞歸函數(shù)。確定性圖靈機DTM和非確定性圖靈機NDTM的差別在于,NDTM的每一步動作允許有若干個選擇,且它的ID序列通常是由樹描述的,而DTM的ID序列是線性的。這部分接著又進一步深入介紹NP完全性理論和解NP難問題的近似算法。NP是能在多項式時間內(nèi)被一臺NDTM所接受的語言。NP完全問題是當(dāng)前計算機算法領(lǐng)域的熱點研究課題。
第二部分 學(xué)習(xí)心得
學(xué)習(xí)之初剛開始看到那些函數(shù)以及一大堆數(shù)學(xué)公式的時候都覺得頭大,一時都摸不清這些復(fù)雜的式子是用來干什么的,甚至都以為學(xué)的不是算法而是高數(shù)了。后來在接觸到分治法等算法思想后,在老師講解的例子中學(xué)會了對那些式子的應(yīng)用。課后也在實際的應(yīng)用中真正掌握了第一部分所講的數(shù)學(xué)知識,懂得了那些數(shù)學(xué)基礎(chǔ)對算法研究的重要性。所以說,只有當(dāng)自己學(xué)會在問題中運用了,才算是真正學(xué)會了那些知識。
算法的思想看著都似乎簡單易懂,就算思路復(fù)雜的只要認真研究也比較容易理解,但要真正的在實驗中、在實際問題的解決過程中運用出來就不是那么容易的一件事了。對于同一個問題,往往都有好幾種不同的算法,就像要求分別運用。
【算法導(dǎo)論學(xué)習(xí)報告參考】相關(guān)文章:
學(xué)習(xí)報告的格式參考04-12
超聲報告模板參考02-15
測試報告參考范例02-15
關(guān)于公文報告的格式參考12-24
社區(qū)任職報告參考范文03-19
關(guān)于 期貨報告范文參考03-07
《中西醫(yī)結(jié)合導(dǎo)論》的學(xué)習(xí)心得體會(精選10篇)11-06
學(xué)校工作報告參考03-25
高中英語結(jié)題報告_參考02-15