Quảng cáo
2 câu trả lời 362
Độ phức tạp thời gian hằng số (Constant Time Complexity): Đây là loại độ phức tạp thời gian tốt nhất. Không phụ thuộc vào kích thước của dữ liệu đầu vào, thời gian thực thi của thuật toán luôn là một hằng số. Trong ký hiệu Big O, độ phức tạp thời gian hằng số được biểu diễn là
O(1)O(1)
.
Độ phức tạp thời gian tuyến tính (Linear Time Complexity): Thời gian thực thi của thuật toán tăng tuyến tính theo kích thước của dữ liệu đầu vào. Trong ký hiệu Big O, độ phức tạp thời gian tuyến tính được biểu diễn là
O(n)O(n)
, trong đónn
là kích thước của dữ liệu đầu vào.
Ví dụ về thuật toán có độ phức tạp thời gian hằng số và tuyến tính thông qua bài toán tính tổng dãy số
1+2+3+4+...+n1+2+3+4+...+n
:
Thuật toán có độ phức tạp thời gian hằng số:
def sum_constant_time(n):
return n * (n + 1) // 2
Thuật toán này sử dụng công thức tổng của dãy số cấp số cộng, thời gian thực thi không phụ thuộc vào
nn
, do đó độ phức tạp thời gian làO(1)O(1)
.
Thuật toán có độ phức tạp thời gian tuyến tính:
def sum_linear_time(n):
total = 0
for i in range(1, n + 1):
total += i
return total
Thuật toán này cần duyệt qua từ
11
đếnnn
, do đó thời gian thực thi tăng tuyến tính theonn
, độ phức tạp thời gian làO(n)O(n)
.
Độ phức tạp thời gian hằng số, ký hiệu là \( O(1) \), là khi thời gian thực hiện không phụ thuộc vào kích thước đầu vào \( n \). Nói cách khác, thuật toán sẽ mất một lượng thời gian cố định, không đổi, không quan trọng đầu vào lớn hay nhỏ.
Độ phức tạp thời gian tuyến tính, ký hiệu là \( O(n) \), là khi thời gian thực hiện tăng trực tiếp tỷ lệ với kích thước đầu vào \( n \). Nếu đầu vào tăng gấp đôi, thời gian thực hiện cũng tăng gấp đôi.
Dưới đây là ví dụ về thuật toán có độ phức tạp thời gian hằng số và thuật toán có độ phức tạp thời gian tuyến tính cho bài toán tính tổng dãy số từ 1 đến \( n \):
Thuật toán độ phức tạp thời gian hằng số \( O(1) \) sử dụng công thức tính tổng dãy số:
```python
def sum_constant_time(n):
return n * (n + 1) // 2
```
Thuật toán độ phức tạp thời gian tuyến tính \( O(n) \) sử dụng vòng lặp để tính tổng:
```python
def sum_linear_time(n):
total = 0
for i in range(1, n + 1):
total += i
return total
```
Trong đó, `sum_constant_time` tính tổng một cách nhanh chóng bằng công thức của Gauss, trong khi `sum_linear_time` tính tổng bằng cách cộng dồn từng số từ 1 đến \( n \). Độ phức tạp thời gian của `sum_constant_time` không phụ thuộc vào \( n \), trong khi độ phức tạp thời gian của `sum_linear_time` tăng theo \( n \).
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Đã trả lời bởi chuyên gia
86258
