Chính xác thì ký hiệu lớn thể hiện điều gì?


179

Tôi thực sự bối rối về sự khác biệt giữa chữ O lớn, chữ Omega lớn và ký hiệu Theta lớn.

Tôi hiểu rằng O lớn là giới hạn trên và Omega lớn là giới hạn dưới, nhưng chính xác thì Ө (theta) đại diện cho cái gì?

Tôi đã đọc rằng nó có nghĩa là ràng buộc chặt chẽ , nhưng điều đó có nghĩa là gì?


Câu trả lời:


93

Nó có nghĩa là thuật toán là cả big-O và big-Omega trong hàm đã cho.

Ví dụ, nếu có Ө(n), thì có một số hằng số k, như hàm của bạn (thời gian chạy, bất cứ thứ gì), lớn hơn n*kđủ lớn nvà một số hằng số khác Ksao cho hàm của bạn nhỏ hơn n*Kđủ lớn n.

Nói cách khác, đối với đủ lớn n, nó được kẹp giữa hai hàm tuyến tính:

Cho k < Knđủ lớn,n*k < f(n) < n*K


Không, những biến đó hơi khó hiểu, chúng không liên quan.
Aaron Robeson

@commnedandroider Không, chúng là chữ thường và chữ hoa khác nhau, anh ấy sử dụng kiểu toán học điển hình trong đó hai biến "tương tự" (nhưng không liên quan theo bất kỳ cách nào ở đây) sử dụng chữ lớn và chữ nhỏ.
Santropedro

329

Trước tiên hãy hiểu O lớn, Theta lớn và Omega lớn là gì. Chúng là tất cả các bộ chức năng.

Big O đang đưa ra giới hạn tiệm cận trên , trong khi Omega lớn lại cho giới hạn dưới. Big Theta cho cả hai.

Tất cả mọi thứ Ө(f(n))cũng được O(f(n)), nhưng không phải là cách khác.
T(n)được cho là trong Ө(f(n))nếu nó là cả trong O(f(n))và trong Omega(f(n)).
Trong các thuật ngữ tập hợp, Ө(f(n))giao điểm của O(f(n))Omega(f(n))

Ví dụ, trường hợp xấu nhất sắp xếp hợp nhất là cả hai O(n*log(n))Omega(n*log(n))- và do đó cũng vậy Ө(n*log(n)), nhưng nó cũng vậy O(n^2), vì n^2nó không lớn hơn "lớn" hơn nó. Tuy nhiên, nó không phải Ө(n^2) , vì thuật toán là không Omega(n^2).

Giải thích toán học sâu hơn một chút

O(n)là giới hạn trên không có triệu chứng. Nếu T(n)O(f(n)), nó có nghĩa là từ một số nhất định n0, có một hằng số Cnhư vậy T(n) <= C * f(n). Mặt khác, big-Omega nói rằng có một hằng số C2như vậy T(n) >= C2 * f(n))).

Đừng bối rối!

Không nên nhầm lẫn với phân tích trường hợp xấu nhất, tốt nhất và trung bình: cả ba ký hiệu (Omega, O, Theta) không liên quan đến phân tích trường hợp tốt nhất, tồi tệ nhất và trung bình của thuật toán. Mỗi một trong số này có thể được áp dụng cho mỗi phân tích.

Chúng ta thường sử dụng nó để phân tích độ phức tạp của các thuật toán (như ví dụ sắp xếp hợp nhất ở trên). Khi chúng ta nói "Thuật toán A là O(f(n))", điều chúng ta thực sự muốn nói là "Độ phức tạp của thuật toán theo phân tích trường hợp 1 tệ nhất là O(f(n))" - có nghĩa là - nó chia tỷ lệ "tương tự" (hoặc chính thức, không tệ hơn) hàm f(n).

Tại sao chúng ta quan tâm đến ràng buộc tiệm cận của một thuật toán?

Vâng, có nhiều lý do cho nó, nhưng tôi tin rằng quan trọng nhất trong số đó là:

  1. Khó hơn nhiều để xác định hàm phức tạp chính xác , do đó chúng tôi "thỏa hiệp" với các ký hiệu big-O / big-Theta, đủ thông tin về mặt lý thuyết.
  2. Số lượng chính xác của ops cũng phụ thuộc vào nền tảng . Ví dụ: nếu chúng ta có một vectơ (danh sách) gồm 16 số. Nó sẽ mất bao nhiêu ops? Câu trả lơi con phụ thuộc vao nhiêu thư. Một số CPU cho phép bổ sung véc tơ, trong khi các loại khác thì không, vì vậy câu trả lời khác nhau giữa các cài đặt khác nhau và các máy khác nhau, đây là một thuộc tính không mong muốn. Tuy nhiên, ký hiệu big-O không đổi giữa các máy và việc triển khai.

