IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法竞赛:Online Judge介绍 -> 正文阅读

[数据结构与算法]算法竞赛:Online Judge介绍

专栏:算法竞赛

上一篇:

下一篇:

一、什么是Online Judge

Online Judge指的是在线评测系统,简称 OJ,是一种用来测试算法程序正确性的在线系统。

??Online Judge 多用在编程竞赛和编程练习中,用户可以通过提交自己的代码,让系统帮助测试程序是否能根据输入输出正确的结果,从而达到检验程序的正确性、空间和时间消耗程度的目的。

??OJ系统能够编译并执行代码,使用预设的数据对这些程序进行测试。提交的代码一般会在受限的环境下运行,包括时间限制、内存限制、安全限制等。代码的输出会被OJ系统捕获,与标准答案进行比较后返回结果。

二、Online Judge 网站

??OJ 网站 除了有在线评测功能外,还会有大量的题库,给用户进行编程练习。大多数OJ网站还会对统计用户的得分,对用户进行排名。

在这里插入图片描述

??一些比较友好的OJ网站还会搭建代码编辑器,提供自测功能,以及设立算法编程社区来方便用户对问题交流讨论等等,这种OJ网站提供的算法编程环境就更适合新手的成长。

在这里插入图片描述

??目前的OJ网站一般分为两类,一种是偏向于算法竞赛的,收录各种编程竞赛的题目,而另一种是偏向于求职面试,收录各公司的编程笔试题目,如LeetCode,牛客网等。

??OJ是个人进行算法编程训练必不可少的工具,很多高校都有自己的OJ网站,如北京大学的 POJ,浙江大学的 ZOJ 等,高校创建的OJ以竞赛学习为主,所以题目会具有一定的深度,并且收录有不少经典题目,算法学习到已经程序后,可以到这些高校创建的网站刷刷题。当然,因为是学校创建的网站,并非是属于商业用途,所以网站体验不是很好,崩溃是常事,网站UI和代码编辑体验也做得不是很好。

??下面推荐几个体验较好、比较适合入门学习的算法竞赛编程网站。当入门到一定程序后,也可以网上自行搜索其它人推荐的适合自己的编程网站。

1. 洛谷

https://www.luogu.com.cn/

??洛谷网从 2013年开始运营,为广大算法竞赛选手、程序设计爱好者以及院校企业机构提供算法题库、社区、训练工具、在线教育为一体的解决方案。
??洛谷偏于算法竞赛,编程环境和社区维护得较好,较为适合新手入门学习。

在这里插入图片描述

2. LeetCode 力扣

LeetCode
力扣(LeetCode中文网站)

??LeetCode是著名的算法编程网站,内容偏向于求职面试。从主页的内容就可以看出富含招聘的气息。LeetCode刷题也是提升求职成功率有效方式之一。
??LeetCode中有许多分类好的编程面试题目清单,题库中也有上千道题目。
在这里插入图片描述
在这里插入图片描述

3. 牛客

牛客

??牛客是编程学习和求职面试网站,里面有着众多招聘信息和校招社招交流圈,面试题目众多。题库不仅包含算法题目,还有些编程基础题目,面试问题等。代码编辑环境也做得挺好。
在这里插入图片描述
在这里插入图片描述

4. PTA 拼题A

https://pintia.cn/

