版权归原作者所有,如有侵权,请联系我们

[科普中国]-在线评测系统

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

在线评测系统(Online Judge,OJ)是一种在编程竞赛中用来评测参赛程序的在线系统,也可以用于平时练习。近年来(2016年或更早)亦出现一些针对求职面试的在线评测系统。许多OJ网站会自发组织一些竞赛。此外,OJ网站通常会设立用户排名,以用户的提交答案通过数多少或某个题目执行时间快慢为排名依据。

定义在线系统是指针对系统用户的可提供在线服务的一种系统,或指一个在线的评测系统。通过该系统对程序代码进行编译和执行。具体过程为使用者登陆浏览器,将自己的程序代码提交,系统后台对程序进行编译和执行,之后系统使用设置好的输入和输出来比对,査看程序的正确性,其技术理论依据是软件工程中的黑盒测试。所用的浏览器没有具体的要求,如微软公司的IE、谷歌公司的Chrome(不同浏览器会有不同的限制,这需要通过浏览器内核而定),系统可以判定的程序开发语言也是多样的。

用户通过浏览器在线提交自己的程序,考虑到系统安全因素,需要对程序代码的编译执行时间、对内存的使用占有进行一定的限制。首先,系统后台在收到用户提交的程序后,对未知的程序进行编译。编译使命令可以使用CCC,其调用方法类似于调用Shell命令。编译通过的程序接下来就要进行正确性检测,测试程序正误的方法是黑盒测试,使用根据程序而设计的测试数据即测试用例来进行输入输出比对,进而得到程序的正确性1。

原理算法竞赛通常采取黑盒测试,事先准备好一些测试数据,然后用它们来评测选手的程序。在在线评测系统中,用户需要提交源代码至服务器,服务器会编译用户的源代码,然后执行源代码生成的可执行文件(或用解释方式执行,或直接执行脚本文件),得到其输出的结果,并与正确结果比较。

为防止攻击和恶意提交,服务器必须采取一定的安全措施,例如对用户提交的源代码实施过滤、将进程放入沙盒以进行隔离、对代码进行哈希以防止抄袭和重复提交等。

Virtual Judge是一种特殊的在线评测系统。与其他在线评测系统不同的是,Virtual Judge系统本身并没有任何测试数据,而是通过在其他在线评测系统中注册的机器人账号进行评测并抓取评测结果。因此可以在只有题目而没有测试数据的前提下创建竞赛。

题目状态在提交程序之后,在线评测系统会根据题目的评测情况,返回评测结果。只有返回“Accepted”状态,才表示题目通过,选手才会获得成绩。不同OJ评测结果略有出入,但常见的评测结果大致分为以下三类。

正在评测

Pending:系统繁忙,用户程序正在排队等待。

Pending Rejudge:因为数据更新或其他原因,系统将重新判你的答案.

Compiling:正在编译。

Running & Judging:正在运行并与标准数据进行比较。

程序未通过

Wrong Answer(简称WA,):答案错误。

Runtime Error(简称RE):运行时错误,程序崩溃。

Compile Error(简称CE):编译错误。

Time Limit Exceeded(简称TLE):运行超出时间限制。

Memory Limit Exceeded(简称MLE):超出内存限制。

Output Limit Exceeded(简称OLE):输出的长度超过限制。

Presentation Error(简称PE):答案正确,但是输出格式不匹配题目要求。在一些要求比较严格的比赛中,格式错也会被视为答案错误。

程序通过

在评测过程中,只有未发生以上几种错误的情况下才算做通过。

Accepted(简称AC):程序通过。另外,在整场比赛中通过了所有题目又俗称“AK”或是“破台”。

一些比赛的测试点可以给出“部分分”,例如答案正确但不够优,或者选手没有完全完成题目所给的任务等。

示例首次使用OJ系统进行计算化程序评测的是在2000年的新加坡国立大学,该学校把数据结构与算法的巧试运用在OJ系统中。但是该系统的使用率并不是很高,大多数的情况下还运学生将自己的作业使用FTP服务器以及电子邮件的方式提交给老师,然后老师去逐个检査学生的程序,利用该系统直接对学生程序进行评满还不是很普遍。

Va在线评测系统是由西班牙瓦雅多利大学开发的自动化线上程序评判系统,包含了超过4300个程序设计问题并且开放给所有人注册参与解题,有超过10万名用户。用户可以使用C(C89)、C++(C++98)、Pascal、Java、C++11或是Python撰写程序以解决题目中提出的问题,其中Java选项在2001年开放,C++11选项在2014年开放,Python选项在2016年开放。UVa同时也举办程序设计竞赛,在竞赛环境中用户必须在限制的时间之内解决一组题目。TopCoder,是一家专门组织计算机程序设计竞赛的公司。TopCoder 在线举行算法竞赛(SRMs)、组件设计竞赛和组件开发竞赛。算法竞赛在世界上与ACM、Google Code Jam并称为三大赛。

不同群体中不同OJ使用的频率也不同,学生中常会因为教师的要求使用公开/校内OJ,为此,许多公开OJ也提供了个性化服务,如Vijos中的“域”服务[7],OpenJudge、洛谷、Vjudge中的团队服务。在特定群体中亦有一些流行的在线评测系统,例如中国初中选手中流行的Vijos、进阶选手使用的BZOJ、中国大学生使用的计蒜客,hihocoder、美国求职者中流行的LeetCode等。

本词条内容贡献者为:

方正 - 副教授 - 江南大学