統計算法

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

基本思想

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

舉例說明

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

經典計算機算法介紹

算法是計算機科學中一門古老而常新的學科,就像一個人的思維能力一樣,其重要性對於計算機性能的分析、套用與改進有著至不言而喻的地位。而隨著計算機科學技術的發展,新的算法也隨著新的套用漸漸出現,但總有一些算法由於其本身具有的特點以及對計算機科學發展做出的卓越貢獻而成為經典,本任務就是要介紹這些經典算法。

相關詞條

相關搜尋

熱門詞條

聯絡我們