词条 | 统计算法 |
释义 | 作用:在给定的范围内求出符合设定条件的记录个数。 算法基本思想:用一个条件语句判断当前记录是否符合给定条件,符合则统计个数加一。用循环实现对所有记录的操作。 举例说明:例一、从键盘敲进任意个(少于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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。