Sự khác biệt giữa ký hiệu Big-O và Little-O


Câu trả lời:


442

f ∈ O (g) nói, về cơ bản

Đối với ít nhất một lựa chọn của hằng số k > 0, bạn có thể tìm thấy hằng số a sao cho bất đẳng thức 0 <= f (x) <= kg (x) giữ cho tất cả x> a.

Lưu ý rằng O (g) là tập hợp tất cả các hàm mà điều kiện này giữ.

f ∈ o (g) nói, về cơ bản

Với mọi lựa chọn hằng số k > 0, bạn có thể tìm thấy hằng số a sao cho bất đẳng thức 0 <= f (x) <kg (x) giữ cho tất cả x> a.

Một lần nữa, lưu ý rằng o (g) là một tập hợp.

Trong Big-O, bạn chỉ cần tìm một số nhân k cụ thể mà bất đẳng thức vượt quá một số x tối thiểu .

Trong Little-o, phải có tối thiểu x sau đó bất đẳng thức giữ cho dù bạn tạo k nhỏ đến mức nào , miễn là nó không âm hoặc bằng 0.

Cả hai đều mô tả giới hạn trên, mặc dù hơi phản trực giác, Little-o là tuyên bố mạnh mẽ hơn. Có một khoảng cách lớn hơn nhiều giữa tốc độ tăng trưởng của f và g nếu f ∈ o (g) so với nếu f ∈ O (g).

Một minh họa cho sự chênh lệch này là: f ∈ O (f) là đúng, nhưng f ∈ o (f) là sai. Do đó, Big-O có thể được đọc là "f ∈ O (g) có nghĩa là sự tăng trưởng tiệm cận của f không nhanh hơn g", trong khi "f ∈ o (g) có nghĩa là sự tăng trưởng tiệm cận của f chậm hơn so với g". Nó giống như <=so với <.

Cụ thể hơn, nếu giá trị của g (x) là bội số không đổi của giá trị f (x), thì f ∈ O (g) là đúng. Đây là lý do tại sao bạn có thể bỏ hằng số khi làm việc với ký hiệu big-O.

Tuy nhiên, để f ∈ o (g) là đúng, thì g phải bao gồm công suất cao hơn của x trong công thức của nó và do đó, khoảng cách tương đối giữa f (x) và g (x) thực sự phải lớn hơn khi x lớn hơn.

Để sử dụng các ví dụ toán học thuần túy (thay vì tham khảo các thuật toán):

Những điều sau đây đúng với Big-O, nhưng sẽ không đúng nếu bạn sử dụng little-o:

  • x² O (x²)
  • x² O (x² + x)
  • x² O (200 * x²)

Những điều sau đây là đúng đối với little-o:

  • x² ∈ o (x³)
  • x² ∈ o (x!)
  • ln (x) o (x)

Lưu ý rằng nếu f ∈ o (g), điều này có nghĩa là f ∈ O (g). ví dụ: x² o (x³) vì vậy cũng đúng là x² O (x³), (một lần nữa, hãy nghĩ về O as <=và o as <)


146
Có-- sự khác biệt là liệu hai chức năng có thể giống nhau không. Theo trực giác, tôi thích nghĩ về big-O có nghĩa là "tăng trưởng không nhanh hơn" (nghĩa là tăng trưởng với tốc độ tương tự hoặc chậm hơn) và ít có nghĩa là "phát triển chậm hơn".
Phil

12
Sao chép này vào wikipedia? Điều này tốt hơn nhiều so với những gì có.
cloudurfin

1
@SA Vâng. Đó là một trường hợp phức tạp hơn trong đó quy tắc đơn giản hơn mà tôi đưa ra về "quyền hạn cao hơn của x" rõ ràng không thể áp dụng được. Nhưng nếu bạn nhìn vào các định nghĩa giới hạn nghiêm ngặt hơn được đưa ra trong câu trả lời của Strilanc dưới đây, điều bạn muốn biết là nếu lim n-> inf (2 ^ n / 3 ^ n) = 0. Vì (2 ^ n / 3 ^ n) = (2/3) ^ n và vì với 0 <= x <1, lim n-> inf (x ^ n) = 0, đúng là 2 ^ n = o (3 ^ n).
Tyler McHenry

1
Hãy cẩn thận với "Trong Little-o, phải có tối thiểu x sau đó bất đẳng thức giữ cho dù bạn kiếm k nhỏ đến mức nào, miễn là nó không âm hoặc bằng 0". Đó không phải là "vì mọi thứ đều ak: ...", đó là "vì mọi thứ đều ka: ..."
GA1

