查看原文
其他

在线编程挑战赛第一名:我是这么学算法的

2016-12-15 tyvj 信息学竞赛

摘要:钟润兴,北科大学生,CSDN高校俱乐部在线编程挑战赛总排行榜第一名,25题通过率100%。谈到他学算法的心得,他说自己学东西就是采用“一个强度比较大的集中的时间+一个长度稍微大的巩固练手”这样的方式。

        钟润兴,北京科技大学学生。说起要采访,钟润兴自嘲说:“我不是你所想象的那种学霸,也不是特别突出的人,唯一两次觉得特自豪的事情还是高二的时候用了二十几天背了3000多个单词,还有就是复读那年的高考分数高出前一年一百多分。”就是这个觉得自己没有什么光辉史的学生,在CSDN举办的编程挑战赛拿到总排行第一名的成绩,25题通过率为100%。


算法对大多数人来说,很无聊,钟润兴也如此,他说自己刚开始兴趣点根本不在这里,特别是大一的时候,既看不懂,又没有兴趣。这种东西不容易形成分享,你说自己做了一个算法,跟别人展示一下,别人听着也觉得枯燥。

他说,国外的小朋友一般都是从做小游戏开始的,所以一开始做有界面的程序很重要,它易于分享,做出来之后也比较有成就感,钟润兴自己对算法产生兴趣还是从做了一个下棋软件开始的。

        “你知道,毛概那种课,大家也不听,然后就用来做软件”,到五一劳动节的时候,七天有六天都在开发软件,中途为了应付考试,停了两个月,最后拿了个二等奖,不过自己已经很满足了,因为大二才真正开始学编程,大一的时候修了C语言,只拿了六十几分,感觉什么也没学到,大一就过去了,做下棋软件的Java语言还是看了传智播客毕老师的视频教学课学的,大学以前唯一做的和计算机相关的事情就是打游戏。

        因为做了下棋软件,再加上自己本来对数学感兴趣,所以从去年8月开始,参加了学校的ACM队,开始做题目,一开始大家采用的都是原始“暴力”解决方法,时间长了,学习了各种常用算法的解题方法,比如搜索、动态规划、高级数据结构等。

        并且随着研究的深入,自己也开始关注如何优化算法的时间和空间复杂度,比如以前刚刚开始对于1个程序要求1秒3秒没有什么概念,对于内存要求也不清楚,但有一些数据得用特殊的数据结构存储,这样插入数据、删除数据才能更快,比如一个经典的约瑟夫问题,如果暴力模拟时间复杂度就是O(n^2),但是用了好的数据结构,那么复杂度可以达到O(nlg(n)),当n=1000的时候,就快了100倍。

        对于训练强度,钟润兴说,自己不是保持每天做多少,而是采用“一个集中时间高强度地做一件事情+一个长度稍微大一点的巩固练手”这样的方式,按周期去练习,比如对CSDN的,自己会连续集训一个月,以后只要巩固就可以了,毕竟题目数不清做不完,但只要知道常见的解法和题型就可以了,只要了解够了,就能领略到一些相通的东西。

        当然,查看参考资料也很有必要,博客方面推荐CSDN的博客,书籍方面,《世界是数字的》这本书很不错,它抛开很多刻板理论,用很通俗的语言去介绍硬件、软件、网络、通信、编程等,虽然这本书并非专门针对算法,但对了解整个计算机世界很有帮助。另外刘汝佳的《算法竞赛入门经典》也很不错,对那些没有专门接受算法训练的学生很有帮助,在学完这本书并做了一定量题目之后,推荐《挑战程序设计竞赛》。

        一般来说,编程算法得积累上100个小时才算开始进入正轨,现在学东西就像练内功,招数不要紧,关键内力要浑厚,内力积累到一定程度了,就好出招了。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存