好程式設計師Java培訓分享演算法系列之演算法概述
好程式設計師 Java 培訓分享 演算法系列之演算法概述 , 開篇 : 演算法,一個聽起來很厲害的詞。也是最近幾年特別火的詞。很多大學生都想學習演算法,因為它是大廠和高薪工作的代名詞。但是有關演算法系列的書籍或者文章不多,或者說是成系列的、從入門到精通的文章不多,從而導致我們學習起來比較困難。於是,我就計劃寫一系列適合大學生學習的演算法文章,讓更多的人能學習演算法。本系列的所有演算法實現將採用java 程式碼實現,所以需要有一定的 java 基礎。
什麼是演算法?
在Collins大詞典中有如下解釋:
An algorithm is a series of mathematical steps, especially in a computer program, which will give you the answer to a particular kind of problem or question.
在計算機中,由計算機程式(可以是java、c、Python等),透過一系列的數學步驟,解決一個特定問題的方法就是演算法。
大白話理解,演算法就是在計算機中實現數學邏輯或者數學公式的程式碼。
學習演算法需要掌握的知識
1、任何一種程式語言,java、c、c++、Python等。
2、資料結構,不如陣列、連結串列、樹、圖等
3、有一定的數學功底,如果數學知識忘記不要緊,文章中如果涉及到高中以上數學知識的話,也會帶著大家複習一下數學。
演算法和數學聯絡和區別
上面我們解釋什麼是演算法的時候,提到了數學,那麼數學和演算法是什麼關係呢?是不是演算法就等於數學呢?帶著這樣的疑問,我們來看下面的這個例子。
1、一道小學數學題舉例:
題目:請計算1+2+3+4+…+N的和。
數學公式:(1+N)*N/2
上面這個公式就是數學公式,大家應該沒有異議吧。因為我們在小學學習數學的時候就見過這樣的一道數學題。那麼同樣的數學題用java程式碼怎麼實現呢?
2、Java程式碼實現:
/**
* 計算1+2+3+…+100的和
* @param n
* @return 返回總和
*/
public static int algorithm(int n){
int sum=0;
for (int I = 1; I <= n; I++) {
sum+=I;
}
return sum;
}
上面這個程式碼,稍微懂程式的人都能看明白,寫得沒有錯,就是一個地道的java程式碼在計算1到n的總和。
3、Java演算法實現:
public static int algorithm2(int n) {
return (1+n)*n/2;
}
上面程式碼是java演算法實現的1到n的總和,有同學可能有疑問,這不就是數學公式嗎,寫到程式碼裡面就是演算法了?對,這就是演算法。當然,上面這個演算法非常簡單,簡單到方法體內部就是一個數學公式;也會有非常複雜的數學邏輯需要有很多行程式碼才能實現。
總結:用程式碼實現的數學叫做演算法。
學習演算法為什麼要掌握資料結構
演算法必然會有資料的輸入和輸出,比如上面的1到100的演算法。入參就是輸入的資料,返回值就是輸出的資料。往往有一些演算法在執行之前,需要先整理資料(就好比把資料存起來),整理資料必然要涉及到資料結構。資料提前整理的比較好,演算法可能就比較簡單;資料比較雜亂,演算法可能就比較複雜。
演算法的作用
為一個任務找到最合適的演算法,可以大大提升計算機的效能。演算法可以在固定的硬體條件下來提升系統的效能;如果沒有演算法,我們只能靠增加機器裝置來提升系統效能。所以,演算法有助於系統最佳化。往往在實際開發中,為了找到一個最合適的演算法,我們需要反覆且複雜的數學分析,也叫做演算法分析。
總結
演算法是一種特殊的數學形式,掌握演算法,不論是java程式設計師或者c程式設計師,都是有非常大的意義,至少寫出來的程式碼效能好。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2695561/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java培訓分享演算法入門到精通之-演算法概述程式設計師Java演算法
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- 好程式設計師Java培訓分享Java教程垃圾回收與演算法程式設計師Java演算法
- 好程式設計師Java培訓分享Java常見排序演算法之插入排序程式設計師Java排序演算法
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享Java類載入的過程概述程式設計師Java
- 好程式設計師Java培訓分享Redis快取使用場景概述程式設計師JavaRedis快取
- 好程式設計師Java培訓分享演算法入門到精通之02演算法複雜度(一)程式設計師Java演算法複雜度
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享Java面試題之Java集合篇三程式設計師Java面試題
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享Java之命名、標示符、變數程式設計師Java變數
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師Python培訓分享Python系列之字串的使用程式設計師Python字串
- 好程式設計師Java培訓分享學Java程式設計要注意什麼程式設計師Java
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java培訓分享Java面試題集合篇二程式設計師Java面試題
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享面試Java要注意什麼程式設計師Java面試
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- 好程式設計師Java培訓分享面試Java的注意事項程式設計師Java面試
- 好程式設計師Java培訓分享Java中級面試題合集程式設計師Java面試題
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師Java培訓分享Spring Ioc的原理程式設計師JavaSpring
- 好程式設計師Java培訓分享之RMI與RPC的區別程式設計師JavaRPC
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark