寫在前面
對於工大的專業課考試,考試范圍和往年題型是最重要的兩個東西。
然而算法課考試,老師在考試之前沒說題型,甚至連考試范圍都說的很模糊;智障記憶那里賣的題差不多又都是將近10年以前的題,題型上可能有一些出入,網上能夠搜到的也只有一篇13年的題型介紹(直接百度即可搜到)。因此這些都給我們的考前復習(預習)帶來了很大的不便。
因此在這里憑記憶將今年的期末考試題型記錄一下,希望對以后的學弟學妹們有幫助。
試卷構成
-
判斷題(10 * 2 分)
印象中有幾道題不是很簡單,考的知識點比較細。涵蓋的知識點主要有第一章算法的基本概念,排序算法的理解,圖算法,字符串算法,搜索等。總之就是除了分治貪心動態規划之外的其他幾章知識點的考察(但不能保證分治貪心動態規划不考),涵蓋的還算全面。
能記得的有以下幾道題:
A*算法一定可以得到最優解?
調試程序可以證明算法的正確性?
dijkstra算法是貪心算法?
如果一個基於比較的排序算法的時間復雜性是Ω(nlogn),那么他可能是基於比較算法中時間復雜性最低的算法?
一個關於堆排序的插入和刪除操作的時間復雜性的問題。(具體怎么問忘了)
一個問KMP算法的時間復雜性的問題。 -
簡答題(5 * 4分)
第一題:一個master定理的題目(很類似於ppt上的一道例題)應該是T(n) = 3T(n/4) + n^(1/2)
第二題:一個非常簡單的復雜函數階的證明,已知fx = O(g(x)), gx = o(hx),證明 fx = o(hx)
第三題:寫出0-1背包問題的輸入規模和時間復雜性
第四題:說明平攤分析的目的,以及任舉一種平攤分析方法說明其大致思想,以及使用時需要注意的點
-
第一道大題(8分)
一個最大流的問題,給了一個最大流的圖
第一問要求畫出某一步之后的余圖
第二問要求找出一條可以使流量增加1的増廣路徑
第三問要求給出一個最小割 -
第二道大題(7分)
給出一個加權有向圖,要求用A*算法把整個過程寫一遍,並給出最后所得的最短路徑。
-
第三道大題(20分)
分治算法的題,是作業題上的一道原題。
原題如下:分三個小問
第一問寫出算法思想
第二問寫偽代碼
第三問分析時間復雜度 -
第四道大題(15分)
貪心算法的題。(這道題我真是無力吐槽,考場上沒看懂怎么寫,考完之后問了幾個同學都說貪心思想和算法隨便寫的,且每個人寫的都不一樣,后來問老師那個題怎么寫,老師說只要言之有理都算對,,,)
題目大概寫一下吧,反正我覺得這題出的真差,你們復習的時候可以自己找點別的貪心算法的題做。
有一條環形公路,公路上有n個加油站,一輛油箱容量無限大的汽車在這條路上行駛,每個加油站所能給車加的最大油量為si,車在每兩個加油站之間行駛耗得油為ci。要求寫出一個貪心算法,讓這個車選擇一個加油站作為起始點,能夠成功繞這個環形公路一圈並回到起始點,如果沒有這樣的加油站,則返回-1,有則返回所選擇的起始加油站的編號。
第一問寫貪心思想
第二問證明貪心思想
第三問偽代碼
第四問時間復雜度 -
第五道大題(10分)
動態規划的題。比較簡單,多做幾道動態規划的題應該就可以做出來了。
題目大致如下:
給定如圖所示的一個樹狀圖,每個節點上都標有該點權值,該樹共有5層,從第一層的節點進入,從第五層的節點出來,要求找出一條長為4(即通過了5個節點)的路徑,使得該條路徑所經過的5個節點和最小。圖像大致如下:
第一問寫優化子結構和子問題重疊性,並要求證明之。
第二問寫dp方程。(就是關鍵部分遞歸的方程)
第三問寫偽代碼
第四部分時間復雜度。
總結及復習建議
試題格式是判斷題加簡答題加大題的形式,判斷題的話主要還是考第一章和后面幾章的基本知識點;簡答題和大題中,master定理應該必考,最大流應該必考,給一個圖用指定搜索算法寫搜索過程應該必考,分治算法,貪心算法,動態規划這三章應該是必各出一道大題的。
建議平時作業題一定要做,出原題的可能性很大;平時作業題一定要動手寫偽代碼,不能只是會這道題的思想了就作罷,否則考場上很可能寫不出偽代碼,或者把偽代碼寫成c語言或java語言(這種情況會十分的浪費時間,且沒有必要);課件上的經典算法(尤其是最長公共子序列,01背包,任務安排問題)要熟悉到會寫算法偽代碼的程度。