Sự khác biệt giữa giới hạn dưới và giới hạn chặt chẽ là gì?


99

Với sự tham khảo của câu trả lời này , Theta (ràng buộc chặt chẽ) là gì?

Omega là giới hạn thấp hơn, khá dễ hiểu, thời gian tối thiểu mà một thuật toán có thể mất. Và chúng tôi biết Big-O dành cho giới hạn trên, có nghĩa là thời gian tối đa mà một thuật toán có thể mất. Nhưng tôi không biết gì về Theta.

Câu trả lời:


154

Big O là giới hạn trên, trong khi Omega là giới hạn dưới. Theta yêu cầu cả Big O và Omega, vì vậy đó là lý do tại sao nó được gọi là một ràng buộc chặt chẽ (nó phải là cả giới hạn trên và giới hạn dưới).

Ví dụ, một thuật toán thực hiện Omega(n log n)cần ít n log nthời gian nhất , nhưng không có giới hạn trên. Việc sử dụng thuật toán Theta(n log n)được ưu tiên hơn nhiều vì nó cần ít nhất n log n (Omega n log n) và không nhiều hơn n log n (Big O n log n).


7
Oh .. Bây giờ thuật ngữ "ràng buộc chặt chẽ" xuất hiện khá tự giải thích cho tôi. Cảm ơn Chris. Tôi ngu ngốc, có lẽ tôi đã mong đợi một ý tưởng phức tạp nào đó. :)
Adeel Ansari

6
Vâng, có rất nhiều ký hiệu lạ mắt được ném ra xung quanh nhưng nó không quá phức tạp khi bạn đã hiểu nó dưới thắt lưng của mình.
Chris Bunch

4
Tài liệu có sẵn miễn phí này từ Virginia Tech giải thích bằng các ví dụ về sự khác biệt trong hiệu suất giữa các thuật toán có độ phức tạp khác nhau và giải thích ngắn gọn về Phân tích tiệm cận: people.cs.vt.edu/shaffer/Book/C++3e20120102.pdf
Alan

Ý bạn là gì khi "Thuật toán lấy Theta (n log n) được ưu tiên hơn nhiều vì nó cần ít nhất n log n (Omega n log n) và không quá n log n (Big O n log n).", Như trong, đó có phải là độ phức tạp chính xác của một thuật toán như bạn đã viết, ít nhất là Omega (nlogn) và tối đa là BigO (nlogn)?
Nikhil Verma

1
Nói một cách dễ hiểu, chúng ta có thể gọi: cận trên (Lớn (O)) là trường hợp xấu nhất không? ràng buộc chặt chẽ như trường hợp trung bình? giới hạn dưới (Omega) là trường hợp tốt nhất?
Revanth

113

Θ-ký hiệu (theta ký hiệu) được gọi là chặt chẽ-bound vì nó chính xác hơn O-ký hiệuΩ-ký hiệu (omega ký hiệu).

Nếu tôi lười biếng, tôi có thể nói rằng tìm kiếm nhị phân trên một mảng đã sắp xếp là O (n 2 ), O (n 3 ) và O (2 n ), và tôi sẽ đúng về mặt kỹ thuật trong mọi trường hợp. Đó là bởi vì ký hiệu O chỉ xác định giới hạn trên và tìm kiếm nhị phân bị giới hạn ở phía cao bởi tất cả các hàm đó, chỉ là không chặt chẽ lắm. Những ước tính lười biếng này sẽ vô ích .

Ký hiệu Θ giải quyết vấn đề này bằng cách kết hợp ký hiệu O và ký hiệu Ω. Nếu tôi nói rằng tìm kiếm nhị phân là Θ (log n), điều đó cung cấp cho bạn thông tin chính xác hơn. Nó cho bạn biết rằng thuật toán bị giới hạn ở cả hai phía bởi hàm đã cho, vì vậy nó sẽ không bao giờ nhanh hơn hoặc chậm hơn đáng kể so với đã nêu.


11
If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every case- Có vẻ như hầu hết mọi người trong thế giới máy tính đều lười biếng vì mọi người hầu như chỉ nói về sự phức tạp của Big O.
RBT

