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知乎里面第一次回答,不足之处多多包涵
刷题,演算法题,遇到不会的就去学对应的演算法,看演算法书或者上网搜。找个好演算法书,边学边刷题,刷题网站很多就不说了。顺便多写博客做总结。
刷一刷 演算法导论或者数据结构的 演算法。要上机练习。


推荐阅读:
相关文章