統計算法

在給定的範圍內求出符合設定條件的記錄個數。

基本介紹

  • 中文名:統計算法
  • 釋義:給定範圍求出符合設定條件記錄
  • 方式:循環實現
  • 特點:條件語句判斷
基本思想,舉例說明,使用方法,

基本思想

用一個條件語句判斷當前記錄是否符合給定條件,符合則統計個數加一。用循環實現對所有記錄的操作。

舉例說明

例一、從鍵盤敲進任意個(少於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進度
前面的都是在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)

相關詞條

熱門詞條

聯絡我們