UVa百题总结

总算刷够《算法竞赛入门经典》100题了,就像教主所说,有了练ACM的诚意,受自身水平和眼界所限,这总结难免会有一些个人色彩和不正确的地方,大牛勿喷。另外我的文笔可能极其拙劣,将就着看吧。

按照教主的进度安排,最理想的情况是寒假学完前八章,下学期开始学动态规划、数学和图论的基础,为暑假集训打下基础。暑假开始学各方面高级的包括训练指南和ACM近几年新的算法,顺便把把第一本书查缺补漏。从第八章开始也就是第三部分,就得开始转化思路,思路开了,很多题就会觉得简单。

个人感觉这100道题刷的还是有点急,有部分题特别是中期,过分依赖题解,有些题明知可以用多种做法,或者有更好的更值得学习的算法解决,却没有研究,我觉得这是不应该的。

独立思考是一种很重要的习惯,单纯的看题解就像是背代码,虽说是站在了巨人的肩膀上,但没有形成自己的思路,比赛可能就会屡屡受挫。比较好的方法是自己做出来之后查看题解,看看有没有占用时间和内存更少的方法,拓展思路。或者是在做不出来了在看题解。

一位学长的总结是:ACM水平 = Σ思考量*难度 + 经验的累积 + 一点点天赋。

还有关于刷题是刷不动的问题,还是比较常见的,几乎每刷一章时都有这样的感觉,但是当刷到后面几章回过头来看看,当时怎么也不会做的,突然就有了思路,甚至把当时的代码稍微一修改就AC了。一个比较好的做题方法是,便往后啃比较难理解需要很多思考的算法,边回过头来做之前没有做出来的题,这样来来回回几次,既能复习了之前的内容,也能给自己一些时间理解后面的算法。

另外这两天一直在搞统计和分析集训队成员题数的项目,算是上大学第一个正儿八经的项目吧。经历了十几次修修补补,6个版本,终于完成了能够正确统计和算分基本功能的程序。这个项目对我的帮助还是蛮大的,首先就是学会了多文件模块化的编程,用第一次在codeblocks中一个Project用了1个头文件+8个源文件,会用了条件编译和外部变量声明。还有就是项目之前的基本思维决定了你的程序的档次,练ACM也有一段时间了,该把学过的数据结构拿出来用在工程上就得用才行。比如说这个项目中用数据结构中的树就要比数组好得多,功能强大适应性也更强。

经过第一个大版本的完成,发现自己不细心的毛病是比较严重的,每次交上去都有好几个bug。另外程序的接口化做的不够好,每次新增个功能,或者是修改个需求,感觉需要改很多很多地方。还有一点,交付上级软件不是让上级给你测试软件的,这点务必要注意到(刚开始有几个版本,交上去竟然打不开程序!)。

其实做项目就是这样,自己做永远是自己的思路,禁锢在那里,自己凑出来了跟别人搭不起来完全没用。最好是团队一起做,各有分工,又有合作,工程化管理,然后有老师指导,才会有效果,才能学到书本上学不到的东西。特别是软件工程这一行。做项目也不容易,虽然赚钱,也不比ACM简单。

接下来的20多天,按照老师的计划,是完成紫书前八章的内容,这个任务估计是完不成了,尽量往后做吧,还想学学Python呢,两者一块来,顺便在linux下操作下,感觉任务好多啊,有点贪多。慢慢来吧,还有很长的路要走。

哎,从小语文不及格,我感觉我写篇文章比写个程序费事多了,哈哈。

3 条评论

欢迎留言