对信息学竞赛中调试方法的建议
来源:互联网 发布:mac怎么下载bilibili 编辑:程序博客网 时间:2024/06/05 20:30
信息学之于其他竞赛学科的不同,就在于需要通过写程序来表达自己的思维和想法。如何尽可能又快又好地调试程序,成了我们必须要思考的问题。相信很多同学都有过这样的经历:思考一个算法只花了半个小时,但是把这个算法写对却花了一天。。思考与实现的时间往往不成正比。
下面是我结合自己的经验给出的一些小建议,仅供大家参考,如果有不太好的地方,也欢迎指正~
关于调试有一个大前提,就是思考的方向一定得严谨正确,因为思考决定实现,如果思考的时候有漏洞,那么实现的程序肯定也不强健。在想出算法之后不要急着实现,一定要认真反复地论证:我的算法每一步的定义是否严谨,是不是哪里还有漏洞,我的算法所得到的东西是否就是题目需要求解的。确认了自己的想法后再开始实现。
假设我们现在写完了一个程序:
第一步:静态查错(俗称裸眼观察^_^),即不测试数据,而是通过反复地看代码来检查。静态查错首先要检查是否有变量名打错,语法是否正确,你打的代码和你的想法是否相符。然后要分析代码的逻辑性是否严谨正确,是否能在所有情况下都能正确运行。最后还要验证是否在所有边界情况都能得到正确的解,包括数组是否开够,会不会有n=0的情况等等。静态查错是最有效的查错方法,为什么有的大牛能够一遍写对很复杂的代码,因为他们静态查错的能力非常之强,并且在敲程序的过程中就已经在静态查错了。在实践中,我建议大家尽量让自己的程序模块化(即一个函数做一件事情),然后检查的时候边看边打上注释,这样能让自己更清醒地判断,也方便以后能轻松阅读自己的程序。
第二步:动态查错,用数据来验证代码的正确性。人眼往往不可靠,我们需要用更安全的数据来判定。一般而言在普通的OI竞赛中,时间是比较充裕的,我们有时间来对拍。对拍需要三个程序,一个是你需要提交的标准程序(std),一个是能够通过部分数据的暴力程序(plain),一个是用来生成数据的程序(mk_data)。
对拍的优势在于能够近似模拟出出题人的数据来检验你的程序,一般在考场上通过了对拍的程序很难写挂。当然有的时候随机数据不一定能够满足我们的需求,这时候需要我们从出题人的角度出发,去构造一些最坏情况下的数据,来检验我们程序的强健性。
第三步:提交之前,检查文件名,再次编译程序,运行一遍样例,以防手抽。
静态差错大大降低了程序出错的概率,减少了动态调试的时间,动态查错给程序上了双保险,最后的检查防止了意外情况的出现。这样的程序的正确性能够大大提高。
在调试中,最关键的一点,是站在逻辑的高度去思考程序,而不是从某个数据的角度去查看变量,这样才能避免陷于调试的泥潭不能自拔。
转自:
http://hi.baidu.com/pty123/item/410fec03607fb8e0f55ba631
- 【转】对信息学竞赛中调试方法的建议
- 【转】对信息学竞赛中调试方法的建议
- 对信息学竞赛中调试方法的建议
- 对信息学竞赛中调试方法的建议
- 对信息学竞赛中调试方法的建议
- 对信息学竞赛中调试方法的建议
- 浅谈信息学竞赛中逆序对问题的求法
- 信息学竞赛刷题建议历程
- 信息学竞赛刷题建议历程
- 信息学竞赛中的思维方法
- 信息学竞赛中可能有用的概率学知识
- 信息学竞赛中可能有用的概率学知识
- 信息学竞赛中搜索问题的常见优化技巧
- 信息学竞赛
- 信息学竞赛的相关资料网址收藏
- 信息学奥林匹克竞赛-校门外的树
- 信息学奥林匹克竞赛-小鱼的数字游戏
- 信息学奥林匹克竞赛-不高兴的津津
- Netscaler 之Netscaler Gateway
- spring MVC原理
- Python数字图像处理
- 基于shell自动完成mysql格式审计的项目
- 明明可以靠脸吃饭偏要靠才华_你身边有女神程序员吗?
- 对信息学竞赛中调试方法的建议
- 导入项目时出现Failed to find Build Tools revision 25.0.3
- CodeReview
- Spark 任务运行原理
- Deep Learning(深度学习)学习笔记整理系列之(三)
- opentsdb在HBase中表结构设计
- Java Socket编程
- php变量赋值给js
- 【Unity Shader】一个简单的顶点/片元着色器