張小衛
摘 要:離散數學是現代數學的一個分支,作為學習計算機的有力數學工具,是很多計算機相關專業課程學習的先行課程。文章將主要通過離散數學與計算機科學的相關性、離散數學的知識在數據結構與算法中的作用以及離散數學對程序員的隱性作用,簡單地闡述離散數學在計算機程序中的作用。
關鍵詞:離散數學;數據結構與算法;數學修養;計算機程序設計
中圖分類號:G793 文獻標識碼:A
一、離散數學與計算機程序設計的關系
為了讓計算機能解決某個問題,人類必須將解決問題的思路和方法通過計算機語言發出,使計算機按照人類的思路按順序執行指令——編程。對于具體的問題實例,首先建立適當的數學模型,設計最優的算法以解決數學模型。數學模型的建立需要從實際問題中抽象出數據,尋求其關系,用數學的語言描述之,故算法設計和數據結構是計算機程序設計的兩大支柱。此外完整的編程包括程序編寫與調試,程序測試等多方面理論和技術,并不是一個簡單的編寫代碼的過程。對于實際問題,可操作對象和數據是非連續的,尋求離散量之間的關系需要借助離散數學的思想方法和理論。因此,離散數學是計算機程序設計的數學工具,計算機編程是離散數學的實踐應用。
二、離散數學對數據結構與算法中的作用
數據是現實的客觀事物,關系是任意兩個數據之間存在的一個或多個關系,利用計算機求解實際問題,必須將數據存儲到計算機上,需要考慮數據的性質和存儲結構(虛擬存儲結構/邏輯存儲結構)。數據結構主要研究數據、邏輯結構以及基本操作運算。離散數學中的圖論思想主要體現在數據結構的四大主要結構——集合、線性表結構(一對一關系)、樹形結構(一對多關系)、圖形結構(多對多關系)。著名的哥白斯堡七橋(一筆畫)問題就是由瑞士數學家萊昂哈德·歐拉利用圖論的基本思想解決了的,同時開創了數學新的分支——圖論。圖論將“點”由“邊”構造關系,利用邊加上權值可以解決諸如經濟最小成本、交通網絡的最大流、交通運輸最小費用等問題。
數據結構與算法密不可分:數據結構都需要算法的支持,數據結構的選擇直接決定算法的時間復雜度。通常情況下,選擇合適的數據結構能夠有效降低時間或者空間復雜度。解決實際問題,首先要分析問題,選擇合適的數據結構。諸如公司存儲管理員工資料問題,優先選擇鏈表:登記注冊新員工的資料(增加)、員工退出(刪除)、核實員工資料(查找)、校正員工信息(更改)、增加(或刪除)時間復雜度為0(1),而順序表則為0(n);對于查找和更改,兩者復雜度均為0(n)。
三、離散數學對編程者數學修養的作用
計算機需要學習離散數學,不僅是編程本身需要,同時也可以提高數學修養。程序本質是邏輯,程序運行結果就是邏輯推理演算的結果。將人類的思路翻譯成計算機編程語言需要很強的邏輯性、精確性;不少編程初學者缺乏思維邏輯的鍛煉,導致思維斷斷續續和不嚴謹,或者對一些稍難的程序無從下手。
數學修養包含程序員的數學觀察力、數字敏感、離散抽象思維能力、邏輯思維能力、數學學習能力等,并不全在于儲備數學知識的多少。程序與數學結合緊密,像數學歸納法在程序中的運用也比較常見——hanoi塔、Fibonacci數列、階乘函數等問題遞歸的實現;學習離散數學不僅要會應用公式,透過現象看本質,學習知識的思想方法才是根本,遇到實際問題能夠學以致用,運用數學思想方法進行抽象建模。程序員沒有經過系統的學習數學雖可以解決問題,但大多存在三個主要問題:一則耗時;二則不利于軟件周期內的交流,他們可以讀懂每一行代碼,但是預測不到大概結果,甚至對程序的功能一知半解;三則性能不佳——一個“好”的算法應該考慮算法的效率,預估算法的效率以降低軟件工程的成本來符合軟件工程標準化準則。數學學習能力建立在數學知識的積累基礎之上,幫助我們學習更高深、更晦澀的理論知識——IT是一個時刻在更新的行業,需要不斷擴充知識。
學習離散數學必須認識到離散數學的重要性,它不僅能在計算機程序中得到應用,更是培養程序員邏輯思維能力等隱性條件的工具。學好離散數學可為計算機程序設計奠定良好的數學基礎。
參考文獻:
[1]嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,1997.
[2]陳 敏,李澤軍.離散數學在計算機學科中的應用[J].電腦知識與技術,2009(9).