ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【算法笔记】学习算法帮助内容

2020-12-05 11:04:37  阅读:595  来源: 互联网

标签:帮助 题目 评测 代码 http C++ 算法 笔记 PAT


文章目录

一、 如何选择编程语言和编辑器

一般来说,可供选择的语言有C、C++、Java等,但是Java的执行比较慢,因此较常使用的是C或者C++。考虑到C++的语法向下兼容C,并且C的输入输出语句比C++的要快很多,因此我们可以在主体上使用C语言的语法;而C++中有一些特性和功能非常好用(例如变量可以随时定义、拥有标准模板库STL等),因此在一定程度上我们可以混用部分C++的语法(事实上,由于C++向下兼容C,因此一般都是在C++中写C语言的语法。
编译器的选择则因人而异、因现场环境而异。不同的考试可能提供不同的编译器,要根据具体情况来选择。但一般来说,可能出现的编译器有VC6.0、VS系列、Dev-C++、C-Free,Code::Blocks、Eclipse等,其中 VC6.0因为标准过于古老,很多语法在其中没办法通过编译,所以尽量不要使用;Dev-C++、C-Free、Code:.Blocks则是轻便好用的编译器,推荐使用,可以根据具体情况来选择;VS系列是较为厚重的编译器,在没有其他轻便编译器可供选择的情况下使用;Eclipse则更常用于Java代码的编写。

二、 在线评测系统

在各类考试中,判断程序写得对不对,一般需要借助在线评测系统(Online Judge,OJ)。一般来说,在OJ上可以看到题目的题目描述、输入格式、输出格式、样例输入及样例输出。我们需要根据题目来写出相应的代码,然后提交给OJ进行评测。OJ的后台会让程序运行很多组数据,并根据程序输出结果的正确与否返回不同的结果。
注意: 即便代码能通过样例,也不能说明是完全正确的,因为后台会有很多组数据,样例只是一个示范而已。

(1) PAT

PAT的全称为Programming Ability Test,是考察计算机程序设计能力的一个考试,目前分为乙级(Basic)、甲级(Advanced)和顶级(Top)三个难度层次(需要选择其中一个报名),难度依次递增,其中顶级将涉及大量ACM-ICPC 竞赛的考点,报考的人数也相对较少。本书能够覆盖乙级和甲级的考试知识点,并且书中有很多例题都来自PAT甲、乙级的真题。
为便于区别,本书中来自乙级的题目将以B开头,例如 B1003表示乙级的题号为 1003的题目。PAT乙级真题题库地址如下:
http://www.patest.cn/contests/pat-b-practise (已经找不见)
同样的,本书中来自甲级的题目将以A开头,例如A1066表示甲级的题号为1066的题目。PAT甲级真题题库地址如下:
http://www.patest.cn/contests/pat-a-practise (已经找不见)

PAT真题练习系统: https://www.patest.cn/practice

对于来自PAT 甲、乙级的题目,只需要在网站上面注册一个账号即可提交,例如对B1001来说,在阅读完题目并写出相应的代码后,只需要单击最下方的“提交代码”,接着选择代码对应的语言(例如C或者C++代码的提交都可以选择“C++(g++4.7.2)”这一项),然后把代码粘贴在编辑框内,单击“提交代码”即可,稍等片刻刷新页面即可得到程序评测的结果。
注意: PAT的评测方式为“单点测试”,即代码只需要能够处理一组数据的输入即可,后台会多次运行代码来测试不同的数据,然后对每组数据都返回相应的结果。

(2) codeup

codeup是一个有着很多题目的题库,当然它也是一个在线评测系统,本书的部分例题和练习题将来自于codeup,其地址如下:
http://www.codeup.cn/(这个已经不能用了)
找见新地址: http://codeup.cn/
在注册一个账号之后,单击最上面一栏中的“题目集”即可进入题库,之后可以根据题目标题的关键字或者题号本身来搜索题目。当然,它对题目进行了归类,读者也可以直接从分类中选择自己想要训练的算法类型。
对codeup 的题目而言,页面中同样有着题目描述、输入格式、输出格式、样例输入和样例输出。一旦写好了代码,只需要单击最下方的“提交”,然后选择代码对应的语言(例如C和C++只需要一律选择C++即可),接着在编辑框内粘贴代码,单击“提交”,过几秒后刷新页面即可得到程序评测的结果。注意: codeup 的评测方式为“多点测试”,即代码需要能够处理所有数据的输入,也就是说,后台只会运行代码一次来测试不同的数据,只有当所有数据都输出正确的结果时才会让程序通过,只要有一组数据错误,就会返回对应的错误类型。

除了PAT和 codeup之外,还有很多优秀的在线评测系统,但是大多数都是侧重于竞赛的,因此如果不是算法竞赛的话,一般不需要去它们上面做题。
下面是几个较知名OJ的地址:
POJ: http://poj.org/
HDOJ: http://acm.hdu.edu.cn/
ZOJ:http://acm.zju.edu.cn/
CodeForces: http://codeforces.com/
UVa: uva (暂时不可用)
ACdream: http://acdream.infol(访问失败)
leetcode:https://leetcode-cn.com/ (力扣)

三、常见的评测结果

(1)答案正确(Accepted,AC)

恭喜你!所提交的代码通过了数据!这个评测结果应该是大家最喜欢见到的,也非常好理解。如果是单点测试,那么每通过一组数据,就会返回一个Accepted;如果是多点测试,那么只有当通过了所有数据时,才会返回Accepted。

(2)编译错误(Compile Error,CE)

很显然,如果代码没有办法通过编译,那么就会返回Compile Error。这时要先注意是不是选错了语言,然后再看本地的编译器能不能编译通过刚刚提交的代码,修改之后再次提交即可。

(3)答案错误(Wrong Answer,WA)

“答案错误”是比较令人懊恼的结果,因为这说明代码有漏洞或者算法根本就是错误的,只是恰好能过样例而已。不过有时可能是因为输出了一些调试信息导致的,那就删掉多余的输出内容再输出。当然,大部分情况下都需要认真检查代码的逻辑有没有问题。

(4)运行超时(Time Limit Exceeded,TLE)

由于每道题都会规定程序运行时间的上限,因此当超过这个限制时就会返回TLE。一般来说,这一结果可能是由算法的时间复杂度过大而导致的,当然也可能是某组数据使得代码
中某处地方死循环了。因此,要仔细思考最坏时间复杂度是多少,或者检查代码中是否可能出现特殊数据死循环的情况。

(5)运行错误(Runtime Error,RE)

这一结果的可能性非常多,常见的有段错误(直接的原因是非法访问了内存,例如数组越界、指针乱指)、浮点错误(例如除数为0、模数为О)、递归爆栈(一般由递归时层数过深导致的)等。一般来说,需要先检查数组大小是否比题目的数据范围大,然后再去检查可不可能有特殊数据可以使除数或模数为0,有递归的情况则检查是否在大数据时递归层数太深。

(6)内存超限(Memory Limit Exceeded,MLE)

每道题目都会有规定程序使用的空间上限,因此如果程序中使用太多的空间,则会返回MLE,例如数组太大一般最容易导致这个结果。

(7)格式错误(Presentation Error,PE)

这应该是最接近Accepted的错误了,基本是由多输出了空格或者换行导致的,稍作修改即可。

(8)输出超限(Output Limit Exceeded,OLE)

如果程序输出了过量的内容(一般是指过量非常多),那么就会返回OLE。一般是由输出了大量的调试信息或者特殊数据导致的死循环输出导致的。

四、 如何高效地做题

一般来说,按照算法专题进行集中性的题目训练是算法学习的较好方法,因为这可以一次性地对某个算法有一个较为深入且细致的训练,而随意乱做或是按题号从小到大地“刷”题目并不是一个很好的选择,也无法形成完整的知识体系。

如果在做一道题时暂时没有想法,那么可以先放着,跳过去做其他题目,过一段时间再回来重新做,或许就柳暗花明了(例如你可以设置一个未解决题目的队列,每次有题目暂时不会做时就扔到队列里,然后隔三差五取出里面的题目再想一下,想不出来就再扔到队列里……)。当然,如果题目本身较难,做了很久也没有想法,也可以查看题解,知道做法之后再自己独立完成代码过程。

另外,在做题时也可以适当总结相似题目的解题方法,这也是进行专题训练时可以顺带完成的事,可起到事半功倍的效果。在这里插入图片描述

标签:帮助,题目,评测,代码,http,C++,算法,笔记,PAT
来源: https://blog.csdn.net/Black_Customer/article/details/110677989

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有