Tại sao không phải


8

Trong CLRS (trên trang 49-50), ý nghĩa của tuyên bố sau là gì:

Σi=1nO(i) chỉ là một hàm ẩn danh duy nhất (của ), nhưng không giống với O (1) + O (2) + \ cdots + O (n) , mà không thực sự có một sự giải thích. "iO(1)+O(2)++O(n)


Tôi đã cố gắng xây dựng câu hỏi của bạn chính xác hơn; cũng lưu ý rằng chúng tôi có hỗ trợ latex ở đây để bạn có thể viết toán được định dạng độc đáo. Tôi khuyến khích bạn cụ thể hơn: chính xác điều gì là khó hiểu? Phần nào gây rắc rối? (Có lẽ sau đó bạn cũng có thể chỉnh sửa tiêu đề của câu hỏi).
Juho


1
Có thể cho rằng, tổng mở rộng cũng không có giải thích; bạn nên viết để bắt đầu. O()
Raphael

1
Bất cứ ai cũng có thể giải thích ý nghĩa dự định của ? Tổng hàm của thứ tự " "? Điều này có ý nghĩa rất nhỏ, vì . Tổng các hàm được lập chỉ mục bởi và một số thứ tự ?? n i O ( i ) = O ( 1 ) n ii=1nO(i)niO(i)=O(1)ni
Yves Daoust

Câu trả lời:


12

Vì , nên gợi ý rằng ... nhưng điều này không thực sự hợp lệ Lý do là có thể có một hằng số khác nhau cho mỗi thuật ngữ trong tổng.O ( 1 ) + O ( 2 ) + + O ( n ) = O ( n 2 )1+2++n=O(n2)O(1)+O(2)++O(n)=O(n2)

Một ví dụ

