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