C語言初學者進階學習數據結構與演算法路線?方法?
01-03
本人C算是入門了..也稍微接觸過ACM.手上有部分書籍資源(數據結構與演算法分析--C語言描述).
本人一直糾結,無從下手,在看書時候發現裡面又涉及到一些數學的知識.不知道按怎樣的路線去學習例如學習書籍應該按一個怎樣的順序(大概) http://www.zhihu.com/question/19830721這裡回答得挺好,但是覺得還是偏重在方法.目的:提高自身編程能力,提高演算法能力.希望能在大半年或一年內有所提高.願意埋頭學習!本人目前大一,打算往C/C++,linux方向發展.專業是嵌入式.
學之前先給自己定一個準確的目標,是要打好基礎,消除知識漏洞,還是說要做演算法大拿。如果是後者,我表示沒啥可說的,《具體數學》--《演算法導論》--《計算機程序設計藝術》或許是條可以走的路。如果是前者,可以先看《大話數據結構》,了解常見的數據結構,並實現之,算是入門。一個月左右可完成,不需要任何高等數學的底子;然後,可以去翻《數據結構與演算法分析--C語言描述》,推薦英文原版,個人感覺中文版的翻譯得很屎。看這本書的同時可以去ACM刷點水題,進度就要看個人悟性了,我磨蹭了快一年才翻了一遍,看完之後數據結構算是圓滿了。再之後可以看演算法了,可以翻一翻《演算法導論》。如果嫌過多,可以去借本演算法的入門書,有本沙特人寫的還算不錯,名字記不得了
原來是大一的,那我扯遠一點。
先把C語言的語法搞定,這是基礎中的基礎,其他很多語言的語法其實和C相差無幾,只是設計思想的區別。編程語言是工具,更不要提編程語言使用的演算法了。所謂工具沒有好壞,只有場合。我推薦多寫,這樣既能提高自己駕馭語言的能力和技巧,又能在實戰中熟悉演算法。說實話,看書背O(n)不如寫一個鏈表來的實在。最後,關於linux,想往linux方向發展就先用linux發行版吧,其實弄懂了你的X86架構,其他的架構也是一通百通。嵌入式嘛……就我自己的學習經歷來看,買一個開發板折騰比較好,現在很多賣這種產品的,提供了大量的配套示例和文檔,對入門非常非常非常有幫助。最後的最後,有時間的話,嘗試參與開源項目吧,在Github上或者Launchpad找找,大部分項目的代碼既成熟又優雅,讀的越多,視野越開闊。
嵌入式,這個剛好對我的口味。作為一個即將踏上工作崗位的應屆小本來說,我提出自己的一點看法,也是對自己學習嵌入式的一個小總結。說實話,嵌入式中的演算法主要在應用層,比如音視頻編解碼,基於DSP的圖像處理,信號識別檢測之類的。如果想嚮應用層上面走,那麼基本的查找,排序,鏈表,二叉樹要熟悉並知道每種基本演算法的應用優缺點,比較複雜的演算法就不僅僅是編程語言上門的了,而是演算法背後深刻的數學處理和變換。如果想想要往底層上走,那麼操作系統的相關演算法,比如頁面調度,內存管理,處理器調度的基本演算法知道是怎麼個流程那就足夠了,畢竟國內在底層演算法的優化改進上面,還是處於探索階段(這是我自認為的,歡迎質疑)。對照的Linux內核源碼,了解上述底層演算法的基本實現和應用介面就足夠了(做內核開發的除外)。因為自己是偏底層的,目前認為,嵌入式的底層主要是對系統模塊架構的理解和熟悉,包括與硬體相關的驅動層,和上層操作系統相關的中間件層,其中,關係複雜,結構龐大,想方方面面完全搞懂基本上不可能的,能用系統API實現的功能就不要心血來潮自己來實現。
說的好像偏題了,編程的話,不要只局限於C,C++,嵌入式中的腳本語言用的很多的,學好shell,python等等,精通一門,讀讀UNIX系統編程和UNIX高級環境編程,TCP/IP詳解三卷套..要對整個系統有個大體的了解,演算法只是其中一部分.
學習嵌入式系統開發可以按這條路線來全面系統學習:C語言-Linux-arm-Linux底層開發-項目實戰,學好每一階段必不可少,特別是自己能動手做項目,才能達到好的學習效果。其中C語言推薦視頻資料:嵌入式C語言高級
新手如何學習c語言_C語言中方便的數組(1)
新手如何學習c語言_C語言中方便的數組(1)
推薦閱讀:
※為什麼大多數編程語言的內建抽象數據類型沒有圖?
※自學離散數學,用哪一本書比較好?我自己已經有很多本好難選?
※如何設計數據結構和演算法,計算並存儲六度好友關係?
※用鏈表的目的是什麼?省空間還是省時間?
※如何將數據結構和演算法應用到實際之中?
TAG:演算法 | 編程 | Linux | C編程語言 | 嵌入式系統 | 數據結構 | 編程學習 | CC | 嵌入式開發 | 演算法與數據結構 | ACM競賽 |