【发布时间】:2016-11-05 10:34:12
【问题描述】:
我有一个算法,它首先对向量进行排序,然后遍历其元素并XOR 它们。我应该将排序和 for 循环的复杂度相加来计算整体算法复杂度吗?
所以,我有下一个代码:
std::sort(array.begin(), array.end());
for (int i =1; i < array.size(); ++i) {
result = array[i-1]^array[i];
}
我们有一个 for 循环,其具有 O(N) 复杂性和 std::sort 其具有 O(N log N) 的平均比较。
那么接下来的代码复杂度会是O(N + N log N)?
或者在这种情况下,我们只需要选择最高时间复杂度的类,即线性时间O(N log N),而不是将它们相加?
【问题讨论】:
-
仍然是 O(n lgn)
-
for (int i =1; i 访问@时你有UB 987654328@ 在 i = array.size() 时的下一行。
-
你如何将
N+N logN等同于2NlogN? -
@drescherjm 你能解释一下原因吗?预增量?
-
O(大象 + 蚊子) = O(大象)
标签: c++ algorithm sorting time-complexity asymptotic-complexity