- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
论细节优化的一些方法
论细节优化的一些方法
广东北江实验学校 卢彦丞 指导老师 黄叶亭
【目录】
内容摘要
关键词
正文
多用位运算
使用合适的类型
数组下标上的优化
判重处理采用Hash表
能不用循环就不用循环
减少重复运算
把小循环放在外面
循环合并
与循环无关的条件应直接放在循环外
减少条件判断
另:标记时如何节省空间?
总结
内容摘要
本文主要讲的是细节优化节省时间的一些方法,也讲了标记数组节省空间的办法。
关键词:细节优化 代码优化
正文
一个程序超时怎么办?如何优化?有两种方法:“从大处着手”和“从小处着手”。“从大处着手”比较难,“从小处着手”却是人人都可以做到的。这里就主要谈谈“从小处着手”的方法,即细节优化的方法。
有一句谚语说:“细节决定成败。”为什么有时采用同样的算法,分数却相差这么远?这是细节优化到不到位的问题。细节优化也不容忽视。细节优化的方法有很多种,这里就列举几种关于节省时间的方法吧。
WAY 1 多用位运算,少用浮点运算。
如:n div 2 可以改为 n shl 1,如果你用trunc(n/2),那你就太不会节省时间了。一般乘以2的n次幂的式子可以改为左移,如:
n*4 可以改为 n shl 2
x*16 可以改为 x shl 4
a*4096 可以改为 a shl 12
一般乘除法比加减法、位运算慢好几十倍。所以一个数乘以一个常量,可以用左移、加法组合代替。如以下的代码A可以改成代码B,代码C可以改成代码D,将会减少运行时间。
代码A:
n:=0;
while not eoln do
begin
read(c);
x:=ord(c)-48;
n:=n*10+x;
end;
代码B:
n:=0;
while not eoln do
begin
read(c);
x:=ord(c)-48;
n:=n shl 3+n shl 1+x;//10=2^3+2^1
end;
代码C:
p:=0;
while not eoln do
begin
read(x);
p:=p*1000+x;
end;
代码D:
p:=0;
while not eoln do
begin
read(x);
p:=p shl 10-p shl 4-p shl 3+x;//1000=2^10-2^4-2^3
end;
虽然繁琐了一点,但这也不失为一种尽量避免超时的好方法。
WAY 2 使用合适的类型
对于基于32位系统的Free Pascal,整型存取的速度从快到慢依次是longint/dword(32位)(二进制位,下同),integer/word(16位),shortint/byte(8位),int64/qword(64位)。而对于基于16位系统的Turbo Pascal和Borland Pascal,整型存取速度从快到慢依次是integer/word(16位),shortint/byte(8位),longint(32位),comp(64位)。时下竞赛常用的编译程序是Free Pascal,所以我建议大家多用longint和dword,少用其他整型。[空间需求量很紧可以考虑用integer/word,还不行再考虑shortint/byte,运算十几位(十进制位)的数可以考虑用int64/qword,能不用高精度就不用高精度]而对于浮点数的四种类型,建议大家看情况而用,这里列出来作比较:
序号 类型 占用空间 优点 缺点 1 single 4字节=32位 加减运算快 精度低 占用空间少 2 real 6字节=48位 乘除运算快 加减运算不如double快 占用空间较少 3 double 8字节=64位 加减运算快 乘除运算慢 精度高 占用空间较多 4 extended 10字节=80位 精度非常高 运算慢 占用空间多
WAY 3 对于数组结构,如果空间允许的话,将其下标改为0至2n-1。
如:
var a:array[1..10000]of longint;
可以改为:
var a:array[0..16383]of longint;
有人说下标改为1至2n,我认为这样不是最0~2n-1、2n~2·2n-1、2·2n~3·2n-1、……的方式寻址,而下标改为1至2n寻址时还得减1,何苦呢?而对于下标原本是1至2n的数组,如:
var b:array[1..1024]of longint;
应该改为下标从0开始:
var b:array[0..1023]of longint;
WAY 4 对于判重处理,如果空间允许,采用Hash表来标记。
即hash[value]=0代表value代表的结点未出现过,可以出现;hash[
您可能关注的文档
- 003桩基安全交底.doc
- 公开课作业纸.doc
- 2010-2011年女生部活动策划.doc
- 09-10优秀团支部申请材料.doc
- 2013安徽高考考试说明英语新增词汇(最新最经典).doc
- 换种思路采摘幸福.doc
- 台背回填台账.doc
- 静电培训教材--2.ppt
- 2008微积分1期中试卷.doc
- 腕中风情时装表.doc
- 《CY_T 39-2006图书流通信息交换规则》最新解读.docx
- 《DB_T 18.1-2006地震台站建设规范 地电观测台站 第1部分:地电阻率台站》最新解读.docx
- 《DB_T 20.2-2006地震台站建设规范 地下流体台站 第2部分:气氡和气汞台站》最新解读.docx
- 《DL_T 413 - 2006额定电压35kV(Um = 40.5Kv)及以下电力电缆热缩式附件技术条件》最新解读.docx
- 《DL_T 417-2006电力设备局部放电现场测量导则》最新解读.docx
- 《DL_T 436 - 2005高压直流架空送电线路技术导则》最新解读.docx
- 《DL_T 502.2 - 2006火力发电厂水汽分析方法 第2部分:水汽样品的采集》最新解读.docx
- 《DL_T 502.3 - 2006火力发电厂水汽分析方法 第3部分:全硅的测定(氢氟酸转化分光光度法)》最新解读.docx
- 《DL_T 502.4-2006火力发电厂水汽分析方法 第4部分:氯化物的测定(电极法)》最新解读.docx
- 《DL_T 502.7 - 2006火力发电厂水汽分析方法 第7部分:游离二氧化碳的测定(直接法)》最新解读.docx
最近下载
- 铁路通信工(技师)技能鉴定理论考试题及答案.doc VIP
- 党建与银行业务综合知识试卷真题及答案.docx VIP
- 2025年女性健康食品饮料趋势报告.pdf VIP
- 智能化工程售后服务方案.docx VIP
- 中国行业标准 YC/T 590-2021卷烟工业企业设备综合效率测评导则.pdf
- 铁路通信工(初级)技能鉴定理论考试题及答案.doc VIP
- (高清版)B-T 18380.12-2022 电缆和光缆在火焰条件下的燃烧试验 第12部分:单根绝缘电线电缆火焰垂直蔓延试验 1kW预混合型火焰试验方法.pdf VIP
- 化妆品包材行业基础知识.pdf VIP
- 校园文化建设服务承诺及质量保障措施.doc VIP
- 化验工题库.doc VIP
文档评论(0)