正文

测试程序效率的方法2008-08-30 15:00:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/vfdff/37967.html

分享到:

http://1001night.blogbus.com/logs/17125497.html 光看书似乎不解决问题,难道要做题 当然要做题,而且做题也要循序渐进。 首先是教材正文中的示例,然后是书后的练习题。 第二步可以做国家等级考试二级三级的C语言题。在线上可以找到,大量二级题库。三级题推荐南开的三级100题。此外VCgood群的共享文件中也有一些这一难度的题目。 正如前面讲过,当第二步的题目都做完后,语法已经不是问题,应该开始学习数据结构和算法。这个方面的练习题可以去各大OJ。OJ是什么,请看下一节。 OJ是什么 OJ是OnlineJudge的缩写。OnlineJudge是一种在线裁判系统。她可以对程序原代码进行编译和执行,并通过预先设计的测试数据来检验程序原代码的正确性。 首先,他是一个在线的题库,有很多习题,你可以任选其中之一来解答。然后,系统的编译器能够编译执行你所提交的代码。如果编译通过,针对每个题目,系统将使用自带的多组测试数据检验你的程序,如果程序都能得到正确的输出,那么你顺利地解决了这个问题。最后,系统还能对所有参与答题的用户进行统计和排名。 OJ的题目大部分是关于算法的。题目的输入输出通常是命令行方式,而非图形界面。也就是说,要关注的不是平台的兼容性、文件的格式抑或窗口的布置这种无关紧要的细节,而是问题本身的逻辑实现。一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态,通过、错误、超时、溢出或是无法编译。 Online Judge系统来自ACM和IOI大赛。由美国计算机协会(ACM Association for Computing Machinery)发起和组织的ACM国际大学生程序设计竞赛(简称ACM/ICPC)是目前世界上规模最大的计算机学科赛事。IOI则是国际信息学奥林匹克竞赛,和数学奥林匹克竞赛一样著名。Online Judge系统是IOI或ACM的训练题库,同时也是ACM和IOI的评分系统。 哪里有可用的OJ 以下几个OJ都很不错,请随意进入。也可以自行搜索,国内很多学校的OJ正在热火朝天的建设中,有的甚至直接作为了考试用系统。 Vijos http://www.vijos.cn/    内容丰富、分类清晰明了的中文在线评测题库。题量适中(目前大约400题左右),难度面向初学者和中学生,尤为重要的是,界面和题目都是中文的。 USACO http://ace.delos.com/usacogate/ 全美计算机奥林匹克竞赛(USACO)的训练网站,特点是做完一关才能继续往下做,与通常的OJ不同的是测试数据可以看到,并且做对后可以看标准解答(包括分析),所以如果大家刚开始的时候在上面那些OJ上总WA却找不到原因的话,可以试着来这里做做,看看测试数据一般是从什么地方阴你的。此外,虽然都是英文题目,但在国内有人做了翻译,有全部题目的中文译本,搜索即可。 这两个强烈推荐新手前往。 浙江大学的Online Judge http://acm.zju.edu.cn/ 国内最早也是最有名气的OJ,有很多高手在上面做题。特点是数据比较刁钻,经常会有你想不到的边界数据,很能考验思维的全面性。 北京大学的Online Judge http://acm.pku.edu.cn/ 建立较ZOJ晚一些,但题目加得很快,现在题数和ZOJ不相上下,特点是举行在线比赛比较多,有报告称数据比ZOJ上的要弱,有时候同样的题同样的程序,在ZOJ上WA(wrong answer),在POJ上就能AC(accomplished) 这两个可以说是国内顶级水平了。 西班牙的Universidad de Valladolid http://acm.uva.es/ 世界上最大最有名的OJ,题目巨多而且巨杂,数据也很刁钻,全世界的顶尖高手都在上面。据说如果你能在UVA上AC一千道题以上,就尽管向IBM、微软什么的发简历吧,绝对不会让你失望的。 俄罗斯乌拉尔大学 http://acm.timus.ru/ 也是一个老牌的OJ,题目不多,但题题经典。 有实力的朋友,尽量去国外的OJ为国争光吧。那上面中国大陆选手的排名可不怎么靠前哦。   另外几个可以尝试,但不保证服务器总是开机的站 myOJ http://myoj.kuye.cn/ 建站人员自称是专为中学生OI选手训练使用,由中学生和中学教师共同开发的,也是给中学生和中学教师使用的。优点是题目难度较低,而且题目都是中文版易于阅读。 浙江大学宁波理工学院 http://acm.nit.net.cn/ 也是适合新手的OJ,题目难度由低到高不等。中文题不少。 同济大学的OJ http://acm.tongji.edu.cn/ 大部分是中文题。 南开大学的OJ http://acm.nankai.edu.cn 界面友好,部分中文题 天津大学的OJ http://oi.tju.edu.cn/ 界面题目皆中文 杭州电子科技大的 http://acm.hdu.edu.cn/ 武汉大学的 http://acm.whu.edu.cn/noah/ 这几所大学的题目难度相近,甚至有好多是相互借用的,难度等级要比北大和浙大的低一些。 一个人孤单做题的滋味是很郁闷的,尤其是当你确实绞尽脑汁也搞不定的时候。幸好线上还是有很多同样在做题的朋友,他们通常会在论坛BBS之类的地方集中讨论解题心得,甚至有可用的答案。建议用OI (Olyimpiad in Informatives 信息学奥林匹克)为关键字搜索。请不要用答案代码直接提交哦。 哪里有代码示例可看 这个可以自己google或baidu。 如果你已经能够做一些OJ的题了,那么可以考虑看一些开源软件的代码。http://sourceforge.net/ 是全球最大的开源软件集中地,确定一个应用主题上去找就会有收获。不过说实话,从OJ到项目是很大的跨越,所以要找到适合自己的项目来看是不容易的。个人的建议是,找一些知名的又比较小规模的项目,然后找他的早期版本的代码,会比较清晰,比如 vim1.0/2.0 lua1.0 apache1.0这种。 测试一个函数的速度,常用 rdtsc 指令,它可以获得当前CPU时钟的周期数 void GetCylc( unsigned int *lowPart, unsigned int *highPart ) { __asm { cpuid // 强制CPU开始新的周期 mov ecx, lowPart; mov ebx, highPart; rdtsc mov [ecx], eax; mov [ebx], edx; } }

阅读(3536) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册