If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every caseTrong trường hợp ai đó nhầm lẫn với điều này: Đối với loại hàm không phải là ký hiệu small-o chặt chẽ về mặt tiệm cận được sử dụng. Ví dụ: - Đường 2n ^ 2 = O (n ^ 2) là tiệm cận chặt, nhưng 2n = O (n ^ 2) thì không. Đọc thêm: stackoverflow.com/questions/1364444/...
Dragos Strugar

18

Nếu bạn có thứ gì đó là O (f (n)) nghĩa là có k , g (n) sao cho f (n)kg (n) .

Nếu bạn có thứ gì đó là Ω (f (n)) nghĩa là có k , g (n) sao cho f (n)kg (n) .

Và nếu bạn có một thứ gì đó với O (f (n)) Ω (f (n)) , thì đó là Θ (f (n) .

Các bài viết trên Wikipedia là phong nha, nếu một dày đặc chút.


Bây giờ đọc gia đình của ký hiệu Bachmann-Landau. Cảm ơn Charlie, tôi đã đến đó trước đây, nhưng quay lại mà không tiếp tục theo chiều dài của nó.
Adeel Ansari

Này, thật tốt nếu bạn thường xuyên được cập nhật tài liệu về tiến sĩ.
Charlie Martin

Lưu ý rằng ký hiệu big-O của Landau không giới hạn ở độ phức tạp của thuật toán.
Charlie Martin

Điều này có vẻ sai. Trong dòng đầu tiên, nó sẽ đọc "Nếu bạn có thứ gì đó là O (g (n))", nghĩa là gthay vì f, và phần còn lại có thể được để nguyên. Tương tự với dòng thứ hai: nó phải là "Nếu bạn có thứ gì đó là Ω (g (n))". Bạn có thể vui lòng kiểm tra lại không?
Fabio nói Khôi phục Monica

Toàn bộ chủ đề lộn xộn đến nỗi ai đó có creditite đó cũng có thể hiểu sai: D Đùa sang một bên, cần có người sửa câu trả lời này. Điều này làm mọi người bối rối (nó đã làm tôi rất nhiều).
Rad

5

Giới hạn trên của tiệm cận có nghĩa là một thuật toán nhất định thực thi trong khoảng thời gian tối đa, tùy thuộc vào số lượng đầu vào.

Hãy lấy một thuật toán sắp xếp làm ví dụ. Nếu tất cả các phần tử của một mảng theo thứ tự giảm dần, thì để sắp xếp chúng, sẽ mất một khoảng thời gian chạy O(n), hiển thị độ phức tạp giới hạn trên. Nếu mảng đã được sắp xếp, giá trị sẽ là O(1).

Nói chung, O-notationđược sử dụng cho độ phức tạp giới hạn trên.


Giới hạn chặt chẽ tiệm cận (c 1 g (n) ≤ f (n) ≤ c 2 g (n)) cho thấy độ phức tạp giới hạn trung bình cho một hàm, có giá trị giữa các giới hạn bị ràng buộc (giới hạn trên và giới hạn dưới), trong đó c 1 và c 2 là hằng số.


1
nếu mảng được sắp xếp, các ràng buộc vẫn sẽ là O (n)
Arun Aravind

2
@ArunAravind Bạn có thể giải thích tại sao không?
nbro

3

Các cụm từ thời gian tối thiểuthời gian tối đa có một chút sai lệch ở đây. Khi chúng ta nói về ký hiệu O lớn, đó không phải là thời gian thực sự mà chúng ta quan tâm, đó là thời gian tăng lên như thế nào khi kích thước đầu vào của chúng ta lớn hơn. Và đó thường là thời gian trung bình hoặc trường hợp xấu nhất mà chúng ta đang nói đến, không phải trường hợp tốt nhất , thường không có ý nghĩa trong việc giải quyết vấn đề của chúng ta.

Sử dụng tìm kiếm mảng trong câu trả lời được chấp nhận cho câu hỏi khác làm ví dụ. Thời gian cần thiết để tìm một số cụ thể trong danh sách có kích thước n là trung bình n / 2 * some_constant. Nếu bạn coi nó như một hàm f(n) = n/2*some_constant, nó tăng không nhanh hơn g(n) = n, theo nghĩa như Charlie đã đưa ra. Ngoài ra, nó tăng không chậm hơn g(n). Do đó, g(n)thực sự là cả giới hạn trên và giới hạn dưới của f(n)ký hiệu Big-O, vì vậy độ phức tạp của tìm kiếm tuyến tính chính xácn , nghĩa là nó là Theta (n).

Về vấn đề này, lời giải thích trong câu trả lời được chấp nhận cho câu hỏi kia không hoàn toàn đúng, điều này khẳng định rằng O (n) là giới hạn trên vì thuật toán có thể chạy trong thời gian không đổi đối với một số đầu vào (đây là trường hợp tốt nhất mà tôi đã đề cập ở trên, mà không thực sự là những gì chúng tôi muốn biết về thời gian chạy).


Vì vậy, chúng ta có thể nói rằng Ω là trường hợp tốt nhất, và O là trường hợp xấu nhất? . .. và chúng ta có nên thay thế các điều khoản tương ứng là trường hợp tốt nhất và trường hợp xấu nhất không?
Adeel Ansari

Trường hợp tốt nhất là O (1) cho bất kỳ vấn đề nào?
Zach Langley

1
@Adeel, không, Theta và O đều có thể đề cập đến trường hợp trung bình hoặc trường hợp xấu nhất. @Zach, tốt, không chính xác. Cảm ơn vì đã chỉ ra điều đó.
PolyThinker

0

Nếu tôi lười biếng, tôi có thể nói rằng tìm kiếm nhị phân trên một mảng đã sắp xếp là O (n2), O (n3) và O (2n), và tôi sẽ đúng về mặt kỹ thuật trong mọi trường hợp.

Chúng ta có thể sử dụng ký hiệu o ("little-oh") để biểu thị một giới hạn trên không chặt chẽ về mặt tiệm cận. Cả big-oh và little-oh đều tương tự nhau. Nhưng, big-oh có thể được sử dụng để xác định giới hạn trên chặt chẽ tiệm cận.


0

Chính xác là giới hạn dưới hoặc $ \ omega $ bfon f (n) có nghĩa là tập hợp các hàm có tiệm cận nhỏ hơn hoặc bằng f (n) tức là U g (n) ≤ cf (n) $ \ với tất cả $ `un≥ n 'Đối với một số c, n' $ \ trong $ $ \ Bbb {N} $

Và giới hạn trên hoặc $ \ mathit {O} $ trên f (n) có nghĩa là tập hợp các hàm lớn hơn hoặc bằng f (n) về mặt toán học cho biết,

$ g (n) \ ge cf (n) \ cho tất cả n \ ge n '$, cho một số c, n' $ \ trong $ $ \ Bbb {N} $.

Bây giờ $ \ Theta $ là giao điểm của hai phần được viết ở trên

$\theta $

Giống như nếu một thuật toán giống như "chính xác $ \ Omega \ left (f (n) \ right $" thì tốt hơn nên nói nó là $ \ Theta \ left (f (n) \ right) $.

Hoặc, chúng ta cũng có thể nói rằng nó cung cấp cho chúng ta tốc độ thực tế, nơi $ \omega $cho chúng ta giới hạn thấp nhất.


-2

Sự khác biệt cơ bản giữa

Blockquote

tiệm cận trên và tiệm cận chặt chẽ Asym.upperbound có nghĩa là một thuật số nhất định có thể thực thi với lượng thời gian tối đa tùy thuộc vào số lượng đầu vào, ví dụ: trong việc sắp xếp algo nếu tất cả các phần tử của mảng (n) theo thứ tự giảm dần thì cứ tăng dần chúng sẽ mất một khoảng thời gian chạy của O (n) cho thấy độ phức tạp giới hạn trên, nhưng nếu chúng đã được sắp xếp rồi thì sẽ mất ohm (1). Vì vậy, chúng tôi thường sử dụng ký hiệu "O" cho độ phức tạp giới hạn trên.

Asym. giới hạn ràng buộc cho thấy ví dụ: (c1g (n) <= f (n) <= c2g (n)) cho thấy giới hạn ràng buộc chặt chẽ sao cho hàm có giá trị ở giữa hai giới hạn (giới hạn trên và giới hạn dưới), cho trường hợp trung bình.


2
Bạn không nên trả lời các câu hỏi cũ nếu câu trả lời của bạn không thêm chút nào vào câu trả lời đã được chấp nhận.
alestanis 21/10/12
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.