首先狭园,無論是哪方面的程序員,都要大量的投資算法和數(shù)據(jù)結構糊治。因為這是你的基本技能唱矛,就像棋手需要知道每個棋子的走法一樣。在算法學習的過程中,你繞不過的就是衡量算法的效率绎谦,也就不可避免的學習Big O的知識管闷。Big O,需要你了解函數(shù)和極限的一些知識窃肠,比如說包个,f(n) = O(g(n))是這樣定義的,當n足夠大的時候冤留,你總可以找到一個常數(shù)c碧囊,使得c * f(n) >g(n)。除了效率纤怒,還有如何證明算法的正確性糯而。這就要求掌握一些證明方法,比如反正法泊窘,遞推歸納法熄驼。
其次,如果你遇到了性能方面的問題烘豹,需要降低延遲瓜贾,增加吞吐的時候,你很有可能需要去設計高性能的隊列系統(tǒng)吴叶,這時排隊論的知識就顯得尤為重要了阐虚。排隊論要學好,概率論是基石蚌卤。隊列在計算機系統(tǒng)中隨處可見实束,操作系統(tǒng)中的進程調度問題,基于隊列解藕生產(chǎn)者消費者的架構問題等等逊彭。
接下來如果你對離散優(yōu)化問題感興趣咸灿,如說背包問題,旅行者問題侮叮,當你需要優(yōu)化一個目標函數(shù)的時候避矢,你往往會用到梯度下降法,而理解梯度下降法囊榜,對微積分要有很好的理解审胸。更不用說在人工智能,機器學習領域卸勺,到處都得優(yōu)化目標函數(shù)砂沛,降低預測誤差,想走的遠曙求,是必須要有數(shù)學基礎的碍庵。
然后再說一下映企,線性代數(shù),特別是在人工智能里面静浴,很多基本的模型都是線性的堰氓,你會隨處看到矩陣的用處,單純的只知道矩陣如何相乘是遠遠不夠的苹享,要理解的跟深入双絮,矩陣是一個函數(shù),用來轉換矢量富稻,既然是函數(shù)掷邦,就會具有很多函數(shù)的特點白胀。
分布式系統(tǒng)中的鼻祖級論文椭赋,Lamport的時間,時鐘或杠,和事件的順序哪怔,據(jù)他所說是他從相對論中的時間和空間的關系中得到的靈感。由此可見向抢,不僅是數(shù)學认境,物理也很重要。