Говорячи, як я можу сказати, що порядок складності часу алгоритму становить O (N log N)?


22

Який термін можна використовувати для опису чогось із складністю O (N log N)?

Наприклад:

  • O (1): Постійний

  • O (лог N): логарифмічний

  • O (N): лінійний

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

  • O (N 2 ): квадратична

  • O (N 3 ): кубічний


5
У мене часто тут широкий термін "квазілінійний", щоб означати, O(n · f(n))де f(n) << n. Але це також відповідає таким речам, як O(n · log log n)і O(n α(n))де α(n)обернена функція Акермана.
Бакуріу


34
"Oh enn log enn", ймовірно, досить хороший.
користувач253751

Відповіді:


60

"N log N" такий хороший, як ви збираєтеся отримати, і його повинні добре розуміти професійні програмісти. Ви не можете розраховувати, що знайдеться одне слово для опису кожного класу складності, який існує.


6
"Не можу розраховувати, що знайдеться одне слово для опису кожного класу складності" - звичайно, ні. Але 𝓞 ( n ⋅ log n ) - такий важливий клас, що він заслуговує на своє ім'я, IMO; і, як сказав Стів Джессоп, лінеанітика вже досить поширена.
Ліворуч близько

@leftaroundabout Це дійсно досить поширене, що ви можете стверджувати, що це заслуговує на ім'я. Але "n log n" достатньо короткий, щоб вимовити (лише три склади), що він добре працює як ім'я. Для порівняння "Логарифмічний" - це чотири склади. Це цікавіше, коли ви переходите до зовнішніх алгоритмів, де більшість алгоритмів "n log n" отримують складність $ N log_B (N / B) $, це, безумовно, клас складності, гідний коротшого імені.
kasperd

10
Як студент магістра з інформатики, я чув "enn log enn" протягом усього навчання в коледжі. Я ніколи не чув "лінійноактичного" і не зрозумів би, що це означає спочатку.
Кевін - Відновити Моніку

@Kevin: Логарифміка - це чотири склади, але "log-enn" - лише два. Аналогічно, O (N ^ 2) є "enn-квадратами", а не "квадратичним". Я припускаю, що "кубічний" має менше фонем, ніж "enn-cubed", але я думаю, що останній термін все-таки буде більш поширеним.
supercat

51

Існує саме термін лінійнотимічний жаргон, що означає саме це.

Я не вірю, що всі програмісти його загально розуміють, тому, якщо ви не будете обережні, то це затьмарить більше, ніж повідомляє. Особисто я його зазвичай не використовую, і якщо б це зробив, то, мабуть, визначив би це при першому використанні, наприклад, "ця стаття розглядає лінійно- O(N log N)алгоритмічні ( ) алгоритми".


11
Ніколи навіть не знав, що існує!
Девід каже, що повернеться до Моніки

12

Іноді його називають "логалінійним", хоча це слово насправді означає щось інше. Я б просто дотримувався "N log N", як підказує відповідь @ Філіпа .


1
Яке альтернативне значення для log-linear? Якби я хотів, щоб ім’я було відмінне від "N log N", я б використовував лінійний журнал.
Джонатан Леффлер

2
@JonathanLeffler: Я припускаю, що en.wikipedia.org/wiki/Log-linear_analysis іноді пишеться без дефісу. Звичайно, при правильному просторі імен ви можете із задоволенням використовувати те саме слово для класу складності.
Стів Джессоп

@SteveJessop: Ось це, безумовно, з’явилося за допомогою пошуку в Google. Я не впевнений, чи бажаю я прийняти комбо Google / Wikipedia як авторитетне, хоча я не сумніваюся, що лінійний аналіз є таким, як описано.
Джонатан Леффлер

1
@JonathanLeffler: також може означати те, що я би назвав сюжетом lin-log або log-lin (або, тому що я лінивий, насправді я часто називав їх графіком журналу як відмінним від журналу журналу). Ми, можливо, запитаємо, яке альтернативне значення має ця відповідь :-)
Стів Джессоп

2

Оскільки фактор log nросте повільно, якісний опис O(n log n)був би "майже лінійним". Залежно від вашої аудиторії, клас O(n log n)алгоритмів може бути добре відомий, як, наприклад, це стосується швидкого сортування nпредметів за допомогою порівнянь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.