Xác định độ phức tạp và thời gian chạy

Nhờ mọi người cho mình xin đáp án 3 câu này ạ, mình có đọc tài liệu nhưng không hiểu. Cảm ơn mọi người.

Câu 1: Phép toán chạy nhiều nhất (dominant) trong đoạn mã dưới đây là:

int s = 0;
for (int i = 0; i<=n; i++)
    for (int j = 0; j<=n; j++)
s += a[i, j];
  • A. s = 0
  • B. i <= n
  • C. j = 0
  • D. sum += a[i, j]

0 voters

Câu 2: Độ phức tạp của thuật toán ở câu 1 là:

  • A. O(1)
  • B. O(n)
  • C. O(n2)
  • D. O(n2 / n)

0 voters

Câu 3: Độ phức tạp của thuật toán tính ex dưới đây là:

double Exp(int n, int x)
{
    double S = 1;
    double p = 1;
    for (int i = 1; i <=n; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            p = p * x / j;
            S += p;
        }
    }
    return S;
}
  • A. O(n)
  • B. O(nlog(n))
  • C. O(n2)
  • D. O(2n2)

0 voters

Câu 1: Tất cả đều sai, đáp án đúng là j<=n nếu n ≥ 1

3 Likes

Đâu cần làm quá lên vậy đại ca :sweat_smile:. Cơ mà đúng hơn phải là nếu n ≥ 0 cơ. Nhỏ hơn 0 thì chạy 1 lần int i = 0j <= n.

Nhưng mà đề trắc nghiệm (đại ca xem ảnh gốc ở lịch sử edit) chứ có phải tự luận đâu mà được chỉ ra cái sai, cứ an phận mà chọn đáp án đúng nhất, thi xong rồi báo cáo lại thôi. :smile:

4 Likes

Cảm ơn mọi người rất nhiều ạ

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?