Sedgewick有本《演算法 C語言實現》,分兩冊。


我理解題主的意思是提高用c做演算法題的能力。

眾所周知演算法包含太多,能力也與語言沒有關係,但是做演算法題總是要用一門語言的,用c的講真不是太多。

先講c的優勢:快。刷過oj的應該都知道一個有趣的竅門,c艹中輸出將cout換成printf會更快,在一些極端情況下可能替換後題目就a了。c和c艹幾乎總是佔據時間榜榜首。這跟語言特性有關,不多說。另外就是絕大多數院校都會以c或c艹作為計算機入門的第一種高級語言,所以大家都很熟悉哈哈~再說一些c的弊端,尤其是與c艹相比:過於缺乏完備的數據結構和底層庫。項目中因為可以引入庫或自己造輪子,這個問題並不是很突出。但是在oj環境中,一些基礎的庫,尤其是數據結構的缺乏卻為解決問題帶來了不小的困難,比如鏈表,優先隊列,map等等。你不用吧,沒法寫,用吧,還得自己寫個數據結構和方法,你說蛋疼不蛋疼。c艹,用effective cpp的話來講,就是c+對象+標準庫+泛型,其中標準庫提供的眾多容器是刷oj極強力的工具,因為有了性能良好方法完備的數據結構,我們可以專註於演算法本身的解決,而不是將大量精力投入到寫數據結構+邊界處理(由於c本身的緣故,邊界處理不好很容易core。。。這就很噁心了),這也是c艹在acm中極受歡迎的原因之一啦~最後給建議:如果題主更關注演算法,那麼演算法確實與語言無關,寫演算法c轉c艹只需要學一學容器的使用,成本低,上手快,因此建議轉cpp。如果題主只想用c,建議多看看各種數據結構的c實現,另外準備一些常用的數據結構的源碼(就是能直接粘過去那種),降低重複工作。還有就是c的邊界處理注意下(多做些就有感覺),刷起來跟其他語言沒啥區別,leet上好多極簡單快速的實現都是c寫的~

另外,講真刷題和實際工程差別很大,建議題主可以多往實際應用上靠一靠,比如c里內存管理等等,在刷題中體現不出來,而實際中又是很重要的,可以看一看~

總之加油~共勉!(手打不易,見識有限,大家多提意見交流撒)


我只能算是編程愛好者吧,畢竟對題目不能看到題就有了腹稿,然後上機直接就編程了,今年寒假前和輔導老師交流,他說要想在編程這條路上一直走下去,演算法是必須會的,特別是問我有沒有參加過建模比賽,像數學建模一類的,因為建模就會接觸到演算法,編程演算法都是大同小異的,基本的思想都是在那。所以,建議題主一邊學習演算法一邊練習相關的編程,最好還要自己找些簡單的編程循序漸進的練著,不會的百度,然後自己再編一遍,查錯,糾正,總結。像我這個寒假練習就是建立一個文件夾,把自己的編程都放在裡面,常常看看,畢竟編程這種東西,只會熟能生巧。在練習過程中,錯誤多了也不要灰心。因為我是那種單純有興趣,所以會在上面下功夫,有時候一天只能寫一個程序,百度不同的演算法,比較不同的程序。總之,樂在其中吧。emmmm知乎裡面第一次回答,不足之處多多包涵
刷題,演算法題,遇到不會的就去學對應的演算法,看演算法書或者上網搜。找個好演算法書,邊學邊刷題,刷題網站很多就不說了。順便多寫博客做總結。
刷一刷 演算法導論或者數據結構的 演算法。要上機練習。


推薦閱讀:
相关文章