01/10/2018, 08:35

Đánh giá thời giá thời gian chạy chương trình

Anh/ chị có thể hướng dẫn em cách đánh gia thời gian chạy chương trình được không ạ?

HK boy viết 10:51 ngày 01/10/2018

Chương I Tài liệu chuyên Tin THPT nhé.

Nói thế thôi, bạn cứ nhớ đơn giản là thế này:
Muốn đánh giá đc thời gian chạy chương trình, đầu tiên đánh giá độ phức tạp của code.

  • 1 câu lệnh if…else/phép toán cộng trừ nhân chia/(hình như có cả dịch bit nữa) có độ phức tạp O(1),
  • 1 vòng lặp for/while có độ phức tạp O(n)
    -> có m vòng lặp for/while lồng nhau sẽ có độ phức tạp là O(n^k)
  • Các thuật toán khác nhau sẽ có độ phức tạp khác nhau: chặt nhị phân O(log n), quicksort O(n log n) (log là hàm logarit nepe nhé),… nói chung là gg.

Còn thời gian chạy chương trình thì tuỳ thuộc vào bộ nhớ cần sử dụng và cấu hình máy của bạn. Máy tính sẽ chạy khoảng 10^8 phép tính 1s (khoảng thôi, vì nhiều máy khủng hơn sẽ cho thời gian chạy ít hơn)

Văn Dương viết 10:45 ngày 01/10/2018

Kích hoạt một bộ đếm thời gian ở đầu chương trình. Đến cuối chương trình đọc thời gian đã trôi qua từ bộ đếm ta sẽ thu được thời gian thực hiện chương trình tính bằng tick hoặc ms.
Trong .NET nó là Stopwatch, trong C++ QT nó là QElapsedTimer còn các ngôn ngữ khác thì không rõ.

Thành Phạm viết 10:39 ngày 01/10/2018

B thử tìm cái này xem Profiling

en.m.wikipedia.org

Profiling (computer programming)

In software engineering, profiling ("program profiling", "software profiling") is a form of dynamic program analysis that measures, for example, the space (memory) or time complexity of a program, the usage of particular instructions, or the frequency and duration of function calls. Most commonly, profiling information serves to aid program optimization. Profiling is achieved by instrumenting either the program source code or its binary executable form using a tool called a profiler (or code pr...

Phạm Phúc viết 10:38 ngày 01/10/2018

Em thắc mắc là cái vòng while em không biết độ phức tập của nó như thế nào, tại while chưa chắc là 0(n^k) ạ!

rogp10 viết 10:36 ngày 01/10/2018

Mình thấy thực nghiệm là chắc ăn nhất với bộ test phù hợp để máy chạy vài giây. Ngoài time thì bạn còn phải lưu ý đến mem nữa.

Còn while 2 vòng vẫn có thể là O(n), như một bài trong hình họa (?) máy tính.

HK boy viết 10:43 ngày 01/10/2018

while thì tuỳ trường hợp. Có thể nó chạy 3, 4 lần rồi thoát, nhưng có trường hợp chạy mãi không ngừng.

Bài liên quan
0