直觉上,我认为这三个表达式是等价的。
例如,如果一个算法在O(nlogn) + O(n)
或O(nlogn + n)
中运行(我很困惑),我能说这是一个O(nlogn)
算法吗?
真相是什么?
最佳答案
是的,你可以说那是一个O(nlogn)。
当你试图估计算法的复杂性时,首先从所有部分开始(选择每个部分中最差的操作,而忽略快速的操作——嘿,这只是一个估计)。第一部分是nlogn,第二部分是n。
因为你不想/不能/需要它是准确的。
O(nlogn+n)-或-O(nlogn)+O(n)->nlogn比O(n)增长更快,因此可以忽略O(n)->O(nlogn)
这都是关于函数增长的速度-想象一下它是一个巨大的n,然后你就会明白为什么你可以忽略增长较慢的函数。
更准确的解释是:http://en.wikipedia.org/wiki/Big_O_notation