如何學好離散數學?
可以把離散數學理解為數學和計算機之間的橋梁。計算機本質上是數學的一種通過電、半導體等而實現的應用。數學的本質,是抽象。而計算機的本質:算法---就是一種抽象。我們可以不太規范地這樣理解:具體問題------>抽象成一般問題------->算法--------->離散數學因此對于一般人來說,把算法學會就夠用了。但對于理論研究人員來說,不夠----他們需要把問題上升到離散數學。離散數學最為重要的兩個內容:數論 和 圖論一般人遇到的問題:編程實現1+2....+100編程實現1+2-3+4.....100編程實現1+3+5......+100......通過對算法的學習,我們可以把這些問題抽象成一個循環------循環,就是解決這類問題的算法。而當我們繼續把這個算法上升到理論高度時,就觸及到了數論。由此我們可以從數學上來證明這個算法的正確性與有效性以及這個算法的局限性。或者這樣說:為什么一個循環就能解決這類問題?為什么一個循環不能解決對一列數進行排序的問題?再有:實現不對稱加密。當計算機專業的算法老師給你講為什么這類加密有效時,他最多說一句:因為已知兩個素數的乘積來反推是哪兩個素數很難。他是不會給你系統講解素數的。對于你去用一些加密,這些知識足夠了。但如果你要研究具體的某個加密算法:研究它的漏洞、破解方式、如何升級等等的時候,你就會需要系統地學習數論了。一般人遇到的問題:編程來判斷一個圖是否是連通圖編程來找出一個圖里鄰居最多的結點編程來找到一個有向聯通圖的最短路徑......通過對算法的學習,我們可以把這些問題抽象成一些算法,廣搜、深搜、迪杰斯特拉算法等等。而當我們繼續把這些算法上升到理論高度時,就觸及到了圖論。由此我們可以從數學上證明這些算法的正確性與有效性以及它們的局限性。比如NPC問題。算法老師會給你講:有一類問題,目前人類找不到多項式時間復雜度內能解決的算法,但是只要任意一個NPC問題能找到多項式時間復雜度的算法,那么其他所有NPC問題就一定都有多項式時間復雜度的算法。老師只會說這么多,至于這個結論哪兒來的、具體應該如何證明一個問題是不是NPC問題、如何研究NPC問題等,老師不會講,你要學的話,就要系統學習圖論了。題外話:不過答主的算法老師講過如何證明一個問題是NPC,在講這個問題的過程中說到的最多的一個詞是:規約。學過離散數學的話應該對這個詞不會陌生的。大學的教學任務并不是完全培養畢業后就能直接從事具體工作的人員。大學的教學任務培養的是具備基本研究素養的學者-----這些人可以繼續讀研、讀博最后去做研究人員和科學家。因此,在大學的每個專業一開始都會開設一些“看似沒用”的理論性較強的課程。如果你大一大二在上這些課的時候,你會感到“沒用”;如果你畢業了參加工作了,你還是會感到當年的那些課“沒用”;但如果你選擇了研究這條路,你就會發現那些課都是必不可少的理論工具。由于我們無法確定一個大一新生將來到底是畢業了就工作呢還是會讀研讀博保不齊將來成為中國的圖靈也有可能,所以我們唯一的辦法就是讓大家都來學。總結成一句話就是:多學點總沒壞處。具體到離散數學上,如果你不從事和計算機算法前沿理論相關的研究工作,那么它確實沒太大用處。數論上你只要能用編程語言把需要加密的字符串加密了就可以了,比如如果用java的話,你只要import若干包,然后調用幾個函數就可以了,你只需要知道你在做什么即可,你不必清楚每個函數具體是怎么實現的。圖論的話你只要會廣搜深搜、最短路徑什么的、知道哪些問題屬于NP問題目前無法解決,就足夠了。至于怎么學,沒什么竅門。你怎么學數學,你就怎么學離散數學。把理論搞懂了然后多做題就行了。