Tôi cố gắng xác định thời gian chạy cho thuật toán sau trong ký hiệu O. Đoán đầu tiên của tôi là O (n), nhưng khoảng cách giữa các lần lặp lại và số tôi áp dụng không ổn định. Làm thế nào tôi đã xác định không chính xác điều này?Giải quyết: T (n) = T (n/2) + n/2 + 1
public int function (int n)
{
if (n == 0) {
return 0;
}
int i = 1;
int j = n ;
while (i < j)
{
i = i + 1;
j = j - 1;
}
return function (i - 1) + 1;
}
Để được chính xác, bit-O là cận trên, vì vậy có rất nhiều câu trả lời có thể. Ví dụ nó là đúng, nhưng thay vì gây hiểu lầm, để nói rằng thuật toán này là O (n * n). Khi có thể, tốt hơn là sử dụng big-Theta để báo hiệu thời gian chạy. Phân tích trong câu trả lời được chấp nhận có giá trị ngang nhau đối với big-Theta. –