2009-05-18 81 views
22

Tôi đã viết chương trình C++, tôi muốn biết cách tính thời gian thực hiện để tôi không vượt quá giới hạn thời gian.tính thời gian thực hiện trong C++

#include<iostream> 

using namespace std; 

int main() 
{ 
    int st[10000],d[10000],p[10000],n,k,km,r,t,ym[10000]; 
    k=0; 
    km=0; 
    r=0; 
    scanf("%d",&t); 
    for(int y=0;y<t;y++) 
    { 
    scanf("%d",&n); 
    for(int i=0;i<n;i++) 
    { 
      cin>>st[i] >>d[i] >>p[i]; 
    } 
    for(int i=0;i<n;i++) 
    { 
      for(int j=i+1;j<n;j++) 
      { 
        if((d[i]+st[i])<=st[j]) 
        { 
           k=p[i]+p[j]; 
        } 
        if(k>km) 
        km=k; 
      } 
     if(km>r) 
     r=km; 
    } 
    ym[y]=r; 
} 
    for(int i=0;i<t;i++) 
    { 
     cout<<ym[i]<<endl; 
    } 


    //system("pause"); 
    return 0; 
}  

đây là chương trình của tôi và tôi muốn nó nằm trong giới hạn thời gian 3 giây !! làm thế nào để làm nó ? vâng xin lỗi tôi có nghĩa là thời gian thực hiện !!

+1

lúc mấy giờ giới hạn? Chỉ có bạn mới có thể áp đặt giới hạn thời gian và tôi không thể nghĩ ra lý do chính đáng để làm như vậy. – duffymo

+0

Nó phụ thuộc nhiều vào trình biên dịch/máy chủ/đĩa/tải khác. Bạn thường không bao giờ cần giới hạn như vậy. – Drakosha

+0

Bạn cần điều đó để làm gì? – Rook

Trả lời

80

Nếu bạn có cài đặt Cygwin, từ đó là bash shell, chạy thực thi của bạn, nói MyProgram, sử dụng tiện ích time, như vậy:

/usr/bin/time ./MyProgram 

này sẽ báo cáo bao lâu việc thực hiện các chương trình của bạn mất - sản lượng sẽ trông giống như sau:

real 0m0.792s 
user 0m0.046s 
sys  0m0.218s 

bạn cũng có thể tự sửa đổi chương trình C của bạn để công cụ nó bằng cách sử dụng chức năng clock() thư viện, như vậy:

#include <time.h> 
int main(void) { 
    clock_t tStart = clock(); 
    /* Do your stuff here */ 
    printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); 
    return 0; 
} 
+5

Lưu ý rằng clock() nhận được thời gian thực hiện tổng thể. Vì vậy, nếu bạn sử dụng nó với mã đa luồng, bạn có thể nhận được một kết quả lớn hơn, hơn bạn mong đợi. – FreeNickname

+0

Cảm ơn FreeNickname, tôi đã tự hỏi tại sao khi tôi mở rộng các chủ đề chương trình của tôi chạy chậm hơn! – Frederik

+0

@Ashutosh Mehra, tôi nhận được luôn luôn bằng không đưa ra, với mã đồng hồ của bạn. phải làm gì? Lỗi – sree

8

Lưu ý: câu hỏi ban đầu là về thời gian biên dịch, nhưng sau đó hóa ra OP thực sự là thời gian thực hiện. Nhưng có lẽ câu trả lời này sẽ vẫn hữu ích cho ai đó.

Đối với Visual Studio: hãy truy cập Tools/Options/Projects and Solutions/VC++ Project Settings và đặt Build Timing tùy chọn 'yes'. Sau đó, thời gian của mỗi bản dựng sẽ được hiển thị trong cửa sổ Output.

1

Điều này giống như thuật toán của Dijstra. Trong mọi trường hợp, thời gian thực hiện sẽ phụ thuộc vào N. Nếu phải mất hơn 3 giây thì không có cách nào tôi có thể thấy tăng tốc, vì tất cả các tính toán mà nó đang làm cần được thực hiện.

Tùy thuộc vào vấn đề bạn đang cố giải quyết, có thể có thuật toán nhanh hơn.

0

Tất cả thời gian chạy được bật lên là 0 hoặc 0,001. Điều đó có thể đúng nhưng có thể cho nó thậm chí là 0 giây?

0

Tôi đã sử dụng kỹ thuật nêu trên, tôi vẫn thấy rằng thời gian được đưa ra trong mã số : Blocks IDE ít nhiều giống với kết quả thu được- (có thể sẽ khác nhau chút ít giây) ..

13

TỔNG QUAN

tôi đã viết một đơn giản ngữ nghĩa hack cho này bằng @AshutoshMehra phản ứng. Bạn mã thực sự có thể đọc được theo cách này!

MACRO

#include <time.h> 

#ifndef SYSOUT_F 
#define SYSOUT_F(f, ...)  _RPT1(0, f, __VA_ARGS__) // For Visual studio 
#endif 

#ifndef speedtest__    
#define speedtest__(data) for (long blockTime = NULL; (blockTime == NULL ? (blockTime = clock()) != NULL : false); SYSOUT_F(data "%.9fs", (double) (clock() - blockTime)/CLOCKS_PER_SEC)) 
#endif 

SỬ DỤNG

speedtest__("Block Speed: ") 
{ 
    // The code goes here 
} 

OUTPUT

Block Speed: 0.127000000s 
+0

': số nhận dạng" _RPT1 "chưa được xác định –

1

Với C++ 11 để đo cũ Hiện ecution của một đoạn mã, chúng ta có thể sử dụng tại() chức năng:

auto start = chrono::steady_clock::now(); 

// Insert the code that will be timed 

auto end = chrono::steady_clock::now(); 

// Store the time difference between start and end 
auto diff = end - start; 

Nếu bạn muốn in phần chênh lệch thời gian giữa đầu và cuối trong đoạn mã trên, bạn có thể sử dụng:

cout << chrono::duration <double, milli> (diff).count() << " ms" << endl; 

Nếu bạn thích sử dụng nano giây, bạn sẽ sử dụng:

cout << chrono::duration <double, nano> (diff).count() << " ns" << endl; 

giá trị của biến khác cũng có thể được rút ngắn đến một giá trị số nguyên, ví dụ, nếu bạn muốn kết quả thể hiện như:

diff_sec = chrono::duration_cast<chrono::nanoseconds>(diff); 
cout << diff_sec.count() << endl; 

Để biết thêm thông nhấp here

Các vấn đề liên quan