Thắc mắc cách tính Big-O

Chào mọi người,
Cho em hỏi bài này big-O là O(n^3) hay O(n^2) vậy ạ?
Theo cách tính của em là dòng 2 là O(n) còn dòng 3 là O(n*(n+1)/2) = O(n^2) thì Big-O của bài là O(n)*O(n^2) = O(n^3) đúng không ạ? Tại em có coi một số video thì người ta ra big-O là O(n^2) nên em không biết đúng hay sai :frowning:
Do em mới học được 1 buổi ctdl&gt nên chưa hiểu lắm :frowning:
5e442c44251bea45b30a
Em cảm ơn

1 Like

Dòng thứ 3 chỉ lặp từ 1 đến 9 nên độ phức tạp của thuật toán này là: O(n^2 * 8) = O(n^2) (quy tắc bỏ hằng số)

Nếu dòng thứ 3 lặp đến j thì sẽ ra O(n^3)

6 Likes

Dòng 1 và 2 đều là O(n) nên theo quy tắc nhân là O(n^2).

Vòng lặp biến k lặp 9 lần nên T(n) = 9 \cdot O(1) \cdot O(n^2) = O(n^2).

8 Likes

À hình như em hiểu sai vấn đề rồi, vòng lặp biến j lúc đầu em tính theo tổng cấp số cộng do j=i+1 nên mới ra là O(n*(n+1)/2) = O(n^2) gồm luôn cả vòng lặp biến i, còn vòng lặp của biến k do chỉ lặp đến 9 thôi nên sẽ là O(1). Kết quả cuối cùng là O(n^2)
Em cảm ơn ạ ^^

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