Який термін можна використовувати для опису чогось із складністю 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)обернена функція Акермана.