Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Câu hỏi thú vị về độ phức tạp thời gian C++

Phân tích độ phức tạp của 2 đoạn code:

Đoạn 1

void counter(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < n; j += i)
            cout << i << " " << j;
        cout << endl;
    }
}

Vòng lặp trong chạy n/i lần. Tổng: n(1 + 1/2 + 1/3 + ... + 1/n) = n × Hₙ ≈ n log n. Độ phức tạp: O(n log n).

Đoạn 2

void counter(int n) {
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= log(i); j++)
            cout << i << " " << j;
}

Tổng: log 1 + log 2 + ... + log n = log(n!). Độ phức tạp: O(log n!).