Để chứng minh vấn đề này, hãy xem các biểu đồ sau: nhập mô tả hình ảnh ở đây

Rõ ràng f(n) = 2*nlà "tệ" hơn f(n) = n. Nhưng sự khác biệt không hoàn toàn quyết liệt như từ chức năng khác. Chúng ta có thể thấy rằng f(n)=lognnhanh chóng nhận được thấp hơn nhiều so với các chức năng khác, và f(n) = n^2nhanh chóng trở nên cao hơn nhiều so với các chức năng khác.
Vì vậy - vì những lý do trên, chúng tôi "bỏ qua" các yếu tố không đổi (2 * trong ví dụ về biểu đồ) và chỉ lấy ký hiệu big-O.

Trong ví dụ trên, f(n)=n, f(n)=2*ncả hai sẽ ở trong O(n)và trong Omega(n)- và do đó cũng sẽ ở trong Theta(n).
Mặt khác - f(n)=lognsẽ ở trong O(n)(nó "tốt hơn" f(n)=n), nhưng sẽ KHÔNG ở trong Omega(n)- và do đó cũng sẽ KHÔNG ở trong Theta(n).
Về mặt đối xứng, f(n)=n^2sẽ ở trong Omega(n), nhưng KHÔNG ở O(n), và do đó - cũng KHÔNG Theta(n).


1 Thông thường, mặc dù không phải lúc nào cũng vậy. khi lớp phân tích (tệ nhất, trung bình và tốt nhất) bị thiếu, chúng tôi thực sự có nghĩa là trường hợp xấu nhất.


4
@krishnaChandra: f(n) = n^2mạnh hơn về mặt không triệu chứng n, và do đó là Omega (n). Tuy nhiên, nó không phải là O (n) (vì đối với các ngiá trị lớn , nó sẽ lớn hơn c*nđối với tất cả n). Vì chúng ta đã nói Theta (n) là giao điểm của O (n) và Omega (n), vì nó không phải là O (n), nên nó cũng không thể là Theta (n).
amit

8
Thật tuyệt khi thấy ai đó giải thích cách ký hiệu chữ O lớn không liên quan đến thời gian chạy tốt nhất / tồi tệ nhất của thuật toán. Có rất nhiều trang web xuất hiện khi tôi google chủ đề nói rằng O (T (n)) có nghĩa là thời gian chạy tệ hơn.
Will Sewell

1
@almel Đó là 2 * n (2n, hai lần n) chứ không phải 2 ^ n
amit

5
@VishalK 1. Big O là giới hạn trênn có xu hướng vô cùng. 2. Omega là thấp hơn bị ràng buộc như n có xu hướng đến vô cùng. 3. Theta là cả giới hạn trên và dưới khi n có xu hướng vô cùng. Lưu ý rằng tất cả các giới hạn chỉ có giá trị "vì n có xu hướng vô cùng", bởi vì các giới hạn không giữ cho các giá trị thấp của n (nhỏ hơn n0 ). Các giới hạn giữ cho tất cả nn0 , nhưng không dưới n0 khi các điều khoản bậc thấp hơn trở thành ưu thế.
Bain

1
@hey_you Đọc lại câu trả lời. O lớn, Theta, Omega là cho các chức năng, không phải là thuật toán. Hợp nhất loại là trường hợp xấu nhất Omega (n). Đây cũng là trường hợp tốt nhất của O (n ^ 2). Đó cũng là trường hợp xấu nhất của Theta (nlogn). Về cơ bản, đối với mỗi phân tích (tệ nhất / tốt nhất / trung bình / ...) bạn có một hàm phức tạp T_best(n), T_worst(n), T_average(n). Chúng không phải giống hệt nhau (và hầu hết, chúng không phải). O / Omega / Theta có thể được áp dụng cho bất kỳ ai trong số họ một cách độc lập.
amit

14

Theta (n): Một hàm f(n)thuộc về Theta(g(n)), nếu tồn tại các hằng số dương c1c2như vậy f(n)có thể được kẹp giữa c1(g(n))c2(g(n)). tức là nó cho cả giới hạn trên và cũng như giới hạn dưới.

Theta (g (n)) = {f (n): tồn tại hằng số dương c1, c2 và n1 sao cho 0 <= c1 (g (n)) <= f (n) <= c2 (g (n)) với mọi n> = n1}

khi chúng ta nói f(n)=c2(g(n))hoặc f(n)=c1(g(n))nó đại diện cho ràng buộc chặt chẽ không có triệu chứng.

O (n): Nó chỉ cung cấp giới hạn trên (có thể hoặc không chặt chẽ)

