O(nlogn)+O(n)、O(nlogn) 和 O(nlogn + n) 之间的关系是什么?

what are the relationship between O(nlogn)+O(n), O(nlogn) and O(nlogn + n)?

直觉上,我认为这三个表达式是等价的。

例如,如果一个算法运行在O(nlogn) + O(n)O(nlogn + n)(我很困惑),我可以说这是一个O(nlogn)算法吗?

真相是什么?

是的,你可以说这是一个 O(nlogn)

当您尝试估计算法的复杂性时,您会从所有部分开始(选择每个部分中最差的操作并忽略快速的操作 - 嘿,这只是一个估计)。第一部分是 nlogn,第二部分是 n。

因为你不want/can/need它是准确的。

O(nlogn + n) - 或 - O(nlogn) + O(n) -> nlogn 增长速度比 O(n) 快,因此你可以忽略 O(n) -> O(nlogn)

一切都与函数增长的速度有关 - 把它想象成巨大的 n 然后你就会明白为什么你可以忽略增长较慢的函数。

更准确的解释:http://en.wikipedia.org/wiki/Big_O_notation

O(nlogn)= O(nlogn) + O(n) =O(nlogn+n)

事实上,如果 O(expression1) > O(expression2) 那么你有:

O(expression1)= O(expression1) + O(expression2) =O(expression1+expression2)

在这种情况下 expression1 = nlognexpression2 = n