-
1 # 子子健康
-
2 # 大學生程式設計指南
一個成熟的程式設計師資料結構和演算法屬於基本必備素質,很多程式設計師覺得演算法距離自己有點距離,正常情況下演算法不是滲透到每個角落。但程式的執行效率散佈在每個角落。所以學習資料結構和演算法能讓效率的執行貫徹到每個角落裡面,優秀的程式設計師會反覆的揣摩自己寫程式碼執行效率,以及程式碼的耐久程度,這點經常玩開源社群的小夥伴應該有啟示,之前訂閱過linux核心以及瀏覽器核心郵件每天郵件數量成千上萬,不僅僅為了給軟體增加新的功能,更多的是對軟體程式碼的重構,覺得之前的程式碼實現效果不如想象的樣子,於是推到重來繼續搞,覺得還不過癮,繼續重構直到達到實際效果為準,這裡麵包含著一種內在的求知慾。
程式設計師具體什麼情況下使用資料結構或者演算法?1.單純意義上的演算法並不是實時出現在程式中,絕大部分模組功能對於演算法要求不是那麼細緻,演算法主要出現在影響效率的地方,舉個例子在搞瀏覽器的時候需要增加一個廣告過濾的功能,要過濾掉一些網站廣告就需要增加一些廣告的網址,然後這些網址放在一個檔案裡面,如果只有幾十條記錄這種效率影響很小,但如果是幾百條或者上千條這個效率影響就非常大了,如果單純採用窮舉法不是不行,效率就真的非常低了。
3.程式設計師在構思模組設計的時候,其實資料邏輯都是圍繞資料結構展開,資料結構完成了程式碼邏輯差不多也就完成了,資料結構裡面的每個數值如何傳遞,如何處理這條線路走通了整個設計邏輯框架也就出來了。
有一本專門涉及到演算法是書籍,《演算法導論》值得學習看下,裡面列舉了很多常用的演算法,有興趣的可以去研究看下,不能只是研究需要把演算法對應到程式碼去看,學以致用。
-
3 # 一個存在感小透明
做了BAT的一面面試官才知道,這二者在面試中是佔有絕對的重要性的。對於實習生來說,通常沒有太多專案經驗,而就算有專案經驗也不會像社招人員一樣專業深入,因此我們更傾向於瞭解學生的基本功是否紮實以及思維是否靈活。
接下來,我就介紹下如何學習資料結構和演算法。
資料結構如果是計算機相關專業出身,那麼本科是一定有一門叫做《資料結構》的課程的。這裡先推薦我們當時的教材,由嚴蔚敏主編,清華大學出版的《資料結構(C語言)》。
這本書針對初學者,全面的由淺入深的介紹了大部分常用資料結構,比如如陣列,表,堆疊,佇列,圖,樹等。裡面還有面試時候常見問題,比如二叉樹遍歷,用隊列表達堆疊等等。我認為,資料結構是一種有規律的儲存並操作資料的方式,可以看做建房子階段的材料,比如混凝土,磚塊,鋼筋,都屬於一種資料結構。
演算法其實演算法也是本科期間的一門必修課,但是這裡我不想推薦我們當時的教材,因為感覺國內的演算法教材質量真的是比國外差一大截。演算法是程式的靈魂,是在掌握了程式語言和資料結構之後,驅動這二者來進行創造的核心能力。我推薦《演算法導論》,這本書稍微有點大塊頭,但是如果能啃動,絕對是能讓你的能力平地青雲的利器。
最後推薦一本演算法和資料結構的合體書籍,這本書需要較好的數學功底,因為內容設計到一些推導,如果能夠讀懂三分之二,國內不管是BAT還是外企,應該都可以毫無疑問的隨便挑了(針對校招,實習生,因為社招更注重專案經驗是否匹配)。
書名叫做《資料結構與演算法分析》,是美華人編寫的一本老牌計算機領域書籍了。
資料結構與演算法本身就是偏理論的知識,不像開發web專案可以在熟悉書本知識後立刻實踐。因此我推薦的方法更多是讀書,通過了解書中的知識,來融會貫通使用在今後的工作中。
回覆列表
學習資料結構與演算法沒什麼好的捷徑,簡單來說兩點,首先大腦要思考演算法複雜度,什麼場景有什麼資料結構,第二就是細節,用c語言手寫資料結構,就是帶結構體指標的資料結構,練習數月下來應該就入門了,當然現在應用開發也不怎麼需要手寫資料結構了,要看你走哪個方向了,任重而道遠