O (g (n)) = {f (n): tồn tại hằng số dương c và n1 sao cho 0 <= f (n) <= cg (n) với mọi n> = n1}

ví dụ : Giới hạn 2*(n^2) = O(n^2)chặt chẽ không có triệu chứng, trong khi ràng buộc 2*n = O(n^2)không chặt chẽ về mặt tiệm cận.

o (n): Nó chỉ cung cấp giới hạn trên (không bao giờ giới hạn chặt chẽ)

sự khác biệt đáng chú ý giữa O (n) & o (n) là f (n) nhỏ hơn cg (n) với mọi n> = n1 nhưng không bằng như trong O (n).

ví dụ : 2*n = o(n^2), nhưng2*(n^2) != o(n^2)


1
Bạn đã không đề cập đến Omega lớn, trong đó đề cập đến giới hạn dưới. Nếu không, câu trả lời đầu tiên rất tốt đẹp và chào mừng!
bohney

1
tôi thích cách anh đóng khung định nghĩa của Theta (n). Nâng cao!
user720694

4

Tôi hy vọng đây là những gì bạn có thể muốn tìm thấy trong CLRS cổ điển (trang 66): nhập mô tả hình ảnh ở đây


1

Ký hiệu Big Theta:

Không có gì để làm phiền bạn thân !!

Nếu chúng ta có hàm có giá trị dương f (n) và g (n) lấy đối số có giá trị dương n thì (g (n)) được định nghĩa là {f (n): tồn tại các hằng số c1, c2 và n1 cho tất cả n> = n1}

trong đó c1 g (n) <= f (n) <= c2 g (n)

Hãy lấy một ví dụ:

hãy để f (n) =

g (n) =

c1 = 5 và c2 = 8 và n1 = 1

Trong số tất cả các ký hiệu, ký hiệu cho thấy trực giác tốt nhất về tốc độ tăng trưởng của hàm vì nó mang lại cho chúng ta một ràng buộc chặt chẽ không giống như big-oh và big -omega mang lại giới hạn trên và dưới tương ứng.

Cho chúng ta biết rằng g (n) càng gần f (n), tốc độ tăng trưởng của g (n) càng gần với tốc độ tăng trưởng của f (n) càng tốt.

xem hình ảnh để có trực giác tốt hơn


0

Đầu tiên của lý thuyết

  1. O lớn = Giới hạn trên O (n)

  2. Theta = Chức năng đặt hàng - theta (n)

  3. Omega = Ký hiệu Q (Giới hạn dưới) Q (n)

Tại sao mọi người rất bối rối?

Trong nhiều Blog & Sách Cách tuyên bố này được nhấn mạnh là Thích

"Đây là Big O (n ^ 3)", v.v.

và mọi người thường nhầm lẫn như thời tiết

O (n) == theta (n) == Q (n)

Nhưng điều đáng ghi nhớ là chúng chỉ là chức năng toán học với tên O, Theta & Omega

vì vậy chúng có cùng Công thức đa thức,

Để cho,

f (n) = 2n4 + 100n2 + 10n + 50 rồi,

g (n) = n4, vì vậy g (n) là Hàm lấy chức năng làm Đầu vào và trả về Biến với Biggerst Power,

Tương tự f (n) & g (n) cho Dưới tất cả các giải thích

Big O - Chức năng (Cung cấp giới hạn trên)

Lớn O (n4) = 3n4, vì 3n4> 2n4

3n4 là giá trị của Big O (n4) Giống như f (x) = 3x

n4 đang đóng vai trò của x ở đây,

Thay thế n4 bằng x'so, Big O (x ') = 2x', Bây giờ cả hai chúng tôi đều hạnh phúc Khái niệm chung là

Vậy 0 ≤ f (n) O (x ')

O (x ') = cg (n) = 3n4

Đặt giá trị,

0 ≤ 2n4 + 100n2 + 10n + 50 3n4

3n4 là giới hạn trên của chúng tôi

Theta (n) Cung cấp giới hạn dưới

Theta (n4) = cg (n) = 2n4 Vì 2n4 Example Ví dụ của chúng tôi f (n)

2n4 là Giá trị của Theta (n4)

vì vậy, 0 ≤ cg (n) f (n)

0 ≤ 2n4 ≤ 2n4 + 100n2 + 10n + 50

2n4 là giới hạn dưới của chúng tôi

Omega n - Chức năng đặt hàng

Điều này được tính toán để tìm ra rằng giới hạn thời tiết thấp hơn tương tự như giới hạn trên,

Trường hợp 1). Giới hạn trên tương tự như giới hạn dưới

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

Trường hợp 2). nếu giới hạn trên không tương tự như giới hạn dưới

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

Hy vọng điều này giải thích !!

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.