黃成 中南林業(yè)科技大學(xué)涉外學(xué)院
隨著社會的不斷進(jìn)步、經(jīng)濟(jì)的發(fā)展和計算機(jī)存儲技術(shù)的躍升,企業(yè)重視的諸如郵件、報表、圖紙、音頻、視頻等各種類型文件的大量產(chǎn)生和存儲,各大公司數(shù)據(jù)量成指數(shù)型增長。各公司管理層開始認(rèn)識到數(shù)據(jù)的價值,不再依靠進(jìn)行抽樣調(diào)查獲取信息,而是重視起全體數(shù)據(jù)的采集和處理。因而計算機(jī)類專業(yè)開始需要面對一個新的軟件時代--大數(shù)據(jù)時代的來臨。它不再是往日的選取幾個百分比的數(shù)據(jù)進(jìn)行統(tǒng)計分析,以最少的數(shù)據(jù)獲取最多的信息,而是面對全體數(shù)據(jù)進(jìn)行統(tǒng)計,事無巨細(xì)全部包括,要求盡量做到信息全面而具體。
一般大數(shù)據(jù)處理被定義為10TB規(guī)模以上數(shù)據(jù)量,而企業(yè)經(jīng)常將多個數(shù)據(jù)集放置在一起,所以經(jīng)常是形成PB這個數(shù)量級的數(shù)據(jù)集。這個數(shù)量級以上的數(shù)據(jù)無法使用傳統(tǒng)的數(shù)據(jù)庫工具進(jìn)行數(shù)據(jù)的抓取、數(shù)據(jù)的篩選、數(shù)據(jù)的處理和數(shù)據(jù)的管理。其次由于數(shù)據(jù)來源廣泛,有從從互聯(lián)網(wǎng)上爬取的網(wǎng)頁、通訊記錄、網(wǎng)絡(luò)空間中交互產(chǎn)生的音頻和視頻文件;有來自于企業(yè)內(nèi)部ERP系統(tǒng)、各種POS終端及網(wǎng)上支付系統(tǒng)等業(yè)務(wù)系統(tǒng)的郵件、報表、日志文件等各種數(shù)據(jù)類別,已經(jīng)不能單純地使用結(jié)構(gòu)化數(shù)據(jù)庫的模式組織處理了。它包括了結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)等多種形式,所以越來越依靠專門的大數(shù)據(jù)平臺所提供的專業(yè)軟件的支持。由hadoop,spark等專業(yè)大數(shù)據(jù)架構(gòu)下的專業(yè)大數(shù)據(jù)軟件MapReduce、Sclala編程處理PB級的大數(shù)據(jù)。在這里數(shù)據(jù)處理和編程都嚴(yán)重依賴針對性的算法支持。
因?yàn)橛嬎銠C(jī)科學(xué)之中算法被公認(rèn)為計算機(jī)軟件運(yùn)行的奠基石。無論使用的計算機(jī)編程語言、架構(gòu)體系如何變化,算法的地位始終不可動搖。本科階段的算法課程就是《算法分析與設(shè)計》。它是一門重要的專業(yè)基礎(chǔ)課,通常是計算機(jī)專業(yè)大二下期或是大三上期開課。作為《高級語言程序設(shè)計》和《數(shù)據(jù)結(jié)構(gòu)》課程的后續(xù),理論性和實(shí)踐性都很強(qiáng)。就如同C語言和JAVA語言,雖然語言和結(jié)構(gòu)不同,但是所使用的算法沒有差異。所以培養(yǎng)應(yīng)用型人才,其實(shí)質(zhì)就是在培養(yǎng)實(shí)際運(yùn)用算法和數(shù)據(jù)結(jié)構(gòu)解決問題的能力。這個應(yīng)該成為《算法分析與設(shè)計》課程教學(xué)的核心任務(wù)。
《算法分析與設(shè)計》與其他計算機(jī)專業(yè)課不同的是,應(yīng)用型本科生算法課程更應(yīng)注重學(xué)生對實(shí)際問題的分析能力以及根據(jù)問題場景環(huán)境的變化而靈活應(yīng)用所學(xué)知識能力的養(yǎng)成,培養(yǎng)的是軟件實(shí)現(xiàn)的思路。而在大數(shù)據(jù)時代,當(dāng)使用場景和編程語言不同而算法核心思想不變的情況下,算法的使用類別是一定會和傳統(tǒng)的算法應(yīng)用有所不同和側(cè)重的。以往的數(shù)據(jù)處理算法執(zhí)著于精確,而大數(shù)據(jù)時代我們必須接受不精確,讓數(shù)據(jù)自己說話,而不是我們預(yù)設(shè)目標(biāo)。具體來說就是大數(shù)據(jù)是對現(xiàn)象發(fā)生過程的全記錄。通過對數(shù)據(jù)的處理挖掘而不是精確獲取中間的表面信息或是關(guān)鍵字段,不僅能夠了解對象,還能分析對象,掌握對象運(yùn)作的規(guī)律,挖掘?qū)ο髢?nèi)部的結(jié)構(gòu)與特點(diǎn),甚至能了解對象自己都不知道的信息。這些都是傳統(tǒng)數(shù)據(jù)所無法體現(xiàn)的,也是大數(shù)據(jù)承載信息的豐富之處。這就例如人們可以通過網(wǎng)頁信息對明星的描述與概括,如這個人的身高、體重、出生年月、興趣愛好、親朋好友等數(shù)據(jù)能知道和認(rèn)識這個人。這些算是傳統(tǒng)數(shù)據(jù)或是稱為表象內(nèi)容。而通過大數(shù)據(jù)的數(shù)據(jù)處理能從他的表情中讀出心理活動,從眼神中看出閱歷,從衣著打扮中讀出品味,從鞋子上讀出生活習(xí)慣。而這些深層次的非表象的內(nèi)容需要通過算法去挖掘出來,這就是我們說的數(shù)據(jù)分析與數(shù)據(jù)挖掘。
在這個大數(shù)據(jù)體系里算法多數(shù)使用的是分類樹、聚類算法、向量機(jī)、最大期望算法、最近鄰分類算法等,討論的是數(shù)據(jù)的篩選和分類。而非傳統(tǒng)的枚舉、分治、貪心、動態(tài)規(guī)劃等算法的直接應(yīng)用。所以所用算法應(yīng)用的差距是客觀存在的,導(dǎo)致一般的計算機(jī)專業(yè)本科生畢業(yè)以后想要從事大數(shù)據(jù)行業(yè)困難重重。所以以培養(yǎng)應(yīng)用型、工程型本科生的計算機(jī)專業(yè)必然要變更算法的教授重點(diǎn),以適應(yīng)社會和企業(yè)的需求變化。
根據(jù)大數(shù)據(jù)技術(shù)教學(xué)經(jīng)驗(yàn)和算法設(shè)計與分析的教學(xué)經(jīng)驗(yàn)相結(jié)合,發(fā)現(xiàn)以下幾個方面的存在不足是算法不適應(yīng)大數(shù)據(jù)環(huán)境的原因。
(1)規(guī)模的概念不被重視。輸入數(shù)據(jù)的規(guī)?;蚴翘幚頂?shù)據(jù)的規(guī)模在傳統(tǒng)算法教學(xué)中不太涉及,通常只是在理論教學(xué)提及計算復(fù)雜度概念的時候,描述一下規(guī)模對計算的時間復(fù)雜度的影響。未有針對性的事例展示和實(shí)際算法方案的聯(lián)系,學(xué)生不容易理解概念,也不會制定對應(yīng)措施。例如在討論數(shù)據(jù)檢索的時候,不對規(guī)模進(jìn)行討論,不對數(shù)據(jù)進(jìn)行某種清洗,大數(shù)據(jù)的處理算法如何能正確的選擇?
(2)大數(shù)據(jù)算法沒有形成前后內(nèi)容的聯(lián)系。大數(shù)據(jù)中使用的算法多數(shù)在傳統(tǒng)算法中不詳細(xì)講述,或者是沒有在相應(yīng)的案例算法中提及。以決策樹部分為例課程安排中甚少提及,而在某些專業(yè)甚至不會講解。其原因是在與本科生的教學(xué)內(nèi)容中只注重具體的經(jīng)典常規(guī)算法的講述,很少提及算法能力的極限。這樣致使在算法分析基礎(chǔ)中對于算法上界下界問題的講述,也只能停留在理論的描述階段,無法進(jìn)行感性的認(rèn)識和實(shí)際案例的對比。
(3)近似計算問題。大數(shù)據(jù)環(huán)境下討論的問題很大程度上是無法精確求解問題。也就是說計算機(jī)科學(xué)原本關(guān)心的節(jié)“連續(xù)”數(shù)學(xué)問題的的算法,比如求sinx和lnx這種函數(shù)的值或積分,首先本身無法精確求解,其次對它們求解所需要處理的數(shù)值長度計算機(jī)只能用有限的精度來表示。這會導(dǎo)致偏差的問題和討論。而這個通常是在數(shù)值分析課程中討論的,而這門課在傳統(tǒng)教學(xué)中并沒有和算法課程聯(lián)系起來。
所以本文準(zhǔn)備在以下幾個方面討論算法分析與設(shè)計課程針對大數(shù)據(jù)環(huán)境的教學(xué)變更。
算法的思想是前人智慧的總結(jié),但所有成型的算法案例都是存在自身的適用環(huán)境和局限性。簡單灌輸給學(xué)生簡單快捷,但是授人以魚不如授人以漁,簡單灌輸會讓學(xué)生缺少自身的思考和判斷,失去思維能力提升的寶貴機(jī)會。在其后面對同類型新問題或是問題發(fā)生部分變化的情況下,依然不知道如何下手,不懂變通和變化。因此不再專門講述算法的上界下界概念和算法效率分析,轉(zhuǎn)為對比遞歸和非遞歸的數(shù)學(xué)分析,在對比中講述輸入規(guī)模的度量和度量單位。將算法效率分析以潛移默化的方式分散進(jìn)數(shù)學(xué)分析部分和算法效率對比部分,在建模的過程中培養(yǎng)思維和灌輸基本概念。到研究生階段的算法效率分析中再著重講述,畢竟應(yīng)用型不需要這么多理論分析的內(nèi)容。
因?yàn)獒槍Φ氖菓?yīng)用型和工程型本科生,所以應(yīng)該立足于“用”,教授貼近實(shí)際案例的使用方式和適用模式。改變當(dāng)前按歸類類型以分治、動態(tài)規(guī)劃、貪心等方法對內(nèi)容進(jìn)行分割,在相互獨(dú)立的講授的授課方式,變以按重要問題的類型梳理算法分類教學(xué)。例如:不再糾結(jié)分治法可以應(yīng)用于那些方面和場景,可以針對場景進(jìn)行什么樣的剪枝或是變治;而直接以具體的排序查找問題的情況變化,選擇算法適用的類型和相應(yīng)的對比變化。例如:針對二分查找為例,啟發(fā)學(xué)生基于樸素思想的順序查找沒有充分利用數(shù)據(jù)有序的固有特點(diǎn),而利用中間元素做閾值,不斷拋棄一半規(guī)模元素,以不斷縮小問題規(guī)模,迅速定位找到該元素加以細(xì)化。在求解問題以后,再啟發(fā)學(xué)生是否存在更優(yōu)解法,而為后續(xù)的算法變化和教授打下伏筆。從而在二分查找這類問題中衍生講述蠻力排序、分治排序、計數(shù)排序、迭代改進(jìn)等算法思維,在學(xué)生接觸算法解題方法的同時理解計算復(fù)雜度和算法的適用場景區(qū)分。
算法設(shè)計與分析所涉及的領(lǐng)域非常廣泛,除去排序、收索、數(shù)值問題、圖、路徑、組合等基本典型的常規(guī)算法和可計算理論、計算復(fù)雜度,就是要與現(xiàn)行前沿科學(xué)向結(jié)合,緊跟算法領(lǐng)域的應(yīng)用和研究,例如近年來討論比較多的近似算法、模式識別算法;大數(shù)據(jù)領(lǐng)域常用的推薦CF算法、分類SVM算法、NB算法、LR分析等。所以在內(nèi)容選擇上教師在教學(xué)的時候需要有所取舍。以大數(shù)據(jù)環(huán)境為場景,算法分析與設(shè)計課程應(yīng)該考慮減少常用傳統(tǒng)算法理論的教授時間,更多的考慮算法在場景中的應(yīng)用側(cè)重。例如線性規(guī)劃在大數(shù)據(jù)領(lǐng)域中經(jīng)常可以看到。而算法設(shè)計與分析課程中并沒有單列一個線性規(guī)劃算法的章節(jié),當(dāng)然也沒有必要單列。教師可以從數(shù)值問題出發(fā),以通過對歷史數(shù)據(jù)的表現(xiàn)求未來結(jié)果發(fā)生的概率的這一類問題的講述和求解,引申出線性規(guī)劃分治解決方案,從而討論迭代改進(jìn)中的單純形法的應(yīng)用。還例如決策樹的概念??梢栽诙鏄涞膽?yīng)用問題中逐一引申。從遍歷問題的分治方案到減少規(guī)模的計算復(fù)雜度討論,再衍生到動態(tài)規(guī)劃的最優(yōu)二叉查找樹,最后到達(dá)決策樹的問題。不必具體設(shè)立專門的章節(jié)講述思維措施,可以在實(shí)際問題的求解和環(huán)境的變化討論過程中就慢慢地進(jìn)行思維的培養(yǎng)和設(shè)計能力的鍛煉。這樣的作法可以讓學(xué)生更有興趣和成就感。可以吸引學(xué)生愿意更深入的學(xué)習(xí)了解算法,使算法課程不再是一門沉悶無趣的理論課程,而是一個可以很好師生溝通交流的實(shí)用課程。
專業(yè)知識的學(xué)習(xí)不能以考試合格作為最終目標(biāo),而應(yīng)以實(shí)踐應(yīng)用作為理解掌握的基礎(chǔ)。要想取得算法分析與設(shè)計課程良好的教學(xué)效果,關(guān)鍵是將教學(xué)內(nèi)容、教學(xué)方法和生產(chǎn)生活的實(shí)際事例進(jìn)行合理有效的組合,最大限度地激發(fā)學(xué)生的學(xué)習(xí)興趣和主觀能動性,這需要不斷地探索與實(shí)踐。雖然是通過教學(xué)實(shí)踐總結(jié)了一個體系,但是必然尚存在諸多不足。所提出的方法能否解決當(dāng)下課程的問題?是否是最有效的解決方案?是值得討論的。一家之言,希望能夠拋磚引玉獲得各位專家的批評指正。