❶ 程序員需要怎樣的數學基礎
LZ不要杞人憂天了,那些說數學重要的,首先數學你會嗎?數學包含的范疇太多了,常見的有高等幾何 微積分 線性代數 概率論 離散數學 數論 圖論等等你指的是具體哪一樣呢?就算是前人科學巨匠泰鬥牛頓,毆幾里德,愛因斯坦,他也只是擅長自己從事的那領域,要說所有數學領域都精通我想他們也不敢吹這樣的牛逼。
所以對大多數人來說,在數學方面都不太可能取得什麼很深的造詣。等到你所謂的把數學學好,那鬍子都快白完了,數學是又深奧又費解學習成本巨大需要耗費大量時間學完不用立馬就忘的學科。所以說數學重要,先問問你自己能不能學會。
其次,計算機學科跟數學根本就不是一門學科, 包含內容極其有限。計算機編程有自己的理論知識體系,很多跟數學關系不大。學好編程尤其對新手來說最重要的是對你學的編程語言的熟練運用和工具SDK的爛熟於心。每個語言都有自己獨特的設計理念,不存在什麼好學的編程語言。
所以說,題主, 你想得太遠了。軟體開發需要用到的知識比數學重要的太多了。拋開計算機不說,英語比起數學的重要性就大的多的多。英語不好你看不懂函數API說明你一切就是白瞎。而數學對於大多數人來說是最難學也是最不重要的知識,基本上是學了就忘忘了就扔扔了也沒感覺的那種,很多搞編程的可能一輩子也用不到數學知識。為什麼?理解C++的指針和多態需要數學嗎?一個復雜的系統架構也不需要半點數學知識,而你就是看不懂。
還有就是程序調試技術,很多IDE給出的出錯語句非常費解,什麼指針為空,數組越界,內存溢出,SDK找不到, 你沒經驗時打死你也看不懂你的編程工具提示的是什麼。這時你那高大上的數學真是P用沒有,它能幫你排查錯誤找出程序崩掉的原因嗎?我看不行吧,你還是得到論壇網路去問人家這些基本的問題。
在你擔心數學好不好之前,你更應該關心編程環境怎麼搭建,連IDE都搞不定不知道程序怎麼跑起來你還搞什麼呀,下一步就是程序基本的語法和SDK庫函數的掌握,基本SDK都不知道什麼意思怎麼去用,如字元串函數,文件讀寫和資料庫常用操作,這些你都不會你還有學下去的必要嗎?還有更重要的更基本的程序調試技術,程序老出錯老崩潰怎麼辦呀,哪裡變數為空了內存寫錯了?為什麼程序老編不過去呀,誰能幫幫我呀!!!這個時候你發現那牛逼的數學知識真是屁用沒有,你還是感嘆自己基本功底不行經驗太少,這個時候打死你也不會再關心數學好不好的問題了。
如果說用到數學的大概只有3D游戲引擎,很智能的人工智慧,如格鬥游戲的電腦應對玩家的復雜AI,生化危機中僵屍怪物的配合商量運用策略包抄玩家和記憶功能,還有航空航天領域這樣高精尖技術學科才會用到復雜一點的數學知識。而這些都是計算機專家才要掌握的內容。所以題主你是想多了,還是先關心下自己程序為什麼編不過老是報錯的問題吧
❷ 程序員應具備怎樣得數學基礎
看你要做什麼樣的程序員。
如果就是一般的做計算機軟體的程序員,幾乎不需要什麼數學基礎,當然,如果你有一些離散數學的基礎是最好不過了。
但如果你要做計算機特殊領域的程序員,比如,人工智慧,模式識別,數據加密,數據壓縮,數字圖像等等,那就需要相關的數學基礎了,包括微積分、線性代數、概率論、統計學、數論等等。
蓋茨曾經說過,不要過分誇大數學對軟體的重要性。
❸ 計算機專業應該怎樣學數學
計算機專業應該怎樣學數學?想了解更多的信息嗎,和我一起看看吧!以下是我分享給大家的計算機專業學數學的方法,希望可以幫到你!
計算機專業學數學的方法
學習計算機,你需要有一定的數學及英語基礎,在硬體方面最好有一些電路電子基礎。
掌握幾門開發語言是必須的,一般從C語言學起,然後學一門面向對象的語言,一般是C++或者Java。
演算法與數據結構也是必須學的。數據結構的鏈表、隊列、棧、樹、圖等都是重要內容,還有演算法中的排序、查找、搜索等。
資料庫也是必學的,SQL語句、資料庫範式等等,學的較多的是SQL Sever和MySQL。
計算機組成原理以及計算機系統結構等關於計算機硬體組成的課。
計算機操作系統也是必學科目。現在的課本大都以Linux為例講解操作系統,包括進程管理、文件操作等內容。
計算機網路當然也不能少。網路分層來講解,包括物理層、數據鏈路層、網路層、傳輸層等。
數學對計算機專業的重要性
經常聽人說要學好計算機必須學好數學,在編程中有用到數學了嗎?
不少人答案中指出的:在實踐中數學無處不在。其實這些數學都不是每個計算機專業學生必備的知識。
理由是,計算機已經深入到各個領域了,而在每個領域的應用中,自然要學會,並且懂得那個領域的知識,這些知識便包括了數學。
先說專業外的應用,我做工程模擬,那我自然要會卷積,拉普拉斯變換;而我做社交網路分析,圖論就顯得更重要了。而這些與計算機本身是無關的,是與實踐領域相關的。PHP程序員大概就不需要這些數學,但他們也是屬於計算機專業的。
軟體工程專業涉及到的數學,特點是具體、直觀、離散、實用。 Knuth 的《具體數學》定位就非常好。除非是理論計算機方向,一般程序員需要的「數學」其實是指具體的演算法和技巧,基本算是「應用數學」而已。
再說被分到計算機內的學科,有人說機器學習需要大量的數學。即便是機器學習的科研工作者,用這些工具的,也大都是數學出身的,愛做分析性質研究的傢伙。工程師學好線代和統計就差不多了,而這類工程師,其實可以被看作是做特殊應用的。更誇張地推一步,量子計算機也算是計算機專業的一個邊緣分支。難道可以因此說:學好量子力學對計算機專業很重要嗎?
然而,學好數學是沒有壞處的。學好數學不是每個計算機專業的必須要求,但是學好數學的學生可以在更廣闊的領域內大展拳腳。希望成為研究人員的話,那數學確實是要盡可能多地學。
很多和計算機掛鉤的領域確實用到大量數學,尤其是研究方向。但是如果各個領域的人都出來秀一把虐過自己的數學,那恐怕是會嚇走不少想學計算機,但數學不是很強的人。而實際上計算機專業大部分人是用不到多少數學的。而且就業方面的信息顯示,全球范圍內計算機專業學生還是供應不足的。
計算機專業考研方向
1、計算機應用技術
研究方向:計算機網路、實時計算機應用、CIMS、計算機圖形學、並行計算、網路信息安全、資料庫、情感計算、數據挖掘、分布式計算、知識工程、計算機視覺、自動推理、機器學習、草圖理解、網路性能分析與協議設計、網路管理與安全、計算機圖形學、信息可視化、基於GPU的高性能計算、復雜系統(應急、物流、海洋)領域工程、基於SOA的空間信息共享與業務協同、語義搜索引擎、自然語言處理、機器翻譯、搜索引擎、空中交通信息系統與控制、民航信息與決策支持系統、智能交通系統理論與技術等。
專業特點:計算機應用技術是針對社會與各種企事業單位的信息化需求,通過對計算機軟硬體與網路技術的選擇、應用和集成,對信息系統進行需求分析、規劃和設計,提供與實施技術與解決方案,創建優化的信息系統,並對其運行實行有效的技術維護和管理的學科。
培養這方面人才所涉及的知識麵包括:數學與信息技術基礎、程序設計基礎、系統平台技術、計算機網路、信息管理與安全、人機交互、集成程序開發、系統架構與集成、Web與數字媒體技術、工程實施、職業操守等。培養目標是為企事業單位和政府機構提供首席信息官及承擔信息化建設核心任務的人才,並提供為IT企業提供系統分析人才。
科研狀況:本專業是天津市第一個計算機類博士點,主要從事計算機技術在其它領域應用中核心技術問題研究及相關信息系統開發。近年來在計算機集成製造(CIMS)、計算機輔助教學、虛擬現實技術應用、計算機工業控制、電子商務等方向承擔國家863項目及重大項目、國家自然科學基金十餘項。承擔省部級及橫向科研課題近百項。為國家和天津市的信息化建設做出了重要貢獻。
近幾年報考簡況:本專業從80年代初開始招生,至今已為國家培養出碩士學位研究生300多名。近年來,報考人數和錄取名額逐年同步增加。
碩士期間主要課程及論文要求:主要課程:高等計算機網路、計算理論、排隊論及在計算機中的應用、應用組合數學、軟體體系結構、面向對象方法學、分布式計算機系統、並行計算、高級計算機圖形學、高級人工智慧、模式識別與理解、機器學習、密碼學與信息安全、統一建模語言。
論文要求:論文選題涉及計算機在各領域應用的理論研究、尖端技術開發、以及在國民經濟各個領域的應用研究。論文應能全面反映本學科發展動態、具有科學性、先進性和一定的創新性。對於理論研究課題,要求達到較高的理論水平和創新;對於系統設計、系統開發及系統應用課題,要求指導理論正確,實現技術先進,設計新穎,所設計的系統應能付諸實現、具有實際應用價值並能夠帶來明顯的社會經濟效益。
就業方向:本專業培養的研究生具有堅實的計算機科學與技術的理論基礎,全面掌握計算機應用領域的理論和工程方法,能很好地勝任高等院校、科研院所、大型企事業單位、高新技術產業等的教學、科研、系統設計、產品開發、應用系統集成等工作。
2、計算機軟體與理論
研究方向:計算理論、演算法理論; 軟體工程、中間件、智能軟體、計算環境;並行計算、網格計算、普及計算;密碼學、信息安全、數據理論;圖形圖象演算法、可視化方法;人工智慧應用基礎;理論計算機科學其他方向
專業特點:計算機軟體與理論專業涉及計算機科學與技術的基本理論和方法,強調計算、演算法、軟體、設計等概念,主要的領域包括計算理論、演算法與復雜性、程序設計語言、軟體設計與理論、資料庫系統、人工智慧、操作系統與編譯理論、信息安全理論與方法、圖形學與可視化計算、以網路為中心的計算等。
科研狀況:計算機軟體與理論專業是我院重點發展,進步較快的專業。近年來承擔國家863、自然科學基金、,以及省部級項目多項。在網路信息安全、中間件技術、並行計算、網格計算、計算機圖形學等方面取得了多項前沿性成果。
近幾年報考簡況:本專業從96年代初開始招生,至今已為國家培養出碩士學位研究生50多名。近年來,報考人數和錄取名額逐年同步增加。
碩士期間主要課程及論文要求:主要課程:計算理論、應用組合數學、軟體體系結構、面向對象方法學、分布式計算機系統、並行計算、高級計算機圖形學、高級人工智慧、模式識別與理解、機器學習、密碼學與信息安全、統一建模語言。
論文要求:論文選題涉及計算機軟體的理論研究、尖端技術開發、以及在國民經濟各個領域的應用研究。論文應能全面反映本學科發展動態、具有科學性、先進性和一定的創新性。對於理論研究課題,要求達到較高的理論水平和創新;對於系統設計、系統開發及系統應用課題,要求指導理論正確,實現技術先進,設計新穎,所設計的系統應能付諸實現、具有實際應用價值並能夠帶來明顯的社會經濟效益。
就業方向:本專業培養的研究生具有堅實的計算機科學與技術的理論基礎,全面掌握計算機軟體的理論方法,以及軟體工程、信息系統、並行計算、普及計算等等的軟體系統開發技術,能很好地勝任高等院校、科研院所、大型企事業單位、高新技術產業等的教學、科研、系統設計、產品開發、應用系統集成等工作。
3、計算機系統結構
研究方向:分布式計算機系統、計算機網路系統與全球個人計算系統、真實感圖形生成與虛擬現實技術
專業特點:計算機系統結構(原名計算機組織與系統結構)專業全面研究各種類型的計算機系統(從單機到網路)的構成、硬體與軟體的聯系與功能匹配、計算機系統性能評價與改進等。該專業的研究課題涉及高性能處理機系統結構、多機系統、並行計算與分布式計算系統、計算機系統性能評價、VLSL設計、容錯計算技術、計算機介面技術、計算機網路系統與通信系統、移動計算、全球個人計算系統等。
科研狀況:本專業近年來承擔多項國家科委、國家教委、國家計委及天津市自然科學基金項目,並有多項科研獲獎。其中G.T9112計算機解密系統獲北京市公安局科技進步二等獎,表面高度復雜實體的CAM獲國家科委科技進步二等獎。目前承擔國家自然科學基金項目“面向ASIC的真實感圖形演算法和系統結構的研究”、國家高科技863項目“用於建築環境模擬設計的分布式多用戶虛擬現實系統”、天津自然科學基金項目“分布式多用戶VR開發系統平台的研究”和一大批為企事業單位開發的橫向科研項目。
近幾年報考簡況:本專業從80年代初開始招生,至今已為國家培養出碩士學位研究生50多名。近年來,報考人數和錄取名額逐年同步增加。
碩士期間主要課程及論文要求:主要課程:應用數學、外語、高等計算機網路、排隊論及在計算機中的應用、計算理論、現代計算機體系結構、計算機綜合實驗、計算機控制及應用、計算機網路研究熱點問題、計算機系統模擬、量子計算、密碼學與信息安全、面向對象方法學、嵌入式系統設計、統一建模語言、圖象/模式識別與理解、機器學習、軟體體系結構。
論文要求:論文選題涉及計算機系統結構的理論研究、尖端技術開發、以及在國民經濟各個領域的應用研究。論文應能全面反映本學科發展動態、具有科學性、先進性和一定的創新性。對於理論研究課題,要求達到較高的理論水平和創新;對於系統設計、系統開發及系統應用課題,要求指導理論正確,實現技術先進,設計新穎,所設計的系統應能付諸實現、具有實際應用價值並能夠帶來明顯的社會經濟效益。
就業方向:本專業培養的研究生具有堅實的計算機科學與技術的理論基礎,全面掌握計算機系統結構、計算機工程、網路工程、嵌入式系統等的應用開發技術、能很好地勝任高等院校、科研院所、大型企事業單位、高新技術產業等的教學、科研、系統設計、產品開發、應用系統集成等工作。
猜你喜歡:
1. 大學計算機專業排名
2. 計算機專業大學排名
3. 計算機專業面試自我介紹一分鍾
4. 計算機專業大學排名
5. 計算機專業大學排名榜單
❹ 程序員必備的一些數學基礎知識
作為一個標準的程序員,應該有一些基本的數學素養,尤其現在很多人在學習人工智慧相關知識,想抓住一波人工智慧的機會。很多程序員可能連這樣一些基礎的數學問題都回答不上來。
作為一個傲嬌的程序員,應該要掌握這些數學基礎知識,才更有可能碼出一個偉大的產品。
向量 向量(vector)是由一組實數組成的有序數組,同時具有大小和方向。一個n維向量a是由n個有序實數組成,表示為 a = [a1, a2, · · · , an]
矩陣
線性映射 矩陣通常表示一個n維線性空間v到m維線性空間w的一個映射f: v -> w
註:為了書寫方便, X.T ,表示向量X的轉置。 這里: X(x1,x2,...,xn).T,y(y1,y2,...ym).T ,都是列向量。分別表示v,w兩個線性空間中的兩個向量。A(m,n)是一個 m*n 的矩陣,描述了從v到w的一個線性映射。
轉置 將矩陣行列互換。
加法 如果A和B 都為m × n的矩陣,則A和B 的加也是m × n的矩陣,其每個元素是A和B相應元素相加。 [A + B]ij = aij + bij .
乘法 如A是k × m矩陣和B 是m × n矩陣,則乘積AB 是一個k × n的矩陣。
對角矩陣 對角矩陣是一個主對角線之外的元素皆為0的矩陣。對角線上的元素可以為0或其他值。一個n × n的對角矩陣A滿足: [A]ij = 0 if i ̸= j ∀i, j ∈ {1, · · · , n}
特徵值與特徵矢量 如果一個標量λ和一個非零向量v滿足 Av = λv, 則λ和v分別稱為矩陣A的特徵值和特徵向量。
矩陣分解 一個矩陣通常可以用一些比較「簡單」的矩陣來表示,稱為矩陣分解。
奇異值分解 一個m×n的矩陣A的奇異值分解
其中U 和V 分別為m × m和n×n 的正交矩陣,Σ為m × n的對角矩陣,其對角 線上的元素稱為奇異值(singular value)。
特徵分解 一個n × n的方塊矩陣A的特徵分解(Eigendecomposition)定義為
其中Q為n × n的方塊矩陣,其每一列都為A的特徵向量,^為對角陣,其每一 個對角元素為A的特徵值。 如果A為對稱矩陣,則A可以被分解為
其中Q為正交陣。
導數 對於定義域和值域都是實數域的函數 f : R → R ,若f(x)在點x0 的某個鄰域∆x內,極限
存在,則稱函數f(x)在點x0 處可導, f'(x0) 稱為其導數,或導函數。 若函數f(x)在其定義域包含的某區間內每一個點都可導,那麼也可以說函數f(x)在這個區間內可導。連續函數不一定可導,可導函數一定連續。例如函數|x|為連續函數,但在點x = 0處不可導。
加法法則
y = f(x),z = g(x) 則
乘法法則
鏈式法則 求復合函數導數的一個法則,是在微積分中計算導數的一種常用方法。若 x ∈ R,y = g(x) ∈ R,z = f(y) ∈ R ,則
Logistic函數是一種常用的S形函數,是比利時數學家 Pierre François Verhulst在 1844-1845 年研究種群數量的增長模型時提出命名的,最初作為一種生 態學模型。 Logistic函數定義為:
當參數為 (k = 1, x0 = 0, L = 1) 時,logistic函數稱為標准logistic函數,記 為 σ(x) 。
標准logistic函數在機器學習中使用得非常廣泛,經常用來將一個實數空間的數映射到(0, 1)區間。標准 logistic 函數的導數為:
softmax函數是將多個標量映射為一個概率分布。對於 K 個標量 x1, · · · , xK , softmax 函數定義為
這樣,我們可以將 K 個變數 x1, · · · , xK 轉換為一個分布: z1, · · · , zK ,滿足
當softmax 函數的輸入為K 維向量x時,
其中,1K = [1, · · · , 1]K×1 是K 維的全1向量。其導數為
離散優化和連續優化 :根據輸入變數x的值域是否為實數域,數學優化問題可以分為離散優化問題和連續優化問題。
無約束優化和約束優化 :在連續優化問題中,根據是否有變數的約束條件,可以將優化問題分為無約束優化問題和約束優化問題。 ### 優化演算法
全局最優和局部最優
海賽矩陣
《運籌學裡面有講》,前面一篇文章計算梯度步長的時候也用到了: 梯度下降演算法
梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿著該方向取得最大值,即函數在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。
梯度下降法
梯度下降法(Gradient Descent Method),也叫最速下降法(Steepest Descend Method),經常用來求解無約束優化的極小值問題。
梯度下降法的過程如圖所示。曲線是等高線(水平集),即函數f為不同常數的集合構成的曲線。紅色的箭頭指向該點梯度的反方向(梯度方向與通過該點的等高線垂直)。沿著梯度下降方向,將最終到達函數f 值的局部最優解。
梯度上升法
如果我們要求解一個最大值問題,就需要向梯度正方向迭代進行搜索,逐漸接近函數的局部極大值點,這個過程則被稱為梯度上升法。
概率論主要研究大量隨機現象中的數量規律,其應用十分廣泛,幾乎遍及各個領域。
離散隨機變數
如果隨機變數X 所可能取的值為有限可列舉的,有n個有限取值 {x1, · · · , xn}, 則稱X 為離散隨機變數。要了解X 的統計規律,就必須知道它取每種可能值xi 的概率,即
稱為離散型隨機變數X 的概率分布或分布,並且滿足
常見的離散隨機概率分布有:
伯努利分布
二項分布
連續隨機變數
與離散隨機變數不同,一些隨機變數X 的取值是不可列舉的,由全部實數 或者由一部分區間組成,比如
則稱X 為連續隨機變數。
概率密度函數
連續隨機變數X 的概率分布一般用概率密度函數 p(x) 來描述。 p(x) 為可積函數,並滿足:
均勻分布 若a, b為有限數,[a, b]上的均勻分布的概率密度函數定義為
正態分布 又名高斯分布,是自然界最常見的一種分布,並且具有很多良好的性質,在很多領域都有非常重要的影響力,其概率密度函數為
其中, σ > 0,µ 和 σ 均為常數。若隨機變數X 服從一個參數為 µ 和 σ 的概率分布,簡記為
累積分布函數
對於一個隨機變數X,其累積分布函數是隨機變數X 的取值小於等於x的概率。
以連續隨機變數X 為例,累積分布函數定義為:
其中p(x)為概率密度函數,標准正態分布的累計分布函數:
隨機向量
隨機向量是指一組隨機變數構成的向量。如果 X1, X2, · · · , Xn 為n個隨機變數, 那麼稱 [X1, X2, · · · , Xn] 為一個 n 維隨機向量。一維隨機向量稱為隨機變數。隨機向量也分為離散隨機向量和連續隨機向量。 條件概率分布 對於離散隨機向量 (X, Y) ,已知X = x的條件下,隨機變數 Y = y 的條件概率為:
對於二維連續隨機向量(X, Y ),已知X = x的條件下,隨機變數Y = y 的條件概率密度函數為
期望 對於離散變數X,其概率分布為 p(x1), · · · , p(xn) ,X 的期望(expectation)或均值定義為
對於連續隨機變數X,概率密度函數為p(x),其期望定義為
方差 隨機變數X 的方差(variance)用來定義它的概率分布的離散程度,定義為
標准差 隨機變數 X 的方差也稱為它的二階矩。X 的根方差或標准差。
協方差 兩個連續隨機變數X 和Y 的協方差(covariance)用來衡量兩個隨機變數的分布之間的總體變化性,定義為
協方差經常也用來衡量兩個隨機變數之間的線性相關性。如果兩個隨機變數的協方差為0,那麼稱這兩個隨機變數是線性不相關。兩個隨機變數之間沒有線性相關性,並非表示它們之間獨立的,可能存在某種非線性的函數關系。反之,如果X 與Y 是統計獨立的,那麼它們之間的協方差一定為0。
隨機過程(stochastic process)是一組隨機變數Xt 的集合,其中t屬於一個索引(index)集合T 。索引集合T 可以定義在時間域或者空間域,但一般為時間域,以實數或正數表示。當t為實數時,隨機過程為連續隨機過程;當t為整數時,為離散隨機過程。日常生活中的很多例子包括股票的波動、語音信號、身高的變化等都可以看作是隨機過程。常見的和時間相關的隨機過程模型包括貝努力過程、隨機遊走、馬爾可夫過程等。
馬爾可夫過程 指一個隨機過程在給定現在狀態及所有過去狀態情況下,其未來狀態的條件概率分布僅依賴於當前狀態。
其中X0:t 表示變數集合X0, X1, · · · , Xt,x0:t 為在狀態空間中的狀態序列。
馬爾可夫鏈 離散時間的馬爾可夫過程也稱為馬爾可夫鏈(Markov chain)。如果一個馬爾可夫鏈的條件概率
馬爾可夫的使用可以看前面一篇寫的有意思的文章: 女朋友的心思你能猜得到嗎?——馬爾可夫鏈告訴你 隨機過程還有高斯過程,比較復雜,這里就不詳細說明了。
資訊理論(information theory)是數學、物理、統計、計算機科學等多個學科的交叉領域。資訊理論是由 Claude Shannon最早提出的,主要研究信息的量化、存儲和通信等方法。在機器學習相關領域,資訊理論也有著大量的應用。比如特徵抽取、統計推斷、自然語言處理等。
在資訊理論中,熵用來衡量一個隨機事件的不確定性。假設對一個隨機變數X(取值集合為C概率分布為 p(x), x ∈ C )進行編碼,自信息I(x)是變數X = x時的信息量或編碼長度,定義為 I(x) = − log(p(x)), 那麼隨機變數X 的平均編碼長度,即熵定義為
其中當p(x) = 0時,我們定義0log0 = 0 熵是一個隨機變數的平均編碼長度,即自信息的數學期望。熵越高,則隨機變數的信息越多;熵越低,則信息越少。如果變數X 當且僅當在x時 p(x) = 1 ,則熵為0。也就是說,對於一個確定的信息,其熵為0,信息量也為0。如果其概率分布為一個均勻分布,則熵最大。假設一個隨機變數X 有三種可能值x1, x2, x3,不同概率分布對應的熵如下:
聯合熵和條件熵 對於兩個離散隨機變數X 和Y ,假設X 取值集合為X;Y 取值集合為Y,其聯合概率分布滿足為 p(x, y) ,則X 和Y 的聯合熵(Joint Entropy)為
X 和Y 的條件熵為
互信息 互信息(mutual information)是衡量已知一個變數時,另一個變數不確定性的減少程度。兩個離散隨機變數X 和Y 的互信息定義為
交叉熵和散度 交叉熵 對應分布為p(x)的隨機變數,熵H(p)表示其最優編碼長度。交叉熵是按照概率分布q 的最優編碼對真實分布為p的信息進行編碼的長度,定義為
在給定p的情況下,如果q 和p越接近,交叉熵越小;如果q 和p越遠,交叉熵就越大。
❺ 要成為一名出色的程序員要什麼數學知乎
學編程需要用到微積分,離散數學,數學電路,還有函數,以及各種數學思想,對抽象思維和形象思想要求都比較高。
學編程要具備一定的基礎,總結之有以下幾方面:
1、數學基礎 從計算機發展和應用的歷史來看計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的胡雹。因此,要學好計算機就要有一定的數學基礎,出學者有高中水平就差不多了。
2、邏輯思維能力的培養學程序設計要有一定的邏輯思維能力,「邏思力」的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中態野逐漸地積累。因此在學習編程過程中,不必等到什麼都完全明白了才去動手實踐,只要明白了大概,就要敢於自己動手去體驗。誰都有第一次。有些問題只有通過實踐後才能明白,也只有實踐才褲閉帆能把老師和書上的知識變成自己的,高手都是這樣成材的。
❻ 作為一名合格的程序員,請問需要掌握哪些數學知識,學到什麼樣的水平
程序員的知識是多方面的, 數學方面至少高等數學大專以上文化程度,概率統計,數字邏輯運算方面的知識,主要就是做哪一方面的程序設計,有些學過的可能長期也不用,搞科學研究的、游戲、智能軟體開發、安全方面的要求就高一些,沒有一定數學基礎有些演算法書就讀不懂,搞社會一般應用的要求相對較低一些,這些只是常識,程序員關鍵一點把一門課及相關知識精通,可以把用戶提出的問題很快的自己能夠理解,轉換成計算機處理方式,成為軟體或網站,而且和用戶的需求基本一致。當然有些人的數學水平並不高,設計出的軟體人人愛用,水平很高,程序員的知識包括數學方面的知識也在不斷充實更新中。
❼ 程序員怎麼學
1、掌握數據及其轉換、數據的機內表示、算術和邏輯運算,以及相關的應用數學基礎知識;
2、理解計算機的組成以及各主要部件的性能指標;
3、掌握操作系統、程序設計語言的基礎知識;
4、熟練掌握計算機常用辦公軟體的基本操作方法;
5、熟練掌握基本數據結構和常用演算法;
6、熟練掌握C程序設計語言,以及C++、Java、Visual Basic中的一種程序設計語言;
7、熟悉資料庫、網路和多媒體的基礎知識;
8、掌握軟體工程的基礎知識,了解軟體過程基本知識、軟體開發項目管理的常識;
9、了解常用信息技術標准、安全性,以及有關法律、法規的基本知識;
10、了解信息化、計算機應用的基礎知識;
11、正確閱讀和理解計算機領域的簡單英文資料。
(7)程序員數學一般怎麼學擴展閱讀
做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C++編寫。
而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVAOne很可能會成為未來的主流開發工具之一。
其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,CBuilder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。
另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
❽ 學編程需要什麼基礎知識
學編程需要以下基礎知識:
1、數學基礎。從計算機發展和應用的歷史來看,計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的。因此,要學好計算機就要有一定的數學基礎,初學者有高中水平就差不多了。
2、邏輯思維能力的培養。學程序設計要有一定的邏輯思維能力,邏輯思維能力的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中逐漸地積累。
3、要有一定的編程思想。學習一門語言或開發工具,語法結構、功能調用是次要的,最主要是學習它的思想。
學會編程語言,可以從事軟體工程師,就目前而言,軟體工程師就業前景一片大好,我國仍然還存在很大的軟體開發人才缺口,並且以每年20%左右的速度增長。編程語言發展前景如此好,已經成為多數同學心中理想的職業。
想了解更多有關學習編程的詳情,推薦咨詢達內教育。達內教育是引領行業的職業教育公司,致力於面向IT互聯網行業,培養軟體開發工程師、系統管理員、UI設計師、網路營銷工程師、會計等職場人才,擁有強大的師資力量,實戰講師對實戰經驗傾囊相授,部分講師曾就職於IBM、微軟、Oracle-Sun、華為、亞信等企業,其教研團隊更是有獨家26大課程體系,助力學生系統化學習,同時還與各大高校進行合作,助力學生職業方向的發展。
感興趣的話點擊此處,免費學習一下
❾ 自學程序員的步驟
1、自學演算法。因為編程語言實現了它們自己的排序和搜索,所以自學成才的程序員總是傾向於學習如何使用它們,而不是去了解它們的工作原理。
2、自學計算理論。這是關於計算機如何解決問題,以及編程語言如何構建的一門科學。從有限狀態機到 Λ 演算,在這一類中,有一大堆重量級的主題。
3、自學純數學。傳統的計算機科學涉及范圍廣泛的重要數學主題,包括線性代數、微積分、概率論和統計學。
4、自學大〇符號法(Big O notation)。這個改編自數學領域的工具,讓開發人員能夠描述並比較不同演算法的整體性能。
很多新手都是初生牛犢不怕虎,因為不了解編程領域,便不假思索地定了一些很高的目標,比如想進大廠,想做有復雜度的項目,想短時間學習一門語言並找猜鎮到工作隱巧。
理想非常充實,而現實卻很骨感。可能低估了進入該行業的難度。不是您可以僅憑意圖快速完成學習過程的。
一定要先易後難,一步一來,例如,首先了解語法,嘗試編寫一個demo,接著了解高級特效,實現高級特性,然後自己脫離教程寫一些代碼,最後做項目,大概是這穗攜粗樣的一個邏輯。
實際上,對於新來者來說,完成這些步驟並不容易。別看學習基本語法並不難,但是如果想入門,可能會遇到很多問題,例如環境配置在安裝和使用IDE之後,代碼語法錯誤,編譯錯誤和執行 錯誤對於新手來說很難解決。如果不藉助外力,基本上是無從下手的。
❿ 程序員怎樣學數學
First: programmers don't think they need to know math. I hear that so often; I hardly know anyone who disagrees. Even programmers who were math majors tell me they don't really use math all that much! They say it's better to know about design patterns, object-oriented methodologies, software tools, interface design, stuff like that. 首先:程序員不認為他們需要了解數學.我常常聽到這樣的話;我不知道還有沒有不同意的.甚至於以前是主修數學的程序員也告訴我他們真的不是常常使用到數學!他們說更重要的是要去了解設計模式,面向對象原理,軟體工具,界面設計,以及一些其他類似的東西. And you know what? They're absolutely right. You can be a good, solid, professional programmer without knowing much math. 你了解嗎?他們完全正確.你不需要了解很多數學你就能做個很棒,很專業的程序員. But hey, you don't really need to know how to program, either. Let's face it: there are a lot of professional programmers out there who realize they're not very good at it, and they still find ways to contribute. 但是呢,同時你也不是真的需要知道如何來編程.我們要面對的是:有很多專業的程序員,他們認識到他們不是非常擅長數學,但他們還是尋找方法去提升. If you're suddenly feeling out of your depth, and everyone appears to be running circles around you, what are your options? Well, you might discover you're good at project management, or people management, or UI design, or technical writing, or system administration, any number of other important things that "programmers" aren't necessarily any good at. You'll start filling those niches (because there's always more work to do), and as soon as you find something you're good at, you'll probably migrate towards doing it full-time. 如果你突然覺得自己好爛,周圍的人都遠遠的超過你,你會怎麼想呢?好,你可能會發現自己善於項目管理,或人事管理,或界面設計,或技術寫作,或系統管理,還有許多其他程序員不必去精通的.你會開始堆積那些想法(因為工作永遠干不完),當你發現一些你能掌握的東西時,你很可能會轉移去全職的做這個工作. In fact, I don't think you need to know anything, as long as you can stay alive somehow. 實際上,我認為有些東西你不需要了解,當前你還能夠賴以生存的話. So they're right: you don't need to know math, and you can get by for your entire life just fine withoutit. 所以他們是對的:你不需要了解數學,並且沒有數學你也能過的很好. But a few things I've learned recently might surprise you: 但是最近我學到一些東西可能會讓你也感到驚喜: They teach math all wrong in school. Way, WAY wrong. If you teach yourself math the right way, you'll learn faster, remember it longer, and it'll be much more valuable to you as a programmer. 學校里教數學的方式都錯了.僅僅是教學的方法錯了,不是教數學本身錯.如果你以正確的方式學習數學的話,你會學的更快,記住這點,對你,作為一個程序員來說很有價值. Knowing even a little of the right kinds of math can enable you do write some pretty interesting programs that would otherwise be too hard. In other words, math is something you can pick up a little at a time, whenever you have free time. 哪怕了解一點點相關的數學知識,就能讓你寫出可愛有趣的程序,否則會有些小難度.換句話講,數學是可以慢慢學的,只要你有時間. Nobody knows all of math, not even the best mathematicians. The field is constantly expanding, as people invent new formalisms to solve their own problems. And with any given math problem, just like in programming, there's more than one way to do it. You can pick the one you like best. 沒人能了解所有的數學,就是最棒的數學家也不是.當人們發明新的形式去解決自己的問題時,數學領域就不斷的擴展.一些給出的數學問題,也正如編程,不止一種方法可以去解決他.你可以挑個你最喜歡的方式. Math is... ummm, please don't tell anyone I said this; I'll never get invited to another party as long as I live. But math, well... I'd better whisper this, so listen up: (it's actually kinda fun.) 數學是......嗯,請別告訴別人我說過這個哈;當然我也不指望誰能邀請我參加這樣的派對,在我還活著的時候.但是,數學其實就是......我還是小聲的說吧,聽好了:(她其實就是一種樂趣啦!) The Math You Learned (And Forgot) 你學到的數學(和你忘了的數學) Here's the math I learned in school, as far as I can remember: 這兒是我能記得的在學校學到的數學: Grade School: Numbers, Counting, Arithmetic, Pre-Algebra ("story problems") 初中:數,數數,算術知識,初級代數("帶問題的小故事") High School: Algebra, Geometry, Advanced Algebra, Trigonometry, Pre-Calculus (conics and limits) 高中:代數,幾何,高等代數,三角學,微積分先修課 (二次曲線論和極限) College: Differential and Integral Calculus, Differential Equations, Linear Algebra, Probability and Statistics, Discrete Math 大學:微積分,微分公式,線性代數,概率和統計,離散數學 How'd they come up with that particular list for high school, anyway? It's more or less the same courses in most U.S. high schools. I think it's very similar in other countries, too, except that their students have finished the list by the time they're nine years old. (Americans really kick butt at monster-truck competitions, though, so it's not a total loss.) 上面那個關於高中數學課程單子上所列的,怎麼來著?美國高中幾乎都是這樣的課程設置.我認為其他國家也會很相似的,除了那些在9歲之前就掌握了這些課程的學生.(美國小孩同時卻在熱衷於玩魔鬼卡車競賽,雖然如此,整個來說也算不上什麼大損失.) Algebra? Sure. No question. You need that. And a basic understanding of Cartesian geometry, too. Those are useful, and you can learn everything you need to know in a few months, give or take. But the rest of them? I think an introction to the basics might be useful, but spending a whole semester or year on them seems ridiculous. 代數?是的.沒問題.你需要代數.和一些理解解析幾何的知識.那些很有用,並且在以後幾個月里,你能學到一切你想要的,十拿九穩的.剩下的呢?我認為一個基本的介紹可能會有用,但是在這上面花整個學期或一年就顯得很荒謬了. I'm guessing the list was designed to prepare students for science and engineering professions. The math courses they teach in and high school don't help ready you for a career in programming, and the simple fact is that the number of programming jobs is rapidly outpacing the demand for all other engineering roles. 我現在意識到那個書單列表原是設計來准備給那些以後要當科學家和工程師的學生的.他們在高中里所教的數學課程並不是為你的編程生涯做准備的,簡單的事實是,多數的編程工作所需要的數學知識相比其他作為工程師角色的人所需要的數學增長的更快. And even if you're planning on being a scientist or an engineer, I've found it's much easier to learn and appreciate geometry and trig after you understand what exactly math is — where it came from, where it's going, what it's for. No need to dive right into memorizing geometric proofs and trigonometric identities. But that's exactly what high schools have you do. 即使你打算當一名科學家或者一名工程師,在你理解了什麼是數學之後-- 數學它如何而來,如何而去,為何而生,我發現這更加容易去學習和欣賞幾何學和三角學.不必去專研記住幾何上的證明和三角恆等式,雖然那確實是高中學校要求你必須去做的. So the list's no good anymore. Schools are teaching us the wrong math, and they're teaching it the wrong way. It's no wonder programmers think they don't need any math: most of the math we learned isn't helping us. 所以這樣的書單列表不再有什麼用了.學校教給我們的不是最合適的數學,並且方式也不對.不奇怪程序員認為他們不再需要數學:我們學的大部分數學知識對我們的工作沒什麼大的幫助. The Math They Didn't Teach You 他們沒有教給你的那部分數學 The math computer scientists use regularly, in real life, has very little overlap with the list above. For onething, most of the math you learn in grade school and high school is continuous: that is, math on the real numbers. For computer scientists, 95% or more of the interesting math is discrete: i.e., math on the integers. 在現實中,計算機科學家經常使用的數學,跟上面所列的數學僅有很小的重疊. 舉個例子,你在中學里學的大部分數學是連續性的:也就是說,那是作為實數的數學.而對於計算機科學家來說,他們所感興趣的95%也許更多的是離散性的:比如,關於整數的數學. I'm going to talk in a future blog about some key differences between computer science, software engineering, programming, hacking, and other oft-confused disciplines. I got the basic framework for these (upcoming) insights in no small part from Richard Gabriel's Patterns Of Software, so if you absolutely can't wait, go read that. It's a good book. 我打算在以後的博客中再談一些有關計算機科學,軟體工程,編程,搞些有趣的東東,和其他常常令人犯暈的訓練.我已經從Richard Gabriel的軟體的模式這本書中洞察到一個無關巨細的基本框架.如果你明顯的等不下去的話,去讀吧.是本不錯的書. For now, though, don't let the term "computer scientist" worry you. It sounds intimidating, but math isn't the exclusive purview of computer scientists; you can learn it all by yourself as a closet hacker, and be just as good (or better) at it than they are. Your background as a programmer will help keep you focused on the practical side of things. 到現在為止,不要讓"計算機科學家"這個詞困擾到你.它聽上去很可怕,其實數學不是計算機科學家所獨有的領域,你也能作為一個黑客自學它,並且能做的和他們一樣棒.你作為一個程序員的背景將會幫助你保持只關注那些有實踐性的部分. The math we use for modeling computational problems is, by and large, math on discrete integers. Thisis a generalization. If you're with me on today's blog, you'll be studying a little more math from now on than you were planning to before today, and you'll discover places where the generalization isn't true. But by then, a short time from now, you'll be confident enough to ignore all this and teach yourself math the way you want to learn it. 我們用來建立計算模型的,大體上是離散數學.這是普遍的做法.如果正好今天你在看這篇博客,從現在起你正了解到更多的數學,並且你會認識到那樣的普遍做法是不對的.從現在開始,你將有信心認為可以忽略這些,並以你想要的方式自學. For programmers, the most useful branch of discrete math is probability theory. It's the first thing they should teach you after arithmetic, in grade school. What's probability theory, you ask? Why, it's counting. How many ways are there to make a Full House in poker? Or a Royal Flush? Whenever you think ofa question that starts with "how many ways..." or "what are the odds...", it's a probability question. And as it happens (what are the odds?), it all just turns out to be "simple" counting. It starts with flipping acoin and goes from there. It's definitely the first thing they should teach you in grade school after you learn Basic Calculator Usage. 對程序員來說,最有效的離散數學的分支是概率理論.這是你在學校學完基本算術後的緊接著的課.你會問,什麼是概率理論呢?你就數啊,看有多少次出現滿堂彩?或者有多次是同花順. 不管你思考什麼問題如果是以"多少種途徑..."或"有多大幾率的...",那就是離散問題.當他發生時,都轉化成"簡單"的計數.拋個硬幣看看...? 毫無疑問在他們教你基本的計算用法後他們會教你概率理論. I still have my discrete math textbook from college. It's a bit heavyweight for a third-grader (maybe), but it does cover a lot of the math we use in "everyday" computer science and computer engineering. 我還保存著大學里的離散數學課本.可能他只佔了三分之一的課程,但是它卻涵蓋了我們幾乎每天計算機編程工作大部分所用到的數學. Oddly enough, my professor didn't tell me what it was for. Or I didn't hear. Or something. So I didn't pay very close attention: just enough to pass the course and forget this hateful topic forever, because I didn't think it had anything to do with programming. That happened in quite a few of my comp sci courses in college, maybe as many as 25% of them. Poor me! I had to figure out what was important on my own, later, the hard way. 也真是夠奇怪的,我的教授從沒告訴我數學是用來干嗎的.或者我也從來沒有聽說過.種種原因吧.所以我也從沒有給以足夠的注意:只是考試及格然後把他們都忘光,因為我不認為她還和編程有啥關系.事情變化是我在大學學完一些計算機科學的課程之後,也許是25%的課程.可憐啊!我必須弄明白什麼對於自己來說是最重要的,然後再是向深度發展. I think it would be nice if every math course spent a full week just introcing you to the subject, in themost fun way possible, so you know why the heck you're learning it. Heck, that's probably true for every course. 我想,如果每門數學課都花上整整一周的時間,而只是介紹讓你如何入門的話,那將非常不錯,這是最有意思的一種假設,那麼你知道了你正學習的對象是哪種怪物了.怪物,大概對每一門課都合適. Aside from probability and discrete math, there are a few other branches of mathematics that are potentially quite useful to programmers, and they usually don't teach them in school, unless you're a math minor. This list includes: 除了概率和離散數學外,還有不少其他的數學分支,可能對程序員相當的有用,學校通常不會教你的,除非你的輔修科目是數學.這些數目列表包括: Statistics, some of which is covered in my discrete math book, but it's really a discipline of its own. A pretty important one, too, but hopefully it needs no introction. 統計學,其中一些包括在我的離散數學課里,她的某些訓練只限於她自身.自然也是相當重要的,但想學的話不需要什麼特別的入門. Algebra and Linear Algebra (i.e., matrices). They should teach Linear Algebra immediately after algebra. It's pretty easy, and it's amazingly useful in all sorts of domains, including machine learning. 代數和線性代數(比如,矩陣).他們會在教完代數後立即教線性代數.這也簡單,這但相當多的領域非常有用,包括機器學習. Mathematical Logic. I have a really cool totally unreadable book on the subject by Stephen Kleene, the inventor of the Kleene closure and, as far as I know, Kleenex. Don't read that one. I swear I've tried 20 times, and never made it past chapter 2. If anyone has a recommendation for a better introction to this field, please post a comment. It's obviously important stuff, though. 數理邏輯.我有相當完整的關於這門學科的書沒有讀,是Stephen Kleene寫的,克林閉包的發明者,我所知道的還有就是Kleenex.這個就不要讀了.我發誓我已經嘗試了不下20次,卻從沒有讀完第二章.如果哪位牛掰有什麼更好的入門建議的話可以給我推薦.雖然,這明顯是非常重要的一部分. Information Theory and Kolmogorov Complexity. Weird, eh? I bet none of your high schools taught either of those. They're both pretty new. Information theory is (veeery roughly) about data compression, and Kolmogorov Complexity is (also roughly) about algorithmic complexity. I.e., how small you can you make it, how long will it take, how elegant can the program or data structure be, things like that. They're both fun, interesting and useful. 信息理論和柯爾莫戈洛夫復雜性理論.真不可思議,不是么?我敢打賭沒哪個高中會教你其中任何一門課程.她們都是新興的學科.信息理論是(相當相當相當相當難懂)關於數據壓縮,柯爾莫戈洛夫復雜性理論是(同樣非常難懂)關於演算法復雜度的.也就是說,你要把它壓縮的盡量小,你所要花費的時間也就變的越長,同樣的,程序或數據結構要變得多優雅也有同樣的代價.他們都很有趣,也很有用. There are others, of course, and some of the fields overlap. But it just goes to show: the math that you'll find useful is pretty different from the math your school thought would be useful. 當然,也有其他的一些因素,某些領域是重復的.也拿來說說吧:你所發現有用的那部分數學,不同於那些你在學校里認為有用的數學. What about calculus? Everyone teaches it, so it must be important, right? 那微積分呢?每個人都學它,所以它也一定是重要的,不對嗎?