在編寫程式中常常要不斷優化演算法,演算法的好壞無非取決於時間和空間的消耗,其中的時間消耗也是我們最關心的問題,一些演算法的時耗我們是可以很輕鬆的大概估計的,比如多個迴圈的疊加。當然也有許多情況是我們難以估計的,比如複雜的遞迴。這時候我們就需要乙個工具來幫我們計算**段的耗時情況。
這裡我就舉乙個簡單實用的方法。
c/c++提供了名為time的標準庫,其中clock()函式可以返回從程式開始到clock()函式被呼叫這之前cpu走過的時鐘計時單元數,當然這個單元數我們是難以直接識別的,這時候我們就需要乙個能表示cpu時鐘一秒鐘所走過的時鐘單位數常量,常用的是clocks_per_sec和clk_tck。
具體使用方法如下:
#include
#include
//呼叫time標準庫
using
namespace std;
intmain()
這樣我們就可以了解我們的程式具體的時耗了
但是其中有幾點值得注意:
start和end應分別在被測**段的前後,不在測試範圍的**要寫在外面,如程式的準備工作。
計算機執行程式很快,許多**段能瞬間被完成,當**消耗時間小於乙個時鐘計時單元時,會無法正常顯示耗時(輸出耗時為0),這時我們可以將所測**執行多遍,再將所得耗時除以執行次數,即可得到**用時;或增大輸入資料,來獲得耗時。舉個例子:
當我們想看看斐波拉契數列遞迴實現方法的時間耗時
#include
#include
using
namespace std;
long
long
rpt(
int n)
intmain()
不出所料:
沒關係,我們讓**多執行幾次,套個迴圈看看:
#include
#include
using
namespace std;
long
long
rpt(
int n)
intmain()
這次顯示是3。
然後我們再用所得時間(也就是3)除以迴圈的次數(5000次)就是**的執行時間啦。
增大輸入資料也可以用來返回有效耗時,如將求第20項改為求100項 求第40項,也可以看出耗時,這種方法比較適合比較兩種演算法的時耗情況。
OpenCV 計時方法
跑乙個程式除了看它報不報錯,還得計算時間效率對吧。那麼在基於c 的opencv工程中如何計時呢?一 gettickcount函式 double t double gettickcount various operations t gettickcount t gettickfrequency cou...
linux 終端計時方法
經常需要在linux終端中測試效能,例如flash的讀寫效能。這就需要對乙個操作進行計時。以前一直用date命令,然後人工做減法操作來得到結果。簡單測測還行,如果長時間測試,這個人工費就上去了。為了降低人工成本,今天查了些資料。目的是得到乙個操作花了多長時間,單位為秒。首先查date命令,看如果得到...
倒計時方法
前幾天,公司新來的小後台讓我給他乙個倒計時的方法,由於忙專案也沒有給他好好整理,就胡亂寫了乙個,讓他用。後來他問我有木有blog,我說木有,好像有點鄙視我的眼光 好吧,再次blog 根據id獲取節點 method id param string return object function id s...