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!).