關於演算法執行時間以及「管道」為什麼引入

2022-08-29 00:06:24 字數 1185 閱讀 9467

我以前畢設比較不同解碼演算法的時候,直接用乙個clock()來比較不同演算法執行速率。現在想起來,這是及其錯誤了!

《演算法競賽入門經典》p64

乙個程式中計時函式clock()的使用。該函式返回程式目前為止執行的時間。這樣,在程式結束之前呼叫此函式,便可獲得整個程式的執行時間。這個時間除以常數clocks_per_sec之後得到的值以「秒」為單位。

提示2-17:可以使用time.h和clock()函式獲得程式執行時間。常數clocks_per_sec和作業系統相關,請不要直接使用clock()的返回值,而應總是除以clocks_per_sec。

輸入「20」,按enter鍵後,系統瞬間輸出了答案820313。但是,輸出的time used居然不是0!其原因在於,鍵盤輸入的時間也被計算在內——這的確是程式啟動之後才進行的。為了避免輸入資料的時間影響測試結果,可使用一種稱為「管道」的小技巧:在windows命令列下執行echo 20|abc,作業系統會自動把20輸入,其中abc是程式名。如果不知道如何操作命令行,請參考附錄a。筆者建議每個讀者都熟悉命令列操作,包括windows和linux。

在做ccf的模擬題的題一,我常用的乙個方法是

int

n;cin>>n;

inta[n];

inti;

for(i=0;i)

其實這樣往往遇到乙個問題,如果輸入沒有先輸入n這乙個步驟,而是任意輸入的數字流,就不知所措了。

在《演算法競賽入門指導》p66,有如下

while(scanf("

%d", &x) == 1

)printf(

"%d %d %.3f\n

", min, max, (double)s/n);

可以用while(。。。!=0)之類的判斷吧。

對於c語言

還記得scanf的輸入格式嗎?空格、tab和回車符都是無關緊要的,所以按enter鍵並不意味著輸入的結束。那如何才能告訴程式輸入結束了呢?

提示2-19:在windows下,輸入完畢後先按enter鍵,再按ctrl+z鍵,最後再按enter鍵,即可結束輸入。在linux下,輸入完畢後按ctrl+d鍵即可結束輸入。

對於c++

cin會在空格位置就停止的,getline才可以讀到回車,網上看到的,以後注意。

關於執行時間中的對數

關於執行時間中的對數 書中的翻譯是這樣的 如果乙個演算法用常數時間 o 1 將問題的大小削減為其一部分 通常是1 2 那麼該演算法就是o logn 另一方面,如果使用常數時間只是把問題減少乙個常數 如將問題減少1 那麼這種演算法就是o n 的。翻譯很拗口,不過好在下面給出了三個例子 對分查詢 歐幾里...

時間相減 什麼是PLC系統執行時間?

今天跟大家 下plc的 系統執行時間,我們以西門子s7 1200為例來說明下。系統執行時間 s7 1200 cpu的迴圈掃瞄時間 看門狗時間 預設為150ms,最大可修改為6000ms,如圖1 當程式設計結束後,需要了解程式的迴圈週期,可通過如下方法查詢。子程式執行時間 使用s7 1200 cpu時...

資料結構中執行時間演算法

在比較演算法的效率時,往往是演算法的執行時間與資料項個數關係間比較,例如,為了得到某個結果,在同一資料量下,哪個演算法執行最快,效率最高,而後改變這一資料量,哪種演算法的時間又最快.大o表示法 在描述演算法執行時間時,往往能看到o n o logn 等,大o中的o的意思就是 order of 大約是...