《離散數學》既是現代數學的分支,也是計算機及其相關專業的核心基礎課程,以研究離散量的結構及其關系為主要目標。它不僅是《數據結構》、《編譯原理》、《操作系統》、《數據庫系統》等專業核心課的數學基礎,而且在培養學生嚴謹的分析推理能力、邏輯思維能力方面發揮重要作用,為以后從事計算機科學研究和軟件按開發,打下良好的基礎。
我們學校的人才培養目標為應用型本科,與研究型重點大學的本科生不同,我們學校的本科生對深奧而枯燥的理論并無太濃厚的興趣,相反思維活躍、性情開朗活潑、動手能力強。因此對實踐性的課程有著濃厚的興趣:比如軟件類的程序設計、網頁設計,硬件類的電子設計,學生能夠直觀的看到自己的工作成果,越做越帶勁。
但《離散數學》是純理論性的,內容繁雜、抽象程度高,學生無法直觀的看到學習成果,也缺乏趣味性。因此不少學生會提出疑問:學習《離散數學》有什么用?
實際上,離散數學的很多知識,都能直接應用在計算機體系結構、硬件電路設計、程序設計、軟件工程方法、數據庫設計、計算機網絡等諸多方面。然而現行的很多《離散數學》教材并沒有直接提及這些應用,導致很多情況下的教學是純理論性的,學生缺乏學習興趣。本人在《離散數學》教學過程中也遇到同樣的問題,因此在總結多年《離散數學》教學經驗的基礎上,提出以應用為導向的教學方案。下面從教學內容和教學方法兩個方面做一些探討:
1、教學內容向實際應用靠攏
在教學內容上,除了講授書本的理論知識之外,還要穿插一些與實際應用結合的例子。比如,在命題邏輯中,命題連接詞:否定﹁、合取∧、析取∨,與程序設計中的邏輯運算符:非 !、與 &&、或 ||,有很大的共性。命題邏輯運算符遵循德摩根律:。
﹁ \\(P ∨ Q\\)<=> ﹁ P ∧﹁ Q
﹁ \\(P ∧ Q\\)<=> ﹁ P ∨﹁ Q
學生在此之前已經學過程序設計,正好可以溫故而知新,以 C 語言為例,若要判斷輸入的字符是數字,可以用以下代碼:
\\(1\\) if\\(ch>=’0’&&ch<=’9’\\)
{ ...... }
若要判斷輸入的字符不是數字,可以用以下代碼:
\\(2\\) if\\(!\\(ch>=’0’&&ch<=’9’\\)\\)
{ ...... }
也可以用以下代碼:
\\(3\\) if\\(ch<’0’||ch>’9’\\)
{ ...... }
可以明顯的看出:
第 1 段代碼相當于 P ∧ Q
第 2 段代碼相當于﹁ \\(P ∧ Q\\)
第 3 段代碼相當于﹁ P ∨﹁ Q
正好可以對照前面的德摩根律。如果上述幾部分內容結合起來講解,不但讓學生能夠將新的知識和已有的知識融會貫通,而且讓學生明白這些知識用在什么地方。
命題邏輯運算,不但應用到諸如程序設計等軟件領域,而且應用到電路設計等硬件領域。例如合取運算符∧,相當于兩個開關電路的串聯,只有兩個開關電路都閉合的情況下,整個電路才能導通,這也對應著,只有 P 和 Q 都為真的情況下,P ∧ Q 的值才是真。相對應的是,析取運算符∨,相當于兩個開關電路的并聯,只要有一個開關電路閉合了,整個電路就可以導通,這也對應著,只要 P 或 Q 當中有一個為真,P ∨ Q 的值就是真。融會貫通的講解上述內容,可以使學生理解“命題邏輯”這部分知識在計算機軟件和硬件領域的應用,還可以觸類旁通的掌握程序設計、算法分析、數字邏輯、數字電路等相關的專業知識。
2、教學方法圍繞實際應用展開
“圖論”這一部分內容復雜,如果一開始就羅列圖的各方面概念,講述各種定理,只會讓學生望而卻步??紤]到部分學生喜歡旅游,部分學生迷于游戲,可以從旅行問題和游戲中的迷宮問題來入手。事先借助“百度地圖”之類的電子地圖,劃定一個景點,讓學生探索、討論旅游線路,尋找最佳的旅行路徑;也可以借助游戲中的迷宮,讓學生進行類似的探討;還可以介紹當前比較流行的“電子導航”,并指出目前電子導航存在的缺陷,比如沒有考慮擁堵問題。然后再講解圖的基本概念和相關的理論知識,這樣就能讓學生帶著學習目標,欣然的接受“圖論”。
講解完“圖論”的理論部分之后,又回到前面引入的旅行問題和迷宮問題,讓學生思考如何用學到的圖論知識解決這些問題。然后介紹一些簡單的圖算法,讓學生自己編寫一些簡單的電子地圖、導航系統、迷宮程序,這樣就能讓學生直觀的看到自己的學習成果,提高學習興趣。并且將這些作為平時成績的考核,對學生起到激勵、督促的作用。
總之,以應用為導向的《離散數學》教學方案,在激發學生的學習興趣、鞏固學習效果方面,起到很大的作用。傳統的純數學方式的理論教學,已不能適應當前學科的發展,尤其對于應用型本科人才的培養,更是如此。以上是個人對《離散數學》教學經驗的總結,不足之處還望同行指教。