-
1 # 梨有奶香味
-
2 # 山石嶙嶙
說到演算法,實際上是軟體系統工程師解決應用問題的一種關鍵思路,也可以說是技術訣竅。一般來講,需要紮實的數學功底,物理知識,以及邏輯學理論,控制論,通訊理論以及高效的計算機語言。
-
3 # 機器學習之路
想要學好演算法,首先還是要學好資料結構,畢竟很多演算法都是基於堆、棧、圖、樹、集合、列表、佇列等結構設計的,所以必須要熟練掌握這些結構的運用才能設計出高效率的演算法。除此之外,還需要掌握一些常用的演算法如排序演算法、查詢演算法、規劃演算法等,還需要掌握一門高效的程式語言來以便於實現你設計的演算法。這裡給大家推薦幾本書,大家可以去了解一下
資料結構資料結構(data structure)是帶有結構特性的資料元素的集合,它研究的是資料的邏輯結構和資料的物理結構以及它們之間的相互關係,並對這種結構定義相適應的運算,設計出相應的演算法,並確保經過這些運算以後所得到的新結構仍保持原來的結構型別。簡而言之,資料結構是相互之間存在一種或多種特定關係的資料元素的集合,即帶“結構”的資料元素的集合。“結構”就是指資料元素之間存在的關係,分為邏輯結構和儲存結構。
清華大學鄧俊輝的《資料結構》《清華大學計算機系列教材:資料結構(C++語言版)(第3版)》按照面向物件程式設計的思想,根據作者多年的教學積累,系統地介紹各類資料結構的功能、表示和實現,對比各類資料結構適用的應用環境;結合實際問題展示演算法設計的一般性模式與方法、演算法實現的主流技巧,以及演算法效率的評判依據和分析方法;以高度概括的體例為線索貫穿全書,並透過對比和類比揭示資料結構與演算法的內在聯絡,幫助讀者形成整體性認識。
演算法《演算法導論》全面地介紹了計算機演算法。對每一個演算法的分析既易於理解又十分有趣,並保持了數學嚴謹性。本書的設計目標全面,適用於多種用途。涵蓋的內容有:演算法在計算中的作用,機率分析和隨機演算法的介紹。書中專門討論了線性規劃,介紹了動態規劃的兩個應用,隨機化和線性規劃技術的近似演算法等,還有有關遞迴求解、快速排序中用到的劃分方法與期望線性時間順序統計算法,以及對貪心演算法元素的討論。此書還介紹了對強連通子圖演算法正確性的證明,對哈密頓迴路和子集求和問題的NP完全性的證明等內容。全書提供了900多個練習題和思考題以及敘述較為詳細的例項研究。
程式語言一般在編寫演算法程式的時候,為了追求程式執行的高效性大多都會選擇C語言
C語言程式設計
本書原著即為C語言的設計者之一Dennis M.Ritchie和著名計算機科學家Brian W.Kernighan合著的一本介紹C語言的權威經典著作。我們現在見到的大量論述C語言程式設計的教材和專著均以此書為藍本。原著第1版中介紹的C語言成為後來廣泛使用的C語言版本——標準C的基礎。人們熟知的“hello,World"程式就是由本書首次引入的,現在,這一程式已經成為眾多程式設計語言入門的第一課。
C和指標
全書共18章,覆蓋了資料、語句、運算子和表示式、指標、函式、陣列、字串、結構和聯合等幾乎所有重要的C程式設計話題。書中給出了很多程式設計技巧和提示,每章後面有針對性很強的練習,附錄部分則給出了部分練習的解答。
刷題在學習的過程中,還可以去刷一些演算法題,幫助在學習過程中更好的理解
LeetCode
LeetCode官網:https://leetcode-
cn.com/
在LeetCode上面包含了許多的演算法練習題,爭取能夠都刷一篇,有精力的同學可以多刷幾遍加深理解,這些題目在面試過程中可能會經常出現。
這裡給大家推薦一個關於LeetCode的解題筆記,裡面詳細介紹瞭解題的過程和方法以及作者的總結,目前在git上已經超過2w顆星了,在學習過程中大家可以結合這個一起看,來幫助大家更好的理解和學習
leetcode解題筆記:
https://github.com/azl397985856/leetcode
回覆列表
做演算法題和高中做數學題差不多,掌握解決每類問題的思路,大多數題都是老酒換個新瓶,能把主流的解決問題的方法掌握,就能應對百分之90的面試,演算法我也是菜雞一個