Khi nói, làm thế nào tôi có thể nói rằng thứ tự phức tạp thời gian của một thuật toán là O (N log N)?


22

Thuật ngữ nào tôi có thể sử dụng để mô tả một cái gì đó với độ phức tạp O (N log N)?

Ví dụ:

  • O (1): Không đổi

  • O (log N): logarit

  • O (N): Tuyến tính

  • O (N log N): ??????

  • O (N 2 ): bậc hai

  • O (N 3 ): Hình khối


5
Tôi thường ở đây thuật ngữ rộng "bán tuyến tính" có nghĩa là O(n · f(n))ở đâu f(n) << n. Nhưng điều này cũng phù hợp với những thứ như O(n · log log n)O(n α(n))nơi α(n)là nghịch đảo của chức năng Ackermann.
Bakuriu


34
"Oh enn log enn" có lẽ là đủ tốt.
dùng253751

Câu trả lời:


60

"N log N" tốt như bạn sẽ nhận được, và nên được các lập trình viên chuyên nghiệp hiểu rõ. Bạn không thể mong đợi có một từ duy nhất để mô tả mọi lớp phức tạp tồn tại.


6
Không thể hy vọng sẽ có một từ duy nhất để mô tả mọi lớp phức tạp. Chắc chắn là không. Nhưng ( n log n ) là một lớp quan trọng đến mức nó xứng đáng với một cái tên của riêng mình, IMO; và như đã nói của Steve Jessop, linearithmic đã khá phổ biến rồi.
rẽ trái

@leftaroundabout Nó thực sự đủ phổ biến để bạn có thể tranh luận, rằng nó xứng đáng với một cái tên. Nhưng "n log n" đủ ngắn để phát âm (chỉ có ba âm tiết) mà nó hoạt động tốt như một cái tên. Để so sánh "Logarit" là bốn âm tiết. Thật thú vị hơn khi bạn có được các thuật toán bên ngoài trong đó hầu hết các thuật toán "n log n" có độ phức tạp $ N log_B (N / B) $, đó chắc chắn sẽ là một lớp phức tạp xứng đáng với tên ngắn hơn.
kasperd

10
Là một sinh viên thạc sĩ khoa học máy tính, tôi đã nghe "enn log enn" trong suốt thời gian học đại học. Tôi chưa bao giờ nghe "linearithmic" và ban đầu sẽ không hiểu ý nghĩa của nó.
Kevin - Tái lập Monica

@Kevin: Logarit là bốn âm tiết, nhưng "log-enn" chỉ có hai. Tương tự, O (N ^ 2) là "enn-squared", không phải "bậc hai". Tôi cho rằng "khối" có ít âm vị hơn "enn-cubed", nhưng tôi nghĩ thuật ngữ sau vẫn sẽ phổ biến hơn.
supercat

51

Có một thuật ngữ thuật ngữ tuyến tính có nghĩa chính xác điều này.

Tôi không tin rằng tất cả các lập trình viên đều hiểu nó, vì vậy nếu bạn không cẩn thận thì nó sẽ che khuất nhiều hơn những gì nó thông báo. Cá nhân tôi thường không sử dụng nó, và nếu tôi đã làm thì có lẽ tôi sẽ định nghĩa nó trong lần sử dụng đầu tiên, ví dụ "bài viết này xem xét các O(N log N)thuật toán linearithmic ( )".


11
Thậm chí không bao giờ biết rằng đã tồn tại!
David nói Phục hồi

12

Đôi khi nó được gọi là "loglinear", mặc dù từ đó thực sự có nghĩa khác. Tuy nhiên, tôi sẽ chỉ sử dụng "N log N", như câu trả lời của @ Philip cho thấy.


1
Ý nghĩa thay thế cho log-linear là gì? Nếu tôi muốn một tên khác ngoài 'N log N', log-linear là thuật ngữ tôi sử dụng.
Jonathan Leffler

2
@JonathanLeffler: Tôi giả sử en.wikipedia.org/wiki/Log-linear_analysis đôi khi được đánh vần mà không có dấu gạch nối. Tất nhiên với không gian tên thích hợp, bạn có thể vui vẻ sử dụng cùng một từ cho một lớp phức tạp.
Steve Jessop

@SteveJessop: Đó chắc chắn là những gì đã xuất hiện thông qua một tìm kiếm Google. Tôi không chắc liệu tôi có sẵn sàng chấp nhận kết hợp Google / Wikipedia là có thẩm quyền hay không, mặc dù tôi không nghi ngờ gì về việc phân tích log-linear là như mô tả.
Jonathan Leffler

1
@JonathanLeffler: cũng có thể có nghĩa là cái mà tôi gọi là một biểu đồ lin-log hoặc log-lin (hoặc, vì tôi lười biếng, thực ra tôi thường gọi chúng là một biểu đồ nhật ký khác với một bản ghi nhật ký). Có lẽ chúng ta có thể hỏi, ý nghĩa thay thế câu trả lời này có trong tâm trí :-)
Steve Jessop

2

Bởi vì yếu tố log ntăng chậm, một mô tả định tính O(n log n)sẽ là "gần như tuyến tính". Tùy thuộc vào đối tượng của bạn, lớp O(n log n)thuật toán có thể được biết đến, ví dụ như đây là trường hợp sắp xếp nhanh trên ncác mục bằng cách so sánh.

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.