câu trả lời của tổng số chuỗi n tự nhiên có thể được tìm thấy bằng hai cách. cách đầu tiên là bằng cách thêm tất cả các số trong vòng lặp. trong thuật toán trường hợp này là tuyến tính và mã sẽ như thế này
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += n;
}
return sum;
tương tự như 1 + 2 + 3 + 4 + ...... + n. trong trường hợp này, độ phức tạp của thuật toán được tính bằng số lần hoạt động bổ sung được thực hiện là O (n).
cách thứ hai để tìm câu trả lời tổng của chuỗi số tự nhiên n là công thức direst n * (n + 1)/2. công thức này sử dụng phép nhân thay vì lặp lại lặp đi lặp lại. phép toán nhân không có độ phức tạp về thời gian tuyến tính. có các thuật toán khác nhau có sẵn cho phép nhân có độ phức tạp thời gian khác nhau, từ O (N^1,45) đến O (N^2). do đó trong trường hợp phức tạp thời gian phép nhân phụ thuộc vào kiến trúc của bộ vi xử lý. nhưng với mục đích phân tích thời gian phức tạp của phép nhân được coi là O (N^2). do đó khi sử dụng cách thứ hai để tìm tổng thì độ phức tạp của thời gian sẽ là O (N^2).
tại đây hoạt động nhân giống không giống như thao tác bổ sung. nếu ai có kiến thức về chủ thể tổ chức máy tính thì anh ta có thể dễ dàng hiểu được hoạt động nội bộ của phép nhân và phép cộng. mạch nhân là phức tạp hơn so với mạch cộng và đòi hỏi thời gian cao hơn nhiều so với mạch cộng để tính toán kết quả. do đó, thời gian phức tạp của tổng của chuỗi không thể không đổi.
Nó sẽ giúp biết "cái này" là gì. Bạn nói đúng rằng việc bổ sung những thứ n (làm một cái gì đó n lần, mỗi chi phí O (1)) là O (n). Nhưng nếu thay vì thêm 1 + 2 + 3 + v.v, bạn phải * làm * một cái gì đó một lần, và sau đó * làm * một cái gì đó hai lần, và sau đó ba lần, vv, sau đó sau 1 + 2 + 3 .. + n đã được thực hiện bạn đã thực hiện n * (n + 1)/2 điều, là O (n^2). – DSM
Thiếu? Vâng, bạn tìm thấy công thức cho một tổng kết giải thích nó. Bạn cần trợ giúp gì khác? – simchona
@DSM xin lỗi vì sự mơ hồ, "this" đang đề cập đến '1 + 2 + 3 + ... + n' – user1032613