何睿
(重慶工程學院 軟件學院,重慶 400000)
離散數學作為計算類專業的核心課程,旨在讓學生理解并掌握基本理論與方法,培養學生的抽象能力與邏輯思維能力。通過對離散數學的學習,學生可以使用離散數學作為工具,對軟件工程學科問題進行描述、分析、研究,達到對軟件工程專業領域相關問題進行離散建模求解的能力目標[1]。
國際工程教育認證是推動新工科建設的重要手段。國際工程教育認證標準對學生的“工程知識”提出了“學以致用”的要求。包括兩個方面,其一,學生必須具備解決復雜工程問題所需數學、自然科學、工程基礎和專業知識;其二,能夠將這些知識用于解決復雜工程問題。前者是對知識結構的要求,后者是對知識運用的要求[2]。2020版的國際工程教育認證手冊中,要求舉例說明運用數學知識解決復雜工程問題的培養環節,提高了運用數學知識的要求。
目前,離散數學課程的教學理念仍側重于數學理論的推導演繹,注重訓練學生的邏輯能力、抽象能力[3],缺少在實際生活或專業領域的應用案例,對學生運用知識解決復雜工程問題的能力培養不夠,導致學生學而不知其所用,產生“離散數學沒有用”的疑惑。
按照國際工程教育的理念和要求,在傳授理論知識的基礎上,還需要引入軟件工程領域問題,尤其是添加以專業背景的場景案例,并運用離散數學的知識分析問題,提出解決方案。
在離散數學課程中,不僅培養學生體會數學的抽象、推理、邏輯能力,而且能夠學以致用,與后續專業課程建立聯系,打通數學與軟件專業課程的任督二脈。
根據適合的應用場景設計教學案例,是實現這個課程目標的關鍵。下面以離散數學中的特征函數為例,討論應用案例的設計思路。
離散數學中討論的函數都是離散函數,主要關注離散結構之間的函數關系。它是定義在離散集合上的特殊關系,把一個離散對象變換成另一個離散的對象。離散函數是開關理論、自動機理論和可計算理論的基礎,在計算機、軟件工程等學科及應用領域中有重要的意義[4]。
特征函數是離散函數中的教學內容,將離散的對象映射到0或1,在知識層面非常簡單,但能夠解決很多復雜的問題。例如數據處理中,對高維數據降維,得到易處理的特征向量,為數據運算提供支撐;在集合的交、并等運算中,避免數值的多樣性導致數值的比較變得復雜的情況。

特征函數直接定義在集合上,映射到0、1兩個值,很容易與計算機中的二進制聯系,因此,選擇集合的交、并、補等運算作為特征函數的應用場景,并按照分析問題、提出解決方案、編程實現的思路設計教學案例。




可將 集合運算表示為公式(8)、(9)。

按照上述思路,很容易使用特征函數表示集合的其他運算。
按照表2.1所示的特征函數映射關系,可設計出特征函數的算法,特征函數XA的偽代碼如下所示。

表2.1 特征函數XA和XB的映射表
算法1:求特征函數

按照上述方法,也可設計出計算特征函數的算法。
遍歷全集中的所有元素,并使用作為條件判當元素是否為中的元素,設計出求交集的算法。
算法2:求交集

按照相同的方法,可設計求的算法。
算法3:求并集

按照上述思路,很容易設計出其它集合運算的算法,這部分內容可作為學生練習。
在計算機中,有很多方法可表示和存儲集合。為了簡單方便,可選數組。
const int n = 15;
int E[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int A[]={1,3,5,7,9,11,13,15};
int B[]={1,2,5,8,9,10,13};
也可使用數組存儲如表2.1所示的特征函數映射關系。
int Xa[15], Xb[15];
在計算特征函數的算法中,包含了集合的屬于運算,可先編寫一個函數實現此運算,其代碼如下。

根據計算特征函數的算法,可編寫出計算特征函數的程序,其代碼如下。

根據計算集合運算的算法,可編寫出相應的程序,如計算的代碼如下。


上述解決方案中,假設了母集是已知的,如果不知道母集的元素,怎樣設計計算集合運算的解決方案?實際上,在不知道母集的情況下,運用特征函數解決集合的運算問題,集合的定義更加復雜。通過上述提問,作為學術拓展練習,讓學生體會到運用特征函數解決工程問題的局限性,明確方法的適用場景。同時,將教學內容延展至算法分析與設計的內容,與其他專業課程緊密相連。
本文結合國際工程教育認證對新工科建設方向標準,提出在原離散數學課程的教學方法中,添加專業領域或生活實際的案例。為與后續專業課建立練習,教學案例的思路按照分析問題、提出解決方案、編程實現進行設計。
以離散數學的特征函數解決集合的運算為例,分析集合運算,以特征函數為解決方案,分析設計算法,并提供了使用C語言編程實現算法的關鍵代碼。最后討論了特征函數使用的局限性。