好程式設計師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培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享演算法入門到精通之02演算法複雜度(一)程式設計師Java演算法複雜度
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Python培訓分享Python系列之字串的使用程式設計師Python字串
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Python培訓分享Python系列之迴圈結構程式設計師Python
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享Java之命名、標示符、變數程式設計師Java變數
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師Java培訓分享Java面試題之Java集合篇三程式設計師Java面試題
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享Spring Ioc的原理程式設計師JavaSpring
- 好程式設計師Java培訓分享SpringBoot入門篇程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享之RMI與RPC的區別程式設計師JavaRPC
- 好程式設計師Java培訓分享學Java程式設計要注意什麼程式設計師Java
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師Java培訓分享SpringBoot -自動配置原理程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- 好程式設計師大資料培訓分享演算法系列資料庫使用者管理程式設計師大資料演算法資料庫
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark