O((n^3)/4)
không có ý nghĩa về ký hiệu big-O vì nó có nghĩa là đo độ phức tạp như tỷ lệ của đối số. Chia cho 4 không có tác dụng vì nó thay đổi giá trị của tỷ lệ nhưng không thay đổi.
Tất cả trong số này là tương đương:
O(n^3)
O(n^3/4)
O(n^3*1e6)
ngữ khác chỉ có ý nghĩa khi chúng bao gồm một thuật ngữ n
, chẳng hạn như:
O(n^3/log(n))
O(n^3 * 10^n)
Như Anthony Kanago đúng khi chỉ ra, đó là ước đến:
- chỉ giữ cụm từ có tỷ lệ tăng trưởng cao nhất cho số tiền:
O(n^2+n) = O(n^2)
.
- loại bỏ các hằng số cho sản phẩm:
O(n^2/4) = O(n^2)
.
Ngoài ra, tôi không luôn đồng ý với quy tắc đầu tiên đó trong mọi trường hợp. Đó là một quy tắc tốt để quyết định tốc độ tăng trưởng tối đa của hàm nhưng đối với những thứ như so sánh thuật toán (a) nơi bạn có thể đặt giới hạn thông số đầu vào một cách thông minh, chẳng hạn như O(n^4+n^3+n^2+n)
tệ hơn chỉ là O(n^4)
.
Trong trường hợp đó, bất kỳ điều khoản nào phụ thuộc vào thông số đầu vào sẽ được bao gồm. Trong thực tế, ngay cả các điều khoản không đổi có thể hữu ích ở đó. So sánh ví dụ O(n+1e100)
với số O(n^2)
- số sau sẽ vượt trội hơn trước đây trong một khoảng thời gian, cho đến khi n
trở nên đủ lớn để có hiệu lực trên cụm từ constatnt.
(a) Có, tất nhiên, những người có thể nói nó không nên được sử dụng theo cách như vậy nhưng thực dụng thường vượt qua chủ nghĩa giáo điều trong thế giới thực :-)
n/4 * n * n = (n^3)/4 –
Một trình biên dịch thông minh sẽ có thể tối ưu hóa tổ vòng lặp này là O (1), vì nó không thực sự làm bất cứ điều gì. – tgamblin
Trình biên dịch "thông minh" sẽ để nó một mình trừ khi được nói khác - nó có thể là vòng lặp thời gian trong hệ thống nhúng kiểm soát lưu lượng máu thông qua máy chạy thận :-) – paxdiablo