??拼题A”(https://pintia.cn) 是浙江大学国家级程序设计系列课程教学团队与网易公司、杭州百腾教育科技有限公司合作,于2015年9月推出面向高校和社会的程序自动评测、开放式的教学辅助平台。 系统创建之初,全称为“程序设计类教学辅助教学平台”(Programming Teaching Assistant,亦简称 PTA)。
??作为教学辅助平台,上面可以进行作业、测验、考试、竞赛等教学活动。
在这里插入图片描述

三、算法竞赛题目

这里以洛谷入门第一题 A+B Problem 为例
题目原地址 https://www.luogu.com.cn/problem/P1001

??各个OJ网站首先会出一道非常简单的题目来给用户进行测试,熟悉一下界面的操作流程,比如 要求输出Hello World,要求输出两个数的和等。
??题目还会分难度、分题型等,用户可以根据自身情况选择去做。

1. 题目描述

??题目描述负责说明题目和要求,并且说明数据的范围以及输出要求
在这里插入图片描述

2. 输入输出样例

??这里会说明输入输出的格式,以及给出一个或多个输入输出的样例,方面用户进行理解以及进行自我验证。这里需要注意,通过了样例的输入并不意味着程序就是正确的,在样例中给出的输入往往是最普通的值,而在实际评测时,会测试多个输入来检验程序,输入的数据十分刁钻,包含各种分类值,边界值。
在这里插入图片描述

3. 程序限制

??计算机资源并非无限,所以需要算法所使用的内存限制在一定范围内,运行时间不能超出时间限制,毕竟如果超出了时间限制,那可能是算法复杂度较高,不是一个较好的算法。
??不同的题目和不同的OJ网站,所做出的限制并不是完全一样的。

  • 时间限制可能会根据题目所使用的算法本身复杂度和编程语言进行调整,通常是1秒或2秒。
  • 各网站设置的内存限制大多是32MB,64MB和128MB左右。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 评测状态

??提交代码后,系统会对代码进行编译,如果编译通过,那么会将各个测试点的数据作为输入,程序运行后读取数据并进行输出。系统会对程序的输出和正确答案进行比较,对输出结果进行判定。一个题目有多个测试点,会将程序运行数次。
??程序运行过程中也有可能会因为各种各样的问题而导致程序异常终止,系统会对这些问题进行判定。

状态全称含义可能的原因
AC Accepted程序通过成功解答,没有出现问题
PE Presentation Error格式错误距离成功最近的一种,仅仅是输出答案的排版不正确,没有换行、插入了多余的空格等。
CE Compile Error编译错误代码没有通过编译,可能是语法问题、链接错误、找不到头文件等。
WA Wrong Answer答案错误答案与给定的不符,可能是计算错误、算法错误等输出了错误内容,或者有多余输出。
RE Runtime Error运行时错误运行过程中出现的一些导致程序异常终止的问题,如段错误、除0异常、栈溢出等,属于程序本身的问题。
TLE Time Limit Exceeded超出时间限制运行时间超出了题目规定的时间上限,可能是程序死循环或者算法复杂度过高。
MLE Memory Limit Exceeded超出内存限制使用的内存超出了题目规定的上限,可能是空间复杂度过高。
OLE Output Limit Exceeded输出超过限制答案输出过长,可能是出现了死循环,或者循环次数过多等问题。
UKE Unknown Error未知错误系统因其它原因造成的错误。

在这里插入图片描述

5. 评测环境

洛谷评测机语言环境说明

??编程不可忽略的一个就是语言环境。编程语言随时代发展,会不断进行修改,添加新的语法和特性、标准库新功能,弃用旧功能等。
??在这个过程中,编程语言会设立一个个语言标准,以促进语言标准化,规范编译器和解释器的行为。新标准中的新语法,在旧版本的编译器(或解释器)中将无法被识别,而新标准大多兼容旧标准中的语法,旧标准中的语法在新标准中仍适用,也有少部分函数或功能被弃用。有时也会出现新语法标准不兼容旧标准的情况,造成断层,如Python3.0Python2.7,这种情况下如果想使用新版本,就需要将旧项目中的代码进行升级。

算法竞赛常用编程语言
标准(版本)
详细
CC90, C99, C11, C17 等多个标准,以及即将到来的 C2x 标准??目前大学课程大多仍使用 C90 标准,工业则部分推进到了 C99C11
C++C++98, C++11, C++14, C++17, C++20 等多个标准,以及即将到来的 C++23??目前大学课程大多仍使用 C90 标准,部分使用 C++11, C++14C++17。工业则部分推进到C++11C++14,有些仍使用C++98
Java发布了Java 1.0~Java 1.9, Java 10 ~ Java 16版本(从 Java1.10 开始,称为 Java10,后续为了命名规范,又将 Java 1.5 至 Java 1.9 改为 Java 5 ~ Java 9)大学课程大多使用 Java 1.4 ~ Java 1.8 版本,工业界则大多使用 Java 8 版本
Python主要分割为 Python2.xPython3.x 两种版本,Python3.x不兼容Python2.xPython3.x 目前已发布至 Python3.10 版本??已经推进到Python3.xPython2.x 存在于小部分旧项目 和 课程中。

5.1 语言标准 及 编译器(解释器)版本

??不仅是不同的编译器(解释器)版本所使用的语法标准不同,而且对于同一个语言标准,不同的编译器开发商对于标准的支持度也并不一样,甚至实现还有可能不同,并且还有各自的扩展语法,所以实际使用时还需了解所使用的编译器。

??下面是洛谷所列出的评测机语言环境:
在这里插入图片描述

5.2 优化选项

??C++还会有个 开启O2 优化 的选项,-O2指的是编译器的优化级别(Optimization level),还会有-O1, -O2, -O3, -Os, -Ofast等。
??编译器的优化选项默认是-O0,即只进行必要的优化而不做其它的优化处理,一般是作为调试使用。
??开启-O2优化后,编译器会花费更多的时间来编译,以提高代码性能,甚至部分代码的计算结果在编译器就已经计算出来。开启优化会使得运行时间大大减少,开启和不开启的运行时间有时会有数倍的差距,通常在算法竞赛中是禁用优化的。
??虽然优化可能会大幅减少运行时间,但有时不一定是好事,因为有些代码使用了 未定义行为(undefined behavior),或者其它情况导致的编译器对此做出的条件假设可能不符合写代码的人的初衷,优化后可能会造成结果错误。

??程序作为软件产品发布时,则必须开启优化,不能以Debug模式来编译发布,因为Debug模式为了方便调试,不做优化,并且编译结果会包含调试信息。与Release模式编译出来的执行文件相比,速度可能会慢几十倍。

在这里插入图片描述


专栏:算法竞赛

上一篇:

下一篇:

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:04:59  更:2022-04-28 12:06:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:38:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码