1
"Trong Little-o, phải có tối thiểu x sau đó bất đẳng thức giữ cho dù bạn tạo k nhỏ như thế nào, miễn là nó không âm hoặc bằng không." không, điều này không chính xác
Filippo Costa

196

Big-O là ít-o như là để <. Big-O là một giới hạn trên bao gồm, trong khi Little-o là một giới hạn trên nghiêm ngặt.

Ví dụ: hàm f(n) = 3nlà:

  • trong O(n²), o(n²)O(n)
  • không O(lg n), o(lg n)hoặco(n)

Tương tự, số 1là:

  • ≤ 2, < 2≤ 1
  • không ≤ 0, < 0hoặc< 1

Đây là một bảng, hiển thị ý tưởng chung:

Bàn o lớn

(Lưu ý: bảng là một hướng dẫn tốt nhưng định nghĩa giới hạn của nó phải theo giới hạn vượt trội thay vì giới hạn bình thường. Ví dụ: 3 + (n mod 2) dao động trong khoảng từ 3 đến 4 mãi mãi. O(1)Mặc dù không có giới hạn bình thường, bởi vì nó vẫn có giới hạn bình thường a lim sup: 4.)

Tôi khuyên bạn nên ghi nhớ cách ký hiệu Big-O chuyển thành so sánh tiệm cận. Các so sánh dễ nhớ hơn, nhưng kém linh hoạt hơn vì bạn không thể nói những điều như n O (1) = P.


Tôi có một câu hỏi: sự khác biệt giữa dòng 3 và 4 (cột định nghĩa giới hạn) là gì? Bạn có thể vui lòng chỉ cho tôi một ví dụ trong đó 4 giữ (lim> 0), nhưng không phải 3 không?
Người đàn ông đeo mặt nạ

3
Ồ, tôi đã tìm ra nó. Big Omega dành cho lim> 0, Big Oh dành cho lim <infinite, Big Theta là khi cả hai điều kiện giữ, nghĩa là 0 <lim <infinite.
Người đàn ông đeo mặt nạ

Đối với f ∈ (g), không nên giới hạn ở vô cực đánh giá là> = 1? Tương tự cho f ∈ O (g), 1 = <c <∞?
dùng2963623

1
@ user2963623 Không, vì các giá trị hữu hạn hoàn toàn trên 0, bao gồm các giá trị từ 0 đến 1, tương ứng với "độ phức tạp tiệm cận giống nhau nhưng các yếu tố hằng số khác nhau". Nếu bạn bỏ qua các giá trị dưới 1, bạn có điểm cắt trong không gian yếu tố không đổi thay vì trong không gian phức tạp tiệm cận.
Craig Gidney

1
@ubadub Bạn phát hoạt động lũy ​​thừa qua tập hợp. Đó là ký hiệu lỏng lẻo.
Craig Gidney

45

Tôi thấy rằng khi tôi không thể nắm bắt một cách khái niệm một cái gì đó, nghĩ về lý do tại sao một người sẽ sử dụng X là hữu ích để hiểu X. (Không phải nói rằng bạn đã không thử điều đó, tôi chỉ đang thiết lập giai đoạn.)

[những thứ bạn biết] Một cách phổ biến để phân loại thuật toán là theo thời gian chạy và bằng cách trích dẫn độ phức tạp lớn của thuật toán, bạn có thể có được ước tính khá tốt về cái nào là "tốt hơn" - bất kỳ cái nào có chức năng "nhỏ nhất" trong O! Ngay cả trong thế giới thực, O (N) "tốt hơn" O (N²), loại bỏ những thứ ngớ ngẩn như hằng số siêu lớn và những thứ tương tự. [/ Thứ bạn biết]

Giả sử có một số thuật toán chạy trong O (N). Khá tốt hả? Nhưng giả sử bạn (bạn là người thông minh, bạn) nghĩ ra một thuật toán chạy trong O ( NloglogloglogN ). YAY! Nó nhanh hơn! Nhưng bạn sẽ cảm thấy ngớ ngẩn khi viết đi viết lại nhiều lần khi bạn viết luận án. Vì vậy, bạn viết nó một lần và bạn có thể nói "Trong bài báo này, tôi đã chứng minh rằng thuật toán X, trước đây có thể tính toán được trong thời gian O (N), trên thực tế có thể tính toán được trong o (n)."

Do đó, mọi người đều biết rằng thuật toán của bạn nhanh hơn --- bằng bao nhiêu không rõ ràng, nhưng họ biết nó nhanh hơn. Về mặt lý thuyết. :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.