C C 中演算法執行時間的三種計算方

2021-08-03 04:41:09 字數 1651 閱讀 5740

演算法執行時間需通過依據該演算法編制的程式在計算機上執行時所消耗的時間來度量。而度量乙個程式的執行時間通常有兩種方法。

事後統計的方法:該方法利用計算機內部的計時功能,可以精確到毫秒級別,這種方法有兩個缺點:一是必須依據演算法先編寫好程式;二是執行程式的軟硬體環境易喧賓奪主,掩蓋演算法本身的優劣。但是有時候在同一臺機器上,想對不同演算法進行比較或是想知道乙個程式究竟需要執行多長時間,該方法就有了用武之地了。本文主要介紹三種事後計算演算法執行時間的方式,具體的可以參見源**,即time_t/time、timeb/ftime、clock/clocks_per_sec。

事前分析的方法:該方法考慮如下因素(a)演算法選用策略;(b)問題規模;(c)書寫程式的語言級別;(d)編譯程式產生機器**質量;(e)機器執行指令的速度。然後對演算法進行大o分析。此方法不在本文討論範圍之內。

標頭檔案:#include 「sys/timeb.h」

#include 」time.h「

#include 」stdio.h「

#include 」tchar.h「

#include 」cstdlib「

#include 」iostream「

#include 」sys/timeb.h「

#include 」ctime「

#include 」climits「

int _tmain(int argc, _tchar* argv)

time(&end);

cout << "採用計時方式一(精確到秒):迴圈語句執行了:" << (end-start) << "秒" << endl;

//計時方式二:標頭檔案::#include 「sys/timeb.h」可以精確到毫秒

struct timeb starttime , endtime;

ftime(&starttime);

for(int i=0; i < numeric_limits::max(); i++)

ftime(&endtime);

cout << "採用計時方式二(精確到毫秒):迴圈語句執行了:" << (endtime.time-starttime.time)*1000 + (endtime.millitm - starttime.millitm) << "毫秒" << endl;

//計時方式三

clock_t startctime , endctime; 

startctime = clock(); 

//clock函式返回cpu時鐘計時單元(clock tick)數,還有乙個常量表示一秒鐘有多少個時鐘計時單元,可以用clock()/clocks_per_sec來求取時間

for(int i=0; i < numeric_limits::max(); i++)

endctime = clock();

cout << "採用計時方式三(好像有些延遲,精確到秒):迴圈語句執行了:" << double((endctime-startctime)/clocks_per_sec) << "秒" << endl;

cout << "綜合比較上述三種種計時方式,方式二能夠精確到毫秒級別,比方式一和三都較好。此外在windows api中還有其他的計時函式,用法都大同小異,在此就不做介紹了。" << endl;

system("pause");

return 0;

}

C C 中演算法執行時間的三種計算方式

演算法執行時間需通過依據該演算法編制的程式在計算機上執行時所消耗的時間來度量。而度量乙個程式的執行時間通常有兩種方法。事後統計的方法 該方法利用計算機內部的計時功能,可以精確到毫秒級別,這種方法有兩個缺點 一是必須依據演算法先編寫好程式 二是執行程式的軟硬體環境易喧賓奪主,掩蓋演算法本身的優劣。但是...

c c 計算程式執行時間

在c c 中經常需要獲取某段程式的執行時間,那麼如何來實現呢?使用time函式計算某段程式執行時間的 如下 time t start time time start time time consuming code time t end time time end time time t durat...

C C計算程式執行時間

clock t clock void 簡單而言,就是該程式從啟動到函式呼叫占用cpu的時間。這個函式返回從 開啟這個程式程序 到 程式中呼叫clock 函式 時之間的cpu時鐘計時單元 clock tick 數,在msdn中稱之為掛鐘時間 wal clock 若掛鐘時間不可取,則返回 1。其中clo...