Các chức năng luôn luôn có thể so sánh không đối xứng?


15

Khi chúng ta so sánh độ phức tạp của hai thuật toán, thường xảy ra trường hợp hoặc (có thể cả hai), trong đó và là thời gian chạy (ví dụ) của hai thuật toán.f(n)=O(g(n))g(n)=O(f(n))fg

Luôn luôn là trường hợp này sao? Nghĩa là, có ít nhất một trong các mối quan hệ và luôn giữ, đó là cho các hàm tổng quát , ? Nếu không, chúng ta phải đưa ra giả định nào, và (tại sao) có ổn không khi chúng ta nói về thời gian chạy thuật toán?g ( n ) = O ( f ( n ) ) f gf(n)=O(g(n))g(n)=O(f(n))fg

Câu trả lời:


21

Không phải mọi cặp chức năng có thể so sánh với Ôi() ký hiệu; xem xét các hàm f(n)= =n

g(n)={1if n is odd, n2if n is even.
Hơn nữa, các hàm như g(n) thực sự phát sinh khi chạy các thuật toán. Xem xét thuật toán brute-force rõ ràng để xác định xem một số nguyên cho có phải là số nguyên ntố hay không:
IsPrime(n):
  for i ← 2 to (n-1)
     if i·⌊n/i⌋ = n
        return False
  return True

Thuật toán này đòi hỏi phép tính số học khi n là chẵn O ( Θ(1)nhoạt động khinlà composite, nhưngΘ(n)hoạt động khinlà số nguyên tố. Như vậy, chính thức, thuật toán này làkhông thể so sánhvới một thuật toán sử dụngO(n)nΘ(n)n phép toán số học chomọin.n n

Hầu hết thời gian khi chúng tôi phân tích các thuật toán, chúng tôi chỉ muốn một giới hạn trên tiệm cận có dạng cho một số hàm tương đối đơn giản f . Ví dụ, hầu hết các sách giáo khoa sẽ chỉ đơn giản (và chính xác) báo cáo chạy trong các phép toán số học O ( n ) . Các hàm ràng buộc trên điển hình là các sản phẩm của hàm mũ, đa thức và logarit (mặc dù các quái thú kỳ lạ hơn như giai thừa và logarit lặp đi lặp lại cũng thỉnh thoảng xuất hiện). Không khó để chứng minh rằng bất kỳ hai chức năng như vậy là tương đương nhau.O(f(n))fIsPrime(n)O(n)

Xem thêm câu hỏi MathOverflow này .


7

Từ wikipedia, định nghĩa của ký hiệu O lớn:

nếu và chỉ khi có hằng số dương M sao cho với tất cả các giá trị đủ lớn của , f ( x ) nhiều nhất là M nhân với g ( x ) trong giá trị tuyệt đối. Đó là, f ( x ) O ( g ( x ) ) khi và chỉ khi tồn tại một số thực dương M và một số thực x 0xf(x)g(x)f(x)O(g(x))Mx0

|f(x)|<=M|g(x)|for allx>x0

Điều gì xảy ra cho các hàm không hội tụ (đến một hằng số cũng như vô hạn)?

Nhìn vào các hàm g ( x ) = 10f(x)=|xsin(x)|g(x)=10

với mỗi , có một số x > x 0 , sao cho x = k π , do đó f ( x ) = 0 - vì vậy với mỗi M - M f ( x ) > g ( x ) sẽ sinh ra sai và g ( x )x0x>x0x=kπf(x)=0MMf(x)>g(x)g(x)O(f(x))

Tuy nhiên, thật dễ dàng để thấy rằng không bị giới hạn bởi bất kỳ liên tục là tốt, do đó cho mỗi M , x 0 , có một số x > x 0f ( x ) < M g ( x ) cũng sẽ mang lại sai sự thật, và f ( x ) O ( g ( x ) )|xsin(x)|Mx0x>x0f(x)<Mg(x)f(x)O(g(x))

Lưu ý: đối với định nghĩa nếu O lớn cho phép chênh lệch không đổi tối đa giữa g ( x ) , ý tưởng tương tự sẽ được áp dụng với g ( x ) = log ( x )Mf(x)g(x)g(x)=log(x)


6

Đây là một cặp chức năng đơn điệu không thể so sánh được với nhau. Điều này có liên quan vì hầu hết các phức tạp phát sinh trong thực tế là trên thực tế là đơn điệu.

f(x)=Γ(x+1)=x!
g(x)=Γ(x1/2+3/2)

Γ


4

Lexp(2logx+loglogx)/x2f,gLf= =o(g), f= =ω(g), f/gcó xu hướng không đổi. Xem trang 18 của cuốn sách "Đơn đặt hàng vô cực".

Kết quả cuối cùng là bất kỳ hai hàm "đơn giản" nào xảy ra trong phân tích thuật toán đều có thể so sánh được. Ở đây "đơn giản" có nghĩa là không có định nghĩa theo các trường hợp (ngoại trừ nhiều trường hợp cơ bản) và không có chức năng đáng ngạc nhiên nào xuất hiện, chẳng hạn như hàm Ackermann nghịch đảo đôi khi chỉ ra thời gian chạy.


Đẹp! Tuy nhiên, điều đáng chú ý là các yếu tố định kỳ xảy ra thường xuyên trong phân tích trường hợp trung bình (của thuật toán d & c). Người mà tôi biết bị ràng buộc từ cả hai phía bởi các hằng số, vì vậy họ không bị tổn thương so sánh tiệm cận.
Raphael
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.