请输入您要查询的百科知识:

 

词条 统计算法
释义

作用:

在给定的范围内求出符合设定条件的记录个数。

算法基本思想:

用一个条件语句判断当前记录是否符合给定条件,符合则统计个数加一。用循环实现对所有记录的操作。

举例说明:

例一、从键盘敲进任意个(少于255个)字符,然后求出其中某一个字母的个数(如大写字母A)。

分析:用一个字符串变量来接受从键盘输入的字符,然后从第一个字符开始对每一个字符进行处理,如果是A则个数加一,最后把总的统计个数输出。

程序代码:

programjjzx(input,output);

type

str=string[255];

var

st:str;

n,i,j:integer;

begin

writeln(‘请输入一行字符:‘);

readln(st);

j:=lenth(st);{把字符串的实际长度赋给j}

n:=0;

fori:=1tojdo

iford(st[i])=65thenn:=n+1;

writeln(‘你输入的字符是:‘,st);

writeln((‘其中字符A的个数和:‘,n)

end.

使用什么方法来统计算法、代码的执行时间

1.使用<time.h>的clock()函数

模板程序:

#include<time.h>

#include<iostream>usingnamespacestd;intmain()

{

time_tt;

//一些初始化的东西

t=clock();//开始时候的GET,clock()函数用于获得系统当前时间

//你需要计时的代码,算法,语句等等

cout<<"Timeconsumed:"<<clock()-t<<endl;

//结束时候获得差值

return0;

}

用clock()函数能够精确到1ms,但是它不是标准化所推荐的而且工业化程序也不容许使用<time.h>

2.使用GetTickCount

这个和clock()相同,只是它比较标准,GetTickCount可以到18-20ms进度

3.汇编指令

前面的都是在MS级别逗留的计时,当我们需要统计一个语句使用时间的时候,我们通常经过多次循环来求总时间。

缺点:1)由于需要统计的语句耗时可能比循环需要的JMP,INC指令耗时还要少(尤其JMP指令很慢),所以统计并不精确,大多耗时为循环使用时间

2)编译器对于循环有优化,可能与单语句的汇编代码不同造成统计结果无参考意义

所以我们能不能避免这些问题呢?可以使用

直接读取CPU开机以来执行的机器周期数,一条汇编指令:RDTSC(就是ReaDTimeStampCount)精度可以达到ns级别。(准确地说精度是1/你的CPU的时钟频率,这也是极限)使用:longHighStart,LowStart,HighEnd,LowEnd;

longnumhigh,numlow;__asm//使用汇编混编

{

RDTSC

movHighStart,edx

movLowStart,eax

}

//此处放上你的算法或代码,语句等等

__asm

{

RDTSC

movHighEnd,edx

movLowEnd,eax

//获取两次计数器值得差

subeax,LowStart

cmpeax,0

jgL1

negeax

jmpL2L1:movnumlow,eax

L2:sbbedx,HighStart

movnumhigh,edx

}unsignedlongtimer=(numhigh<<32)+numlow;//得出最终结果(单位时NS)

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/21 7:33:35