Який термін можна використовувати для опису чогось із складністю O (N log N)?
Наприклад:
O (1): Постійний
O (лог N): логарифмічний
O (N): лінійний
O (N log N): ??????
O (N 2 ): квадратична
O (N 3 ): кубічний
Який термін можна використовувати для опису чогось із складністю O (N log N)?
Наприклад:
O (1): Постійний
O (лог N): логарифмічний
O (N): лінійний
O (N log N): ??????
O (N 2 ): квадратична
O (N 3 ): кубічний
Відповіді:
"N log N" такий хороший, як ви збираєтеся отримати, і його повинні добре розуміти професійні програмісти. Ви не можете розраховувати, що знайдеться одне слово для опису кожного класу складності, який існує.
Існує саме термін лінійнотимічний жаргон, що означає саме це.
Я не вірю, що всі програмісти його загально розуміють, тому, якщо ви не будете обережні, то це затьмарить більше, ніж повідомляє. Особисто я його зазвичай не використовую, і якщо б це зробив, то, мабуть, визначив би це при першому використанні, наприклад, "ця стаття розглядає лінійно- O(N log N)
алгоритмічні ( ) алгоритми".
Іноді його називають "логалінійним", хоча це слово насправді означає щось інше. Я б просто дотримувався "N log N", як підказує відповідь @ Філіпа .
Оскільки фактор log n
росте повільно, якісний опис O(n log n)
був би "майже лінійним". Залежно від вашої аудиторії, клас O(n log n)
алгоритмів може бути добре відомий, як, наприклад, це стосується швидкого сортування n
предметів за допомогою порівнянь.
O(n · f(n))
деf(n) << n
. Але це також відповідає таким речам, якO(n · log log n)
іO(n α(n))
деα(n)
обернена функція Акермана.