算法簡介
大家好,今天我們開始學習一個新專題 — 算法(Algorithm)。關于算法,我們日常開發中有很多應用,介紹算法的書籍也有很多,其中涉及到的知識點和信息量都很龐大,這個專題我們重點針對基于 Java 語言實現的算法設計和應用進行講解,讀者也可以自己將其擴展到其他語言的實現。本文我們主要先介紹一下算法是什么?為什么要學習算法?常用的算法有哪些?
1. 什么是算法(Algorithm)?
什么是算法呢?在維基百科中這樣定義的:
在數學和計算機科學中,算法是一個有限的、定義明確的、可在計算機上實現的指令序列,通常是為了解決一類問題或進行計算。算法總是不含糊的,是作為執行計算、數據處理、自動推理等任務的規范。 — 維基百科
通俗一點來說,算法就是用來解決一類問題或者進行計算的,但是需要有一個明確的數學或者計算機科學定義,可以在計算指令上實現。
2. 為什么要學習算法?
前面說到算法是有明確的數學和計算機科學定義的,那我們為什么要學習算法了?
2.1 作為基礎知識
算法其實是一種通用的基礎知識,算法本身與任何計算機編程語言、操作系統等無關;算法是定義良好的通用的計算過程。比如我們在學習 Java 語言的時候,發現里面有很多關于數組(Array),集合(Set),哈希表(Map)等數據結構,這些數據結構的實現底層都涉及到了算法知識。學習算法知識有助于我們可以更好地理解編程語言的一些內部實現,幫助我們理解其中的函數設計思路及底層代碼實現邏輯。
算法作為基礎知識,學習算法就等于是學習數學、操作系統、數據庫等大學基礎課程一樣,有助于我們培養良好的計算機基礎理論知識,有助于自己更好的職業生涯發展。
2.2 解決實際問題
現實生活中的很多實際問題都可以歸結到某種算法實現,比如我們經常用到的地圖導航軟件,不知道大家有沒有思考過導航軟件是如何為我們規劃出出行路線規劃的了?其實里面就會涉及到算法領域的一些圖算法知識(這里不做過多介紹,在后續的章節里面會有詳細說明)。
還有現在很多的抖音小視頻 APP,大家都發現一不小心刷個抖音就過去了一個小時了,為什么推薦給你的小視頻會對你如此有吸引力了?其實這是因為在抖音內部實現中有一套規則復雜的視頻推薦算法,可以給每個用戶推薦自身喜歡看的小視頻。
總而言之,算法知識可以用來解決現實生活和開發場景中的各種問題。
2.3 求職者的必備基礎知識
現在大家去一些稍微好一點大廠求職,無論你是做哪個開發崗位,如果說自己對算法知識一點都了解,估計肯定會被面試官戲弄一番了。其實,基礎算法知識及對應的邏輯思維已經成為每個互聯網公司招聘開發崗求職者的一個必備條件了。在 BAT 這種大廠里,算法知識可能就是技術面試中的一個極為重要的環節了。所以,學習一些算法知識,有助于我們在面試中脫穎而出。
3. 算法好壞的評價標準是什么?
當大家針對同一個問題都各自設計出自己的算法出來時,我們如何對算法的好壞做出評判呢?首先,算法必須是正確的,意思就是算法可以正確地解決問題。當滿足這一前提條件之后,我們還需要哪些條件來判斷算法的好壞呢?主要有以下兩點:
- 時間復雜度 :時間復雜度就是判斷這個算法解決某個實際問題所需要花費的時間周期是多少,時間越短,說明算法設計得越好。
- 空間復雜度:空間復雜度就是說這個算法在解決實際問題時計算機設備需要消耗多少內存空間,需要消耗的內存空間越少,說明算法設計得越好。
當比較算法的好壞時,我們需要在相同的實驗環境下進行測試。同時,在日常的開發實踐中,很多時候我們在設計算法時需要綜合考慮算法的時間復雜度和空間復雜度,以便可以達到一個更好的平衡。
4. 學習基礎
- 學習這門課程首先至少需要會一門編程語言,最好是 Java 語言,因為接下來的示例程序會選擇用 Java 語言編寫。
- 有一定的數學基礎,可以理解一些數學定義。