Як називається клас функцій, описаний O (n log n)?


40

У "Big O" загальні позначення мають загальні назви (замість того, щоб говорити "О, якийсь постійний фактор"):

O (1) - "Постійний"

O (log n) - "логарифмічний"

O (n) - "лінійний"

O (n ^ 2) - це "квадратичний"

O (n * log n) є ???

Це просто "n log n" чи воно має спеціальну назву, як описано вище?


Відповіді:


52

Це називається лінійноактичним часом і є особливим випадком більш загального класу, відомого як квазілінійний . Як випливає з назви, алгоритми, що належать до цього класу, майже працюють у лінійний час; насправді вони мають меншу складність, ніж алгоритми, які працюють в при k > 1 .O(nk)k>1


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Жил 'ТАК - перестань бути злим'

17

лінеатимічний: прик.

Алгоритму, що має час роботи, який становить O (N log N). Утворений Робертом Седжевіком як портманто "лінійних" і "логарифмічних" в алгоритмах "С " (Addison-Wesley 1990, ISBN 0-201-51425-7).

http://catb.org/jargon/html/L/linearithmic.html


Чому я не здивований, що він походить від Sedge ... :)
TextGeek


7

Це було занадто довго для коментаря, тому я написав відповідь. Я не додав цього до своєї першої відповіді, тому що дуже багато людей вже схвалили мого першого візника, і я не впевнений, що вони теж згодні з цією відповіддю.

  • Я не вважаю, що лінійноангретичний - це усталений термін, як сказано в коментарі до прийнятої відповіді. Я гуглив декілька досить молодих статей, використовуючи цей термін, курс CS та іншу книгу Седжевіка, яка використовує цей термін та безліч онлайн-словників.
  • Термін квазілінійний я знайшов у двох статтях:

    Задоволеність є квазілінійною у віснику журналу NQL
    CP Schnorr
    Асоціації обчислювальної техніки,
    т. 25. № 1, січень 1978, стор 136-1,15

і у статті, цитованій у Вікіпедії, яка стосується цієї статті Шорра. Шнорр вводить класи складності квазілінійні (QL) та недетерміновані квазілінійні (NQL).
Квазілінеар, здається, використовується і в теорії часткових диференціальних рівнянь.

Загалом, схоже, один або кілька Wikipedians хотіли надати імена для цієї функції, яка не має широко прийнятого імені. Але навіть зараз мені здається, що жодне з назв не прийнято широко (до того ж я вважаю, що це така собі маніпуляція, яку Вікіпедія не повинна робити). Я думаю, що треба бути обережними, якщо користується Вікіпедією для питань термінології. І ця функція не є достатнім джерелом. Я думаю, що єдине широко прийняте ім'я для цієї функції - n log n .


1
Хоча законність linearithmic і loglinear може бути спірною, я вважаю , що квазілінійний є добре встановленим терміном. Здається, він широко використовується в наукових роботах.
Руках

@Roukah так, але це не означає зовсім те саме; квазілінійний більш загальний. - Я не бачу, що не в тому, що у Вікіпедії використовується однозначне ім'я, схоже, немає кращої альтернативи, і воно використовується у досить відомих джерелах, навіть якщо воно не дуже поширилося. Насправді я б сказав, що той факт, що він не поширився, не дивлячись на надзвичайно поширений клас складності, говорить про те, що саме час люди почали його більше використовувати!
близько

+1 "Єдина загальноприйнята назва цієї функції - n log n" - Усі інші відповіді розважають і сповідують, але я думаю, ви можете мати рацію. Я вже пару днів практикую вимову "лінійноактична", і це все ще не скочується з язика. "En log en" легко сказати, легко запам’ятати і миттєво зрозуміти всім, знайомим з Big O. Я трохи подумаю про це, але, можливо, мені доведеться перенести своє прийняття до цієї відповіді.
GlenPeterson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.