課程學(xué)科背景:軟件效率和穩(wěn)定性取決于軟件中所采用的算法?!端惴ㄔO(shè)計與分析》是計算機類各本科專業(yè)的核心課程。前導(dǎo)課程《程序設(shè)計基礎(chǔ)》和《數(shù)據(jù)結(jié)構(gòu)》使得學(xué)生基本掌握了基本程序控制結(jié)構(gòu)和常用數(shù)據(jù)結(jié)構(gòu),本課程旨在培養(yǎng)學(xué)生能綜合運用已有數(shù)學(xué)知識和程序設(shè)計技能,編寫出解決實際問題的優(yōu)良程序,著力培養(yǎng)學(xué)生的算法設(shè)計與分析能力以及理論結(jié)合實際的能力。它不僅為今后專業(yè)課學(xué)習(xí)打下堅實的理論基礎(chǔ)和技術(shù)基礎(chǔ),而且為復(fù)雜問題求解和軟件開發(fā)提供必要的理論和方法。
課程開設(shè)的目的和意義:通過本課程學(xué)習(xí),學(xué)生能夠熟悉計算機求解實際問題中一些經(jīng)典算法的設(shè)計思路和性能特點,掌握分析算法的基本方法和設(shè)計算法的基本原理和技巧,具備針對具體實際問題能選擇恰當(dāng)策略去設(shè)計算法和評價算法的能力,并養(yǎng)成努力設(shè)計盡可能高效率算法的良好素養(yǎng)。
課程主要內(nèi)容:本課程主要學(xué)習(xí)常見的非數(shù)值型算法的分析和設(shè)計方法及其典型應(yīng)用,主要內(nèi)容包括算法分析的基本方法和算法設(shè)計的基本技術(shù):分治策略、動態(tài)規(guī)劃、貪心法、回溯與分支限界等。
教學(xué)與考核方式:采用課堂教學(xué)和編程實踐結(jié)合的方式進(jìn)行教學(xué)。課堂上講授算法分析的基本方法和算法設(shè)計的基礎(chǔ)理論知識;編程實踐中通過具體案例引導(dǎo)學(xué)生深入分析各類算法策略思想,設(shè)計出求解具體實際問題的有效算法,分析算法復(fù)雜度,培養(yǎng)學(xué)生解決復(fù)雜問題的能力。課程考核方式包括閉卷筆試(占70%)和編程實踐(占30%)。
課程特色與思政教育:本課程的教學(xué)以能力培養(yǎng)為導(dǎo)向,教學(xué)中理論與編程實踐緊密結(jié)合,培養(yǎng)學(xué)生通過分析與建模、算法設(shè)計與實現(xiàn)來創(chuàng)造性地解決較復(fù)雜工程問題的能力。本課程中各種算法設(shè)計基本方法,包括分治策略、貪心法、動態(tài)規(guī)劃、回溯與分支限界等,都是人們?nèi)粘I钪薪鉀Q問題的方法和技術(shù)的提煉,不僅蘊含有深刻的數(shù)學(xué)思想,而且閃爍著哲學(xué)智慧的光芒。可充分挖掘各種技術(shù)的思想內(nèi)涵,適時地對學(xué)生進(jìn)行思政教育;同時結(jié)合各種編程實驗任務(wù)和解決復(fù)雜工程問題的實踐體驗,讓學(xué)生感悟優(yōu)化布局、節(jié)省資源意義,感受勇于創(chuàng)新、追求卓越的精神。
一、課程目標(biāo)
LO1. 能夠運用算法分析基本方法對具體算法進(jìn)行分析、比較和綜合,具備評價算法的基本能力。 LO2. 能夠根據(jù)給定的具體問題模型,獨立地選擇恰當(dāng)?shù)乃惴ú呗栽O(shè)計出能有效求解問題的算法。 LO3. 能夠針對較復(fù)雜工程問題運用計算思維進(jìn)行分析、建模、算法設(shè)計和編程實現(xiàn)。 LO4. 能夠通過解決復(fù)雜工程問題的實踐逐漸提高分析問題和解決問題的能力,具備優(yōu)化布局、節(jié)省資源的意識,感受勇于創(chuàng)新、追求卓越的精神。 |
二、教學(xué)內(nèi)容及基本要求
單元一:基礎(chǔ)知識 | 學(xué)時:6 | 支撐課程目標(biāo):LO1,LO4 | ||||
教學(xué)內(nèi)容 | 1.課程簡介:課程的學(xué)科地位、教學(xué)內(nèi)容、學(xué)習(xí)目標(biāo)、學(xué)習(xí)方法和考核方式等 2.有關(guān)算法的基本概念 3. 算法的偽碼描述 4. 算法分析的基本方法 5.算法分析的數(shù)學(xué)基礎(chǔ):函數(shù)的漸近界、求和方法、遞歸方程求解方法 | |||||
學(xué)習(xí)目標(biāo) | 1. 能夠正確使用漸近表示算法復(fù)雜度的記號。 2. 能夠推導(dǎo)常用求和公式,用定積分方法近似求和,求解簡單常見的遞歸關(guān)系。 3. 能夠運用算法分析的基本方法和數(shù)學(xué)知識去分析和求解具體算法的時間復(fù)雜度。 | |||||
教學(xué)方式 | 1. 課堂教學(xué):采用PPT講授理論知識,輔以板書展示分析和推理過程。 2. 作業(yè):布置算法分析作業(yè)題。 3. 思政教育: (1)算法復(fù)雜度用于度量算法運行期間的時空開銷,算法設(shè)計與分析目的是為了用較少的資源解決問題。由此增強學(xué)生節(jié)約資源、提高效率意識。 (2)算法運行時間與算法空間開銷一個主要區(qū)別是時間不可重復(fù)使用,空間可重復(fù)使用。引導(dǎo)學(xué)生感悟時間的寶貴,逝去的青春不再來,要珍惜現(xiàn)在讀書學(xué)習(xí)的好時光。 (3)算法的漸近復(fù)雜度,比如O(n)和O(log10n),對于較小的n而言,n小于log10n,但對于較大的n,n大于log10n,且隨著n增大,其差距越來越大。引導(dǎo)學(xué)生感悟大小和高低不能僅看短期效應(yīng),要看得長遠(yuǎn)。 | |||||
評價方式 | 1. 算法分析作業(yè):漸近表示算法復(fù)雜度記號的使用、遞歸方程的求解、具體算法時間復(fù)雜度的分析。 2.期末考核:算法分析和算法優(yōu)化的相關(guān)試題。 | |||||
支撐理由 | 1. 支撐課程目標(biāo)LO1: 作業(yè)題和期末考核中有關(guān)算法分析的相關(guān)題目旨在檢驗?zāi)芊裾_使用算法相關(guān)概念和算法分析基本方法和相關(guān)數(shù)學(xué)知識。 2. 支撐課程目標(biāo)LO4: 期末考核中算法設(shè)計類試題旨在檢驗?zāi)芊裢ㄟ^比較分析逐步改進(jìn)和優(yōu)化算法。 | |||||
單元二:分治策略 | 學(xué)時:6 | 支撐課程目標(biāo):LO1,LO2,LO4 | ||||
教學(xué)內(nèi)容 | 1.分治策略的基本思想 2.分治算法的分析技術(shù) 3.改進(jìn)分治算法的途徑 4.典型實例 4.1快速排序算法 4.2選擇問題 4.3 n-1次多項式在全體2n次方根上的求值 | |||||
學(xué)習(xí)目標(biāo) | 1. 能夠使用分治策略設(shè)計求解某些問題的分治算法,并能夠在問題實例上模擬算法的執(zhí)行。 2. 能夠分析分治算法的時間復(fù)雜度,并能夠嘗試通過減少子問題數(shù)目或減少合并步驟的時間等策略來改進(jìn)分治算法。 3. 能夠領(lǐng)悟三個典型應(yīng)用的精巧分治算法的設(shè)計思想,能編程實現(xiàn)算法。 | |||||
教學(xué)方式 | 1. 課堂教學(xué):采用PPT講授理論知識,輔以動畫展示算法執(zhí)行過程。 2. 作業(yè)和編程實踐:布置在線編程作業(yè)題。 3. 思政教育: 分而治之是解決問題的一種常見策略。分治法中如果不對幾個環(huán)節(jié)采用優(yōu)化措施,可能與窮舉法法時間復(fù)雜度一樣。引導(dǎo)學(xué)生感悟日常處理問題中采用表面上不同的處理方法不一定能導(dǎo)致理想的結(jié)果,還是要利用問題的特征針對各環(huán)節(jié)做得最好。 | |||||
評價方式 | 1. 算法分析作業(yè):分治算法的設(shè)計和時間復(fù)雜度分析。 2. 編程實踐作業(yè): (1)編程實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中幾個經(jīng)典的排序算法(包括選擇排序、插入排序、歸并排序、快速排序等),觀察每個算法在n=1000,5000,10000,50000的隨機算例上的比較次數(shù)和運行時間,并分析其運行時間、比較次數(shù)與算法復(fù)雜度的關(guān)系。 (2)針對具體問題,設(shè)計分治算法并實現(xiàn)算法。 3.期末考核:分治算法設(shè)計和分析試題。 | |||||
支撐理由 | 1. 支撐課程目標(biāo)LO1:作業(yè)題中分治算法的分析題、編程實踐中典型分治算法的實現(xiàn)及性能測試題旨在檢驗?zāi)芊穹治龊捅容^常見算法的性能。 2. 支撐課程目標(biāo)LO2:編程實踐中分治算法設(shè)計及實現(xiàn)題旨在檢驗?zāi)芊裨O(shè)計求解簡單問題的分治型算法且能有效實現(xiàn)算法。 3. 支撐課程目標(biāo)LO4:期末考核中分治算法設(shè)計類試題旨在檢驗?zāi)芊裢ㄟ^問題分析來逐步改進(jìn)和優(yōu)化算法。 | |||||
單元三:動態(tài)規(guī)劃 | 學(xué)時:8 | 支撐課程目標(biāo):LO2,LO3,LO4 | ||||
教學(xué)內(nèi)容 | 1.動態(tài)規(guī)劃的設(shè)計思想 2.動態(tài)規(guī)劃算法的設(shè)計要素 3.動態(tài)規(guī)劃算法的典型應(yīng)用 3.1 投資問題 3.2 背包問題 3.3 最長公共子序列LCS 3.4 圖像壓縮 3.5 最大子段和 3.6 最優(yōu)二分檢索樹 3.7 生物信息學(xué)中的動態(tài)規(guī)劃算法 | |||||
學(xué)習(xí)目標(biāo) | 1. 能夠判斷一個具體問題是否適合用動態(tài)規(guī)劃方法求解。 2. 能夠采用動態(tài)規(guī)劃方法設(shè)計出求解具體問題的算法,并能夠有效地實現(xiàn)算法,能夠在問題實例上模擬算法的執(zhí)行。 3. 能夠領(lǐng)悟幾個典型應(yīng)用的動態(tài)規(guī)劃算法的設(shè)計思想,能編程實現(xiàn)算法。 4. 能夠領(lǐng)悟并感受動態(tài)規(guī)劃方法所蘊含的哲理。 | |||||
教學(xué)方式 | 1.課堂教學(xué):采用PPT講授理論知識,輔以動畫展示算法執(zhí)行過程。 2. 作業(yè)和編程實踐:布置在線編程作業(yè)題。 3. 思政教育: 動態(tài)規(guī)劃法基本思想是為了避免重復(fù)計算,利用空間來換時間。對于這種技術(shù),可以適時教育學(xué)生要厲行節(jié)約,節(jié)省時間資源,提高工作效率。 | |||||
評價方式 | 1. 編程實踐作業(yè):針對較簡單的應(yīng)用問題,直接設(shè)計動態(tài)規(guī)劃算法并編程實現(xiàn)。針對較復(fù)雜的實際應(yīng)用問題,從計算思維角度,對問題進(jìn)行分析、建模、設(shè)計算法并實現(xiàn)算法。 2.期末考核:動態(tài)規(guī)劃算法設(shè)計與分析題。 | |||||
支撐理由 | 1. 支撐課程目標(biāo)LO2:編程實踐中針對簡單問題的編程題旨在檢驗?zāi)芊裼脛討B(tài)規(guī)劃方法設(shè)計求解問題的算法并編程實現(xiàn)算法。 2. 支撐課程目標(biāo)LO3:編程實踐中針對較復(fù)雜的實際應(yīng)用問題的編程題旨在檢驗?zāi)芊駨挠嬎闼季S的角度,對問題進(jìn)行分析、建模、設(shè)計算法并實現(xiàn)算法。 3. 支撐課程目標(biāo)LO4:期末考核中動態(tài)規(guī)劃算法試題旨在檢驗?zāi)芊裢ㄟ^問題分析逐步實現(xiàn)對算法進(jìn)行優(yōu)化。 | |||||
單元四:貪心法 | 學(xué)時:5 | 支撐課程目標(biāo):LO1,LO2,LO3 | ||||
教學(xué)內(nèi)容 | 1.貪心算法的設(shè)計思想 2.關(guān)于貪心算法的正確性證明 3.對貪心算法得不到最優(yōu)解情況的處理 4.貪心算法的典型應(yīng)用 4.1 最優(yōu)前綴碼 4.2 最小生成樹 4.3 單源最短路徑 | |||||
學(xué)習(xí)目標(biāo) | 1. 能夠判斷一個具體問題是否適合用貪心法求解,能夠針對具體問題設(shè)計其貪心算法并能嘗試證明算法的正確性。 2. 能夠針對貪心法不能得到正確解的問題,嘗試設(shè)計動態(tài)規(guī)劃算法或其它算法來求解。 3. 能夠領(lǐng)悟幾個典型應(yīng)用的貪心算法的設(shè)計思想,能編程實現(xiàn)算法,并能在問題實例上模擬算法的執(zhí)行。 | |||||
教學(xué)方式 | 1. 課堂教學(xué):采用PPT講授理論知識,輔以動畫展示算法執(zhí)行過程。 2. 編程實踐作業(yè):布置在線編程作業(yè)題。 3. 思政教育: 針對一個問題通??梢栽O(shè)計出多種不同的貪心算法,這些貪心算法都是依據(jù)局部信息做出的當(dāng)前最好選擇,但不是所有貪心算法都能最終導(dǎo)出全局最優(yōu)解。引導(dǎo)學(xué)生感悟個人利益的考慮要長遠(yuǎn)來看,符合集體利益、國家利益才是最好的。 | |||||
評價方式 | 1. 編程實踐作業(yè):針對具體應(yīng)用問題,設(shè)計其貪心算法并編程實現(xiàn)。 2.期末考核:貪心算法設(shè)計、正確性證明及在問題實例上模擬算法執(zhí)行。 | |||||
支撐理由 | 1. 支撐課程目標(biāo)LO1:期末考核中貪心算法證明類試題旨在檢驗?zāi)芊穹治龊?/span>證明貪心算法的正確性。 2. 支撐課程目標(biāo)LO2:期末考核中貪心算法設(shè)計類試題旨在檢驗?zāi)芊裨O(shè)計求解問題的貪心算法。 3. 支撐課程目標(biāo)LO3:編程實踐中針對實際應(yīng)用問題的貪心算法編程題旨在檢驗?zāi)芊駨挠嬎闼季S的角度,對問題進(jìn)行分析、建模、設(shè)計算法并實現(xiàn)算法。 | |||||
單元五:回溯與分支限界 | 學(xué)時:5 | 支撐課程目標(biāo): LO2,LO3,LO4 | ||||
教學(xué)內(nèi)容 | 1. 回溯算法的基本思想和適用條件 2. 回溯算法的設(shè)計步驟 3. 回溯法的效率估計和改進(jìn)途徑 4. 分支限界 4.1背包問題 4.2 最大團(tuán)問題 4.3 貨郎問題 4.4 圓排列問題 4.5 連續(xù)郵資問題 | |||||
學(xué)習(xí)目標(biāo) | 1. 能夠使用回溯算法求解具體問題,并能熟練編程序?qū)崿F(xiàn)算法。 2.能夠用隨機方法對回溯算法進(jìn)行效率評估及算法改進(jìn)。 3. 能夠使用分支限界算法求解具體問題,并能熟練編程序?qū)崿F(xiàn)算法。 4. 能夠領(lǐng)悟幾個典型應(yīng)用的分支限界算法的設(shè)計思想,能編程實現(xiàn)算法,并能在問題實例上模擬算法的執(zhí)行。 | |||||
教學(xué)方式 | 1. 課堂教學(xué):采用PPT講授理論知識,輔以動畫展示算法執(zhí)行過程。 2. 實驗教學(xué):布置在線編程作業(yè)題。 3. 思政教育: (1)針對回溯法的基本思想,引導(dǎo)學(xué)生感悟日常處理問題中如何提高效率,避免做無用功。 (2)針對典型應(yīng)用中的分支限界算法,啟發(fā)學(xué)生感悟其代價函數(shù)中所蘊含的哲學(xué)思想,思考這些思想如何推廣去求解其他問題實例。 | |||||
評價方式 | 1. 編程實踐作業(yè):回溯法和分支限界法的應(yīng)用編程。 2.期末考核:回溯和分支限界算法的設(shè)計和優(yōu)化,在問題實例上模擬算法的執(zhí)行。 | |||||
支撐理由 | 1. 支撐課程目標(biāo)LO2:編程實踐中針對簡單應(yīng)用問題的編程題旨在檢驗?zāi)芊裼迷O(shè)計回溯算法求解問題并編程實現(xiàn)算法。 2. 支撐課程目標(biāo)LO3:編程實踐中針對較復(fù)雜的實際應(yīng)用問題的編程題旨在檢驗?zāi)芊駨挠嬎闼季S的角度,對問題進(jìn)行分析、建模、設(shè)計算法并實現(xiàn)算法。 3. 支撐課程目標(biāo)LO4:編程實踐和期末考核中涉及到對較復(fù)雜工程問題的求解旨在檢驗?zāi)芊裢ㄟ^對問題深入分析逐步優(yōu)化算法。 | |||||
課程總復(fù)習(xí)課 | 學(xué)時:2 | 支撐課程目標(biāo):LO1,LO2,LO3,LO4 | ||||
教學(xué)內(nèi)容 | 1. 復(fù)習(xí)各單元的主要知識點。 2. 講評各單元的相關(guān)練習(xí)題。 | |||||
學(xué)習(xí)目標(biāo) | 1. 能夠通過復(fù)習(xí)課梳理清楚本課程的主要知識點。 2. 能夠通過講評練習(xí)題鞏固算法設(shè)計與分析的典型方法和技術(shù)。 | |||||
教學(xué)方式 | 課堂教學(xué):采用PPT講授,回顧主要知識點,并講評相關(guān)練習(xí)題的解題思路。 | |||||
評價方式 |
期末考核試題 | |||||
支撐理由 | 期末考核試題中包含了本課程的主要知識點和相關(guān)習(xí)題中用到的方法和技術(shù)方法,覆蓋了所有課程目標(biāo)。 | |||||
三、建議教材及教學(xué)參考書
【1】屈婉玲,劉田,張力昂,王捍貧 編著.算法設(shè)計與分析(第3版).北京:清華大學(xué)出版社, 2023年1月.
【2】Jon Kleinberg, éva Tardos著,張立昂,屈婉玲 譯. 算法設(shè)計(Algorithm Design).北京:清華大學(xué)出版社, 2007年3月.
四、考核與成績評定標(biāo)準(zhǔn)
1. 考核方式
考核方式 | 考核要求 | 比重(%) | 對應(yīng)的課程目標(biāo)及比例(%) | |
平時作業(yè) | 作業(yè)和編程實踐 (見成績評定標(biāo)準(zhǔn)) | 30 | LO1 | 20 |
LO2 | 30 | |||
LO3 | 30 | |||
LO4 | 20 | |||
期末考試 | 閉卷筆試 (按試卷評分標(biāo)準(zhǔn)評分) | 70 | LO1 | 20 |
LO2 | 30 | |||
LO3 | 30 | |||
LO4 | 20 |
2. 成績評定標(biāo)準(zhǔn)
1)作業(yè)成績評分標(biāo)準(zhǔn)表
評價標(biāo)準(zhǔn) | ||||
90 ~100分 | 80 ~89分 | 70 ~79分 | 60 ~69分 | 0 ~59分 |
進(jìn)度及完成題目數(shù)量 (權(quán)重0.4) | 按時提交且完成題目數(shù)量80%以上 | 按時提交且完成題目數(shù)量60%以上 | 按時提交且完成題目數(shù)量40%以上 | 補交完成 |
掌握程度 (權(quán)重0.5) | 掌握80%以上 | 掌握60%以上 | 掌握40%以上 | 掌握40%以下 |
創(chuàng)新性 (權(quán)重0.1) | 提出不同解決辦法 | 只有一種解決辦法 | 能提出不同辦法,但可靠性不足 | 不能提出有效解決辦法 |
2)實驗實踐成績評分標(biāo)準(zhǔn)表
評價標(biāo)準(zhǔn) | ||||
90 ~100分 | 80 ~89分 | 70 ~79分 | 60 ~69分 | 0 ~59分 |
完成進(jìn)度 (權(quán)重0.3) | 提前提交 | 按時提交 | 延時提交 | 補交完成 |
結(jié)果正確性 (權(quán)重0.7) | 程序能正常運行,在80%以上測試用例上運行結(jié)果正確 | 程序能正常運行,在60%以上測試用例上運行結(jié)果正確 | 程序能正常運行,在40%以上測試用例上運行結(jié)果 | 程序未能運行,或在40%以下測試用例上運行結(jié)果不正確 |
3)期末考試評分標(biāo)準(zhǔn)
根據(jù)當(dāng)年期末考試試卷的評分標(biāo)準(zhǔn)來評定成績。