複製鏈接
請複製以下鏈接發送給好友

統計算法

鎖定
在給定的範圍內求出符合設定條件的記錄個數。
中文名
統計算法
釋    義
給定範圍求出符合設定條件記錄
方    式
循環實現
特    點
條件語句判斷

統計算法基本思想

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

統計算法舉例説明

例一、從鍵盤敲進任意個(少於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)