程序设计思维与实践Week 1 PPT总结

相关名词

OJ

       Online Judge,在线评测系统。如数据结构实验课使用的评测系统。
       它可以将用户的程序代码编译运行,将输出结果与正确答案进行比对,返回比对结论。

VJ

       Virtual Judge,虚拟评测系统,并非真实具有评测能力的系统,只是利用爬虫技术将用户的程序代码提交到各大 OJ 上,并爬取评测结果展现。


评测结果

       AC,Accepted,该程序产生了与答案输出相同或检查程序(通常称为
Special Judge)认为正确的输出。
       WA,Wrong Answer,该程序产生的输出错误。
       PE,Presentation Error,该程序产生的结果是正确的但是输出格式有误。
       TLE,Time Limit Exceeded,该程序超过限定的运行时间,程序超时。
       MLE,Memory Limit Exceeded,该程序使用的内存超限。
       RE,Runtime Error,该程序在运行期间产生了无法处理的异常。
       OLE,Output Limit Exceeded,该程序产生了过多的输出。
       CE,Compile Error,该程序代码未能成功通过编译。


OI赛制、IOI赛制,CSP赛制

       OI赛制(原CSP赛制)意指:不实时评测,无排行榜的,选手程序将在赛后进行统一评测,只以最终提交的程序的评测结果作为最终的成绩。
       IOI赛制意指:可以实时评测、看排行榜(其他人的提交与得分情况),可以进行多次提交,能够看到自己每次的评测结果,取最优的成绩作为最终成绩。
       现CSP赛制:与IOI赛制相似,但是在比赛过程中,无法看到排行榜,只能看到自己的成绩。


算法评估

通常设计一个“好”的算法应考虑达到以下目标:
       (1)正确性
       (2)可读性
       (3)健壮性(鲁棒性)
       (4)高效率与低存储量需求

       算法效率的度量是通过时间复杂度和空间复杂度来描述的。在绝大多数竞赛中都会给出时间限制和空间限制,这也是我们关注算法复杂度的重要原因之一。


时间复杂度

       在进行算法分析,语句总得执行次数 T(n) 是关于问题规模 n 的函数,进而分析 T(n) 随 n 的变化情况并确定 T(n) 数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n)),它表示随问题规模 n 的增大算法执行时间的增长率和 f(n) 的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度,其中f(n) 是问题规模 n 的某个函数。


时间复杂度求解的具体步骤

(1)找出算法中的基本语句
       算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。

(2)计算基本语句的执行次数的数量级
       只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可。可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。

(3)用大 O 记号表示算法的时间性能
       将基本语句执行次数的数量级放入大 O 记号中。大 O 中的 O 的意思就是”order of”(大约是),它是种概念,就比如 大型车、小型车和中型车,忽略具体大小尺寸,来描述汽车。


时间复杂度计算方法

(1)用常数 1 取代运行时间中的所有加法常数。
(2)在修改后的运行次数函数中,只保留最高阶项。
(3)如果最高阶存在且不是 1,则去除与这个项相乘的常数。最后,得到的最后结果就是时间复杂度。
       简单来说,就是保留求出次数的最高次幂,并且把系数去掉。


常见时间复杂度

(1)常数级复杂度:O(1)
(2)对数级复杂度:O(logN)
(3)线性级复杂度:O(N)
(4)线性对数级复杂度:O(NlogN)
(5)平方级复杂度:O(N^2)

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

时限与时间复杂度

       计算机每秒的计算量有限,只有效率更优的算法,才能解决更大的问题规模。
       不同的复杂度对应的计算量不同。
       假设机器速度是每秒 1 0 8 10^8 108 次基本运算,在计算机 1s 之内能解决的最大问题规模 n 如表所示:
在这里插入图片描述       如果我们知道一个题目的时限是 1s,数据范围是 1e6
       显然地,我们无法接受 O(n2) 及以上的算法;O(n)、O(nlogn) 是可以接受的。


空间复杂度

       一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。

       如何计算?
       例如:int a[10000000] => 4*10000000/1024/1024约等于39MB
注意:
       1.不要把 超过1M 的数组开成临时变量。
       2.使用数组尽量略微开大一些,增加容错率。(例如:int a[10010])


部分分的获取

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

程序的调试

       在调试时加入文件,可以极大的提高调试的效率。
       在评测平台提交代码时一定要去掉文件操作。
在这里插入图片描述

输入输出见 程设思维实践-第一节课问答

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值