说话时,我怎么说算法的时间复杂度为O(N log N)?


22

我可以用什么术语来描述O(N log N)复杂度的事物?

例如:

  • O(1):常数

  • O(log 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)是阿克曼函数的反函数。
Bakuriu 2015年


34
“ Oh enn log enn”可能已经足够了。
user253751

Answers:


60

“ N log N”和您将要获得的一样好,并且应该由专业程序员很好地理解。您不能指望有一个单词来描述存在的每个复杂性类。


6
“不能期望有一个单词来描述每个复杂性类别” –当然不是。但𝓞(ñ ⋅日志ñ)是这样的,它确实值得自己的,IMO的名称一类重要的; 正如史蒂夫·杰索普(Steve Jessop)所说,线性运算已经很普遍了。
大约

@leftaroundabout它确实很常见,您可以争论,它确实应有名称。但是“ n log n”足够短,无法发音(只有三个音节),因此可以很好地用作名称。为了比较,“对数”是四个音节。当您使用外部算法时,更有趣的是,大多数“ n log n”算法的复杂度为$ N log_B(N / B)$,那肯定是一个复杂性类,值得简称。
kasperd 2015年

10
作为计算机科学硕士学位的学生,我在整个大学学习期间都听说过“ enn log enn”。我从没听过“ linearithmic”,一开始也不会理解。
凯文-恢复莫妮卡2015年

@Kevin:对数是四个音节,但“ log-enn”只有两个。同样,O(N ^ 2)是“ enn平方”,而不是“二次”。我认为“立方”的音素比“ enn立方”的音素少,但我认为后一个术语仍会更普遍。
2015年

51

有一个术语术语“术语线性”恰恰就是这个意思。

我不相信所有程序员都普遍理解它,因此,如果您不小心,它的作用将比它所提供的更多。就我个人而言,我通常不使用它,如果这样做了,那么我可能会在首次使用时对其进行定义,例如“本文考虑了linearithmic(O(N log N))算法”。


11
甚至都不知道存在!
大卫说恢复莫妮卡

12

尽管该词实际上表示不同的含义,但有时也称为“对数线性”。不过,正如@Philip的答案所建议的那样,我只会坚持使用“ N log N” 。


1
对数线性的替代含义是什么?如果我想要的名称不是'N log N',则我会使用log-linear。
乔纳森·勒夫勒

2
@JonathanLeffler:我假设en.wikipedia.org/wiki/Log-linear_analysis有时拼写时没有连字符。当然,通过适当的命名空间,您可以为复杂性类高兴地使用相同的词。
史蒂夫·杰索普

@SteveJessop:这肯定是通过Google搜索得出的。我不确定我是否愿意接受Google / Wikipedia组合的权威性,尽管我对对数线性分析是否如所描述的毫无疑问。
乔纳森·勒夫勒

1
@JonathanLeffler:也可以指我所说的lin-log或log-lin图(或者因为我很懒,实际上我经常称它们为与log-log曲线图不同的对数图)。我们可能会问,这个答案考虑了哪种替代含义:-)
史蒂夫·杰索普

2

因为因子log n增长缓慢,所以定性描述O(n log n)将是“几乎线性的”。取决于您的听众,O(n log n)算法的类别可能是众所周知的,例如,n通过比较对项目进行快速排序就是这种情况。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.