這是我最近在網上看到的關於青少年程序設計能力的評級標準。粗略看完這些標準的我老淚縱橫,堂堂大學生,程序設計能力竟然如此之低,實在慚愧(至於目前真實的水平如何,我就是不告訴你)。新的一年,要有新的目標,我就以此篇博客開啓我新的一年,與君共勉。同窗們也能夠對號入座,看一下本身的水平如何(是否是被初、高中生吊打)。算法
這裏貼出的是簡化版本,一些過長的例題就不貼出來了。編程
定義:瞭解什麼是計算機程序,可以編寫計算機程序解決簡單問題。
知識要求: 數組
一、 程序的基本結構。
二、 標識符和關鍵字。
三、 基本數據類型。
四、 常量和變量。
五、 算術表達式和關係表達式。
六、 整除,求餘運算,經常使用數學函數。
七、 賦值語句,輸入輸出語句,複合語句,條件語句(不嵌套),循環語句(不嵌 套)。 安全
能力要求:
一、 能用天然語言描述解決簡單問題的方法和步驟。
二、 能用順序,分支,循環語句實現知識要求中的方法和步驟,編寫完整程序。
三、 初步理解算法的意義。markdown
題例
給出N個數,請找出這N個數中的最小數和最大數。(so easy,我想每一個剛學會寫程序的人都會吧。)網絡
定義:瞭解什麼是算法,可以用程序設計語言實現簡單算法,解決問題。
知識要求: 數據結構
一、 邏輯表達式。
二、 條件嵌套,循環嵌套,數組。
三、 枚舉,簡單排序,簡單查找算法。
四、 素數與合數,最大公約數,最小公倍數,互質數。 數據結構和算法
能力要求:ide
一、 能用簡單枚舉算法解決實際問題,能對數據進行簡單排序和查找。
二、 具有獨立編寫和調試簡短程序的能力。函數
題例
試題描述:給出N個數,請找出第K小的數並輸出該數值。(放在這裏倒也不難,注意言外之意)
三級標準
定義:具備較強的程序實現能力,使用一種計算機程序設計語言編寫程序,解決問題。
知識要求:
一、 數制及其轉化,信息編碼,位運算。
二、 字符串類型。
三、 子程序。
四、 遞歸。
五、 邏輯運算,整數的質因數分解,隨機函數。
六、 篩選法,歐幾里得算法
能力要求:
一、 全面掌握一種計算機程序設計語言。
二、 具備運用簡單數學知識編寫程序解決問題的能力。
題例
試題描述: 給一個整數N,將N寫成質因數的乘積(數據範圍也小,對你們來講只是入門水平)
到這爲止只是入門水平,相信全部已經掌握一門語言的同窗都沒有問題,咱們接着看基礎水準(4~5級)
定義:瞭解幾種經常使用的算法,並運用這些算法編寫程序,解決問題。
知識要求:
一、 結構類型,文件操做。
二、 數據類型的內在含義。
三、 貪心法,遞推,回溯法,模擬算法。
四、 簡單的字符串處理。
五、 集合及集合的運算,加法原理和乘法原理,簡單的排列和組合。
能力要求:
一、 能根據實際額問題選擇合適的數據類型。
二、 能運用貪心、遞推、回溯、模擬等算法解決實際問題。
三、 能獨立設計簡單的測試數據,測試本身程序的正確性。
題例
校門外的樹,聽說是一道模擬題,沒作過,改天作一下。
接下來的標準對於我校絕大多數的普通學生來講,就是一種挑戰了(我校平均程序設計能力可想而知,嘆氣……對了,我也屬於人民羣衆的行列),題例就不全給出來了
定義:掌握簡單數據結構知識,並結合已學算法和數學知識編寫程序,解決問題。
知識要求:
一、 指針類型。
二、 通常線性表,隊列,堆棧,二叉樹的存儲和遍歷。
三、 排列和組合,高精度數值的處理。
四、 二分算法,快速排序,深度優先搜索,寬度優先搜索,簡單動態規劃。
五、 圓排列,可重集排列,鴿籠原理,素因數分解,冪函數,指數函數,對數函數, 三角函數,模運算,不等式基礎知識。
能力要求:
一、 能運用經常使用算法和簡單數據結構解決實際問題。
二、 能從算法本質出發,分析相關算法之間的本質聯繫。
三、 具有初步的數學建模能力。
咱們來看一下這一個等級的題目是怎麼樣的,對於我校大多數普通學生可能這輩子都忘塵莫及(悲哀)
題例
試題描述:
小明的花店新開張,爲了吸引顧客,他想在花店的門口擺上一排花,共m盆。經過調查顧客的喜愛,小明列出了顧客最喜歡的n種花,從1到n標號。爲了在門口展出更多種花,規定第i種花不能超過ai盆,擺花時同一種花放在一塊兒,且不一樣種類的花需按標號從小到大的順序依次擺列。試編程計算,一共有多少種不一樣的擺花方案。
輸入數據:
輸入共2行。
第一行包含兩個正整數n和m,中間用一個空格隔開。
第二行有n個整數,每兩個整數之間用一個空格隔開,依次表示a一、a二、…….an。
輸出數據:
輸出只有一行,一個整數,表示有多少種方案。注意:由於方案數可能不少,請輸出方案數對1000007取模的結果。
輸入樣例:
2 4
3 2
輸出樣例:
2
樣例說明:有2種擺花的方案,分別是(1,1,1,2),(1,1,2,2)。括號裏的1和2表示兩種花,好比第一個方案是前三個位置擺第一種花,第四個位置擺第二種花。
參考題解:
本題可採用簡單動態規劃(能熟練掌握動態規劃的人在我校就是人才啊)。設f[i,j]表示前i種花放在前j個花盆裏的最大方案數,那麼:
f[i,j]=sum(f[i-1,j-x]) (0<=x<=min(a[i],j))
狀態轉移方程的含義爲:前j個花盆裏,第i種花最少放0個,最多放min{a[i],j}個。
其中min{a[i],j}表示第i種花的數目和花盆的數目中較少的那一個。
邊界條件:f[1,j]=1 (i<=a[1])。
接下來就不給題例了,不是咱們的能力能夠處理的,讓咱們看一下高手級水平(6~7級)
定義:掌握基本的數據結構知識,可以根據實際需求設計算法編寫程序,解決問題。
知識要求:
一、 樹、圖的存儲。
二、 哈希表、集合數據結構。
三、 圖的最短路,生成樹算法,有向圖的拓撲排序算法。
四、 動態規劃的常見模型,分治策略,各類排序算法。
五、 可重集組合,二項式定理,數列與級數,概括與遞推,容斥原理,函數的連續 性、函數的單調性和極值。
能力要求:
一、 能對一些算法和數據結構估算時間複雜度和空間複雜度。
二、 能根據實際問題的模型選擇合適的算法和數據結構來解決問題。
三、 具有知識收集和知識管理的能力。
定義:綜合運用算法和數據結構編寫程序,解決問題。
知識要求:
一、 並查集,線段樹,哈弗曼樹,二叉排序樹,二叉堆。
二、 圖的連通性算法,最短路,最小生成樹的優化算法,二分圖的構造、斷定及匹 配,搜索算法的優化,擴展歐幾里得算法。
三、 中國剩餘定理,剩餘類,機率基礎知識,解析幾何基礎知識。
能力要求:
一、 能根據時間和空間複雜度的要求靈活構造算法和數據結構解決實際問題。
二、 具有較強的程序代碼實現能力。
三、 具有較強的概括、總結和表達能力。
在信息安全的數學基礎這門課的實驗中,光一箇中國剩餘定理的實現對同窗們來講已經夠嗆了(固然競賽中的代碼實現的要求會低一些),接下來是大師級(8~10級)
定義:掌握高級數據結構知識,能運用恰當算法編寫程序,解決較複雜問題。
知識要求:
一、 樹狀數組,字典樹,優先隊列,平衡樹。
二、 網絡流算法,複雜的分治思想,樹形動態規劃,狀態壓縮動態規劃,二分 圖的匹配,啓發式搜索。
三、 矩陣概念及其基本運算,線性方程組的解法,迭代法,費馬小定理和歐拉 定理,母函數。
能力要求:
一、 能針對複雜問題創建清晰的數學模型。
二、 能運用數學知識、高級數據結構和算法解決複雜的問題。
三、 能根據須要,開展基於寫做的學習和研究。
定義:具備對問題進行抽象和數學建模能力,能選用合適的數據結構和算法編寫程序,解決較難問題。
知識要求:
一、 塊狀鏈表,後綴數組,後綴樹,複雜的線段樹。
二、 動態規劃優化,模擬退火算法。
三、 計算幾何基礎知識(點積、叉積、凸包、半平面等知識及應用),數學指望
能力要求:
一、 能針對疑難問題創建清晰的數學模型。
2 、 能靈活運用數學知識、高級數據結構和算法解決疑難問題。
三、 具有發現問題、解決問題的探索研究能力。
定義:具備必定的提出問題、解決問題的研究能力,能構造算法與數據結構,解決開放性問題。
知識要求:
一、 最小樹形圖,自動機,動態樹,樹套樹,通常圖的匹配。
二、 雙重動態規劃,基於連通性的動態規劃,線性規劃,極大極小搜索算法。
三、 三維計算幾何,組合遊戲中的NIM問題和SG函數,羣的概念,置換羣,Burnside 引理,Polya原理,莫比烏斯反演定理,FFT(我都學完複變函數與積分變換,老師都沒講過快速傅里葉變換)。
能力要求
一、 具有創造性地運用數據結構和算法解決開放性問題的能力。
二、 具有很強的代碼編寫能力。
三、 具有提出問題、並開展相關研究的創新能力。
看完了這些標準,相信你們對本身的編程能力應該有個大概的定位了吧(沒錯,你是個菜鳥)。新的一年裏,祝願你們好好學習,好好努力,經過本身的不斷修煉,最後達到大師水平(若是有生之年能夠的話……笑)。