Để tôi lấy một ví dụ. Xét các tổng , , , , v.v. Lưu ý rằng , , , , v.v. Tổng. Do đó, sẽ hợp lý khi viết dưới dạng . Vậy chúng ta có thể kết luận rằng không? Không. Trong thực tế, , vì vậy . S ( 2 ) = 1 2 + 2 2 S ( 3 ) = 1 2 + 2 2 + 3 2 S ( 4 ) = 1 2 + 2 2 + 3 2 + 4 2 1 2O ( 1 ) 2 2O ( 2 ) 3S(1)=12S(2)=12+22S(3)=12+22+32S(4)=12+22+32+4212O(1)22O(2)4 2O ( 4 ) S ( j ) = 1 2 + + j 2 S ( j ) = O ( 1 ) + + O ( j ) S ( j ) = O ( j 2 ) S ( n ) = n ( n + 132O(3)42O(4)S(j)=12++j2S(j)=O(1)++O(j)S(j)=O(j2)S ( n ) = Θ ( n 3 )S(n)=n(n+1)(2n+1)/6S(n)=Θ(n3)

Nếu điều đó không có ích, hãy thử phát triển toán học chính xác hơn sau đây:

Chính thức hóa

Hãy nhớ rằng cách giải thích của là một tập hợp các hàm không âm (cụ thể là tập hợp các hàm sao cho tồn tại các hằng số sao cho với mọi ).f ( n ) f ( n ) c 0 , d 0 f ( n ) c n 2 n dO(n2)f(n)f(n)c0,d0f(n)cn2nd

Gần nhất chúng ta có thể đi đến một cách giải thích là tập hợp các hàm có dạng sao cho , , ..., .f 1 ( n ) + f 2 ( n ) + + f n ( n ) f 1 ( n ) O ( 1 ) f 2 ( n ) O ( 2 ) f n ( n ) O(1)+O(2)++O(n)f1(n)+f2(n)++fn(n)f1(n)O(1)f2(n)O(2)fn(n)O(n)

Nhưng bây giờ các hằng số cho mỗi có thể khác nhau. Do đó, mỗi là một hàm không âm sao cho tồn tại các hằng số với cho tất cả .f i f i c i0 , d i0 f i ( n ) c ii n d ifififici0,di0fi(n)ciindi

Bây giờ, với điều này, chúng ta có thể nói gì về ? Không có nhiều hữu ích. Chúng tôi biết rằng tồn tại hằng số sao cho cho tất cả . Bây giờ chúng ta có thể nói gì về số tiền này? Chà, câu trả lời là chúng ta không thể nói gì cả. Nó có thể lớn tùy ý. Thật hấp dẫn khi để và nói rằng ... nhưng điều này không thực sự chính xác, vì chúng ta cần một giá trị không đổi duy nhất của hoạt động cho tất cả và giá trịd = max ( d 1 , d 2 , Trần , d n ) g ( n ) c 11 + c 22 + + c nn ng(n)=f1(n)+f2(n)++fn(n)d=max(d1,d2,,dn)g(n)c11+c22++cnnc = max ( c 1 , c 2 , ... , c n ) g ( n ) c ( 1 + 2 + + n ) c n 2 = O ( n 2 ) c n max ( c 1 , c 2 , ... , c n ) nndc=max(c1,c2,,cn)g(n)c(1+2++n)cn2=O(n2)cnmax(c1,c2,,cn) là hàm của , không phải là hằng số.n

Vì vậy, có thể không có bất kỳ hằng số sao cho ; có thể không có bất kỳ hằng số sao cho . Không có gì đảm bảo rằng .g ( n ) c ( 1 + 2 + + n ) c g ( n ) c n 2 g ( n ) O ( n 2 )cg(n)c(1+2++n)cg(n)cn2g(n)O(n2)

Để đọc thêm

Xem https://math.stackexchange.com/q/86076/14578các điều khoản Sums của Landau được xem xét lại cho các câu hỏi khác liên quan đến vấn đề chung này.


2
TLDR: bạn muốn tất cả chúng đều giống nhau nhưng chúng không chính thức. fO(_)
Raphael

1

Lý do khiến nhận xét của CLRS khó hiểu là về mặt kỹ thuật, được định nghĩa là . Điều thực sự xảy ra là CLRS đang lạm dụng ký hiệu vì đơn giản:O ( 1 ) + O ( 2 ) + ... O ( n )i=1nO(i)O(1)+O(2)+O(n)

  • f ( n ) = 1 f ( n ) = 1 / n f ( n ) = n 1 / nO(1) đại diện cho một tập hợp các hàm. Nó bao gồm, ví dụ, , và .f(n)=1f(n)=1/nf(n)=n1/n
  • Khi bạn viết bạn đang về mặt kỹ thuật thêm hai bộ và với một sumset hoạt động. Khi điều này được thực hiện với nhiều hơn một số thuật ngữ không đổi, nó có thể dẫn đến các hành vi không mong muốn, vì DW giải thích rõ ràng trong một câu trả lời khác.O ( 1 ) O ( 2 )O(1)+O(2)O(1)O(2)

Thay vào đó, CLRS muốn bạn diễn giải là trong đó hàm chung . Ví dụ: họ sẽ viết rằng là hoặc .Σ n i = 1 f ( i ) f ( i ) O ( i ) Σ n i = 1 3 i - 5 Σ n i = 1 O ( i ) O ( n 2 )i=1nO(i)i=1nf(i)f(i)O(i)i=1n3i5i=1nO(i)O(n2)


Giải thích này không hoàn toàn đúng. Không có gì sai khi thêm . Điều đó được xác định rõ. là một tập hợp các hàm, là một tập hợp các hàm và khi là các tập hợp các hàm, thường được hiểu là tập hợp các hàm . Đây những gì thường được dự định khi chúng ta thêm hai ký hiệu big-Oh và mọi thứ đều hoạt động tốt miễn là bạn chỉ thêm hai (hoặc một số lượng không đổi) các ký hiệu Oh lớn. Trường hợp bạn gặp rắc rối là khi số lượng bổ sung không phải là một hằng số, như được giải thích trong câu trả lời của tôi. O(1)+O(2)O(1)O(2)S,TS+T{f(n)+g(n):f(n)S,g(n)T}
DW

Tôi đồng ý rằng đây là định nghĩa chung về bổ sung tập hợp và nó được xác định rõ, mặc dù tôi không nghĩ rằng đó là những gì có nghĩa trong sử dụng phổ biến. Như bạn nói chính xác trong câu trả lời của bạn ở trên, việc sử dụng tập hợp bổ sung vào nhiều hơn một số thuật ngữ không đổi dẫn đến các vấn đề.
Ari Trạchtenberg

Tôi thích định nghĩa O (f (n)) là một phần tử ẩn danh của một tập hợp các hàm nhất định, thay vì chính nó. Sau đó có nghĩa là " cho một số hàm sao cho ...", trong khi có nghĩa là " cho một số chức năng sao cho ... ". Hoàn toàn không giống nhau. iO(i)if(i)fO(1)+O(2)++O(n)f1(1)+f2(2)++fn(n)f1,f2,,fn
JeffE
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.