Các hàm trong O (n) cũng không nằm trong o (n) đều nằm trong (n)?


7

Một trong những bài giảng của tôi đưa ra tuyên bố sau:

(f(n)=O(n)f(n)o(n))f(n)=Θ(n)

Có thể tôi thiếu một cái gì đó trong các định nghĩa, nhưng ví dụ sắp xếp bong bóng là chứ không phải nhưng nó cũng không phải là vì đây là thời gian chạy tốt nhất .O(n2)o(n2)θ(n2)Ω(n)

Tôi đang thiếu gì ở đây?

Câu trả lời:


10

Những gì bạn đang thiếu là một điểm rất quan trọng: Một thuật toán không bao giờ là của bất cứ thứ gì, vì nó thường không phải là một hàm có giá trị thực.O()

Khi chúng ta nói rằng sắp xếp bong bóng là , điều chúng ta muốn nói là trong hàm , đại diện cho thời gian chạy tồi tệ nhất của sắp xếp bong bóng, là .O(n2)fO(n2)

Trong trường hợp này, hàm này thực sự là , vì trong trường hợp xấu nhất, thời gian chạy được giới hạn từ bên dưới và từ phía trên bởi cho các hằng số có liên quan .θ(n2)cn2c

Nói chính xác hơn, hàm mà chúng ta gọi là thời gian chạy trường hợp xấu nhất của thuật toán được xác định bởi Và đây là chức năng mà chúng tôi phân tích trong thời gian chạy trường hợp xấu nhất.A

fA(n)=maxx:|x|=n{runtime of A on input x}

Tất nhiên, thời gian chạy tốt nhất cũng có thể được phân tích. Như bạn đề xuất, thời gian chạy trường hợp tốt nhất của sắp xếp bong bóng không phải là , mà là .θ(n2)θ(n)


Vậy khi chúng ta áp dụng ký hiệu này, chúng ta luôn áp dụng nó cho trường hợp xấu nhất hoặc trường hợp tốt nhất một cách riêng biệt? Cụ thể, chúng ta không bao giờ nói về việc giới hạn thời gian chạy nói chung , nhưng thay vào đó chúng ta thường nói về việc ràng buộc thời gian chạy trường hợp xấu nhất?
Robert S. Barnes

4
Chúng tôi áp dụng các ký hiệu này cho các chức năng . Bạn có thể áp dụng chúng cho bất kỳ chức năng nào bạn muốn, bao gồm thời gian chạy tốt nhất, tệ nhất và trung bình. Nhiều lần chúng ta quan tâm đến thời gian chạy tốt nhất, và sau đó chúng ta cũng có thể phân tích nó. Nếu bạn muốn đưa ra một ràng buộc về thời gian chạy "nói chung" như bạn nói, thì giới hạn trên của bạn là trường hợp xấu nhất trong thời gian chạy và giới hạn dưới là trường hợp tốt nhất. Thông thường, trong các khóa học đại học, bạn sẽ quan tâm đến thời gian chạy tệ nhất (đôi khi là trung bình).
Shaull

Câu trả lời này sẽ tốt nếu tuyên bố trong câu hỏi là đúng.
Raphael

1
Thật. Tuy nhiên, khá rõ ràng rằng điều khiến OP bối rối không phải là sự thật, mà là vấn đề thời gian chạy tệ nhất / tốt nhất.
Shaull

14

Nói với giảng viên là họ sai. Lấy hàm Hàm này là nhưng không phải hay .

f(n)={nn is even,1n is odd.
O(n)o(n)Θ(n)

Dưới đây là một ví dụ đơn điệu, có thể thuyết phục hơn:

g(n)=expexplnlnn.

1
Tôi đã xem đây là một cạm bẫy mặc định trong Landau-tiệm cận và mong muốn có một sự thay thế tốt đẹp mang lại các mối quan hệ mong muốn.
Raphael

Các hàm số mũ logarit (các hàm được xây dựng từ , , các hoạt động và hằng số trường) được sắp xếp tuyến tính theo thứ tự (xem "Đơn đặt hàng vô cực" của Hardy), vì vậy đối với các hàm này, các vấn đề như vậy không thể xảy ra Do đó, hàm sàn không phải là logarit. explogf=o(g)
Yuval Filmus
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.