如何知道pascal程序的运行时间
我参照的是http://zhidao.baidu.com/question/38349705.html的方法但是输入同一个数据两次的运行时间不一样?而且好像时间也没那么久...
我参照的是http://zhidao.baidu.com/question/38349705.html 的方法 但是输入同一个数据 两次的运行时间不一样?而且 好像时间也没那么久(3s+)? 我感觉一输进去结果就出来了
求高手测试下 是我操作有误还是这个方法不行?
附测试用的一个小程序
program friend;
uses sysutils;
var t:double;
n,i,j,c:longint;
p:boolean;
begin
t:=now;
read(n);
for i:=1 to n do
begin
p:=false;
for j:=2 to trunc(sqrt(i)) do
begin
if i mod j=0 then
begin
p:=true;
break;
end;
end;
if p=true then inc(c);
end;
writeln(c+1);
t:=(now-t)*86400;
write(t:0:2);
end. 展开
求高手测试下 是我操作有误还是这个方法不行?
附测试用的一个小程序
program friend;
uses sysutils;
var t:double;
n,i,j,c:longint;
p:boolean;
begin
t:=now;
read(n);
for i:=1 to n do
begin
p:=false;
for j:=2 to trunc(sqrt(i)) do
begin
if i mod j=0 then
begin
p:=true;
break;
end;
end;
if p=true then inc(c);
end;
writeln(c+1);
t:=(now-t)*86400;
write(t:0:2);
end. 展开
8个回答
展开全部
pascal程序对每一套数据的运行时间都是不一样的,一般上在没有数据的时候需要根据算法时间代价计算,有数据时可以使用测试器,比较常见的有清澄和cena(很麻烦,还是建议自己算时间复杂度)
cena测试器用法:
打开,点左上角新建测试,在选择的文件夹下会出现一些子文件夹
data中新建文件夹放置测试数据src中新建文件夹中新建文件夹放置程序(pas和exe都要放进去,要打文件操作),然后点开新测试的试题,右键添加试题,添加测试点,设置试题名称(要和src新建文件夹下文件夹同名)输入输出,然后在试题界面右键添加其余测试点。刷新选手,收取,开始评测,评测完毕会显示耗时
文件操作:
在主程序中begin下打
assign(input,'输入文件名称');reset(input);
assign(output,'输出文件名称')rewrite(output);
end.上打
close(input);close(output);
以下是一些算法的时间代价
排序:对与长度为n的数组
冒泡排序 O(n2) O(n2) 稳定 O(1)
快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
选择排序 O(n2) O(n2) 稳定 O(1)
二叉树排序O(n2) O(n*log2n) 不一定 O(n)
插入排序 O(n2) O(n2) 稳定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
希尔排序 O O 不稳定 O(1)
最短路:对于v点e边数据结构
Floyd O(V^3)。
Dijkstra O(V*V+E) 队列版0(v*lgn)稀疏图O(V^2)
Bellman-Ford O(VE)
SPFA O(E)~O(VE)
[=-=总之还有很多,都可以查到,还有一些算法时间复杂度是不定的(像SPFA)以上表示运算次数,像for循环每执行一次就是1,电脑每秒约执行2亿次运算]
cena测试器用法:
打开,点左上角新建测试,在选择的文件夹下会出现一些子文件夹
data中新建文件夹放置测试数据src中新建文件夹中新建文件夹放置程序(pas和exe都要放进去,要打文件操作),然后点开新测试的试题,右键添加试题,添加测试点,设置试题名称(要和src新建文件夹下文件夹同名)输入输出,然后在试题界面右键添加其余测试点。刷新选手,收取,开始评测,评测完毕会显示耗时
文件操作:
在主程序中begin下打
assign(input,'输入文件名称');reset(input);
assign(output,'输出文件名称')rewrite(output);
end.上打
close(input);close(output);
以下是一些算法的时间代价
排序:对与长度为n的数组
冒泡排序 O(n2) O(n2) 稳定 O(1)
快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
选择排序 O(n2) O(n2) 稳定 O(1)
二叉树排序O(n2) O(n*log2n) 不一定 O(n)
插入排序 O(n2) O(n2) 稳定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
希尔排序 O O 不稳定 O(1)
最短路:对于v点e边数据结构
Floyd O(V^3)。
Dijkstra O(V*V+E) 队列版0(v*lgn)稀疏图O(V^2)
Bellman-Ford O(VE)
SPFA O(E)~O(VE)
[=-=总之还有很多,都可以查到,还有一些算法时间复杂度是不定的(像SPFA)以上表示运算次数,像for循环每执行一次就是1,电脑每秒约执行2亿次运算]
展开全部
经验证明,在程序里面自己测试时间是很不准确的,如果真正希望测试时间,建议选择cene等外部测试软件,比较准确。
还有一个简单的粗测法,就是关联好文件输入输出后生成exe,然后不停地点击可执行文件再利用windows的自带秒表计时。如果30秒内点了31次,基本1s内就可以完成。
没问题请采纳,有问题请追问
btw,求素数在100w内是很快的。
还有一个简单的粗测法,就是关联好文件输入输出后生成exe,然后不停地点击可执行文件再利用windows的自带秒表计时。如果30秒内点了31次,基本1s内就可以完成。
没问题请采纳,有问题请追问
btw,求素数在100w内是很快的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无论什么版本的Pascal,都可以使用Dos或Time单元的GetTime过程。那种直接访问内存的方法可移植性太差。看你像是新手,你的代码也是硬搬的,给你具体实现方法:
在程序头中:
Uses Dos;{这是TP的,如果是在FP或Delphi中使用Time更好}
Var Hour,Minite,Second,CentiSecond:Byte;
在可执行代码中:
GetTime(Hour,Minute,Second,CentiSecond);
可以获得系统时间,这是测量时间最好的方法。
注意:CentiSecond是百分之一秒,不是毫秒。
不抄袭,望采纳,谢谢。
在程序头中:
Uses Dos;{这是TP的,如果是在FP或Delphi中使用Time更好}
Var Hour,Minite,Second,CentiSecond:Byte;
在可执行代码中:
GetTime(Hour,Minute,Second,CentiSecond);
可以获得系统时间,这是测量时间最好的方法。
注意:CentiSecond是百分之一秒,不是毫秒。
不抄袭,望采纳,谢谢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、“两次的运行时间不一样”。楼主,我不得不说,您真逗!竟然把计时器加到Read(n)前面!你每次手指敲键盘输入n的时间能一样吗?!
2、其实计时器这类玩意用汇编写是最合适的了,但很遗憾,我的汇编已经忘到爪哇去了。记得Pascal中有个MemL数组可以直接访问内存:
var
t: Double;
begin
Read(n);
t := MemL[$0040:$006c]/18.2;
{你的那个什么循环...}
t := MemL[$0040:$006c]/18.2 - t;
Write(t:0:4);{单位为秒,变成毫秒你自己算吧}
end;
3、另外Dos.pas单元的GetTime 也能满足你的要求。
2、其实计时器这类玩意用汇编写是最合适的了,但很遗憾,我的汇编已经忘到爪哇去了。记得Pascal中有个MemL数组可以直接访问内存:
var
t: Double;
begin
Read(n);
t := MemL[$0040:$006c]/18.2;
{你的那个什么循环...}
t := MemL[$0040:$006c]/18.2 - t;
Write(t:0:4);{单位为秒,变成毫秒你自己算吧}
end;
3、另外Dos.pas单元的GetTime 也能满足你的要求。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前面一句应该
t:=now*86400;
后面一句改成
t:=now*86400-t;
这样能减小误差
t:=now*86400;
后面一句改成
t:=now*86400-t;
这样能减小误差
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同一个数据不同时间的话是电脑性能问题,正确的算法应当1s出答案。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
估计是电脑的问题吧
我家电脑用文件输入输出时的延迟都有好几秒
我家电脑用文件输入输出时的延迟都有好几秒
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询