【发布时间】:2015-07-10 02:17:41
【问题描述】:
算法如下:
void heapSort(int * arr, int startIndex, int endIndex)
{
minHeap<int> h(endIndex + 1);
for (int i = 0; i < endIndex + 1; i++)
h.insert(arr[i]);
for (int i = 0; i < endIndex + 1; i++)
arr[i] = h.deleteAndReturnMin();
}
insert() 和 deleteAndReturnMin() 方法都是 O(log n)。 endIndex + 1 可以称为 n 个元素。因此,鉴于这些信息,我是否正确地说第一个和第二个循环都是 O(n log n),因此整个算法的时间复杂度是 O(n log n)?更准确地说,总时间复杂度是否为 O(2(n log n))(不包括初始化)?我正在学习大 O 表示法和时间复杂度,所以我只是想确保我理解正确。
【问题讨论】:
-
两者在O(2(n log n))中无意义
-
对于所有实数 c > 0 的任何 big-oh 复杂度类 O(c * f(n)) = O(f(n))。所以我们会写成 O(nlogn)。跨度>
-
@moreON 谢谢我了解大 O 符号。我只是想确保为了更准确,如果那是正确的?
-
这个答案解释了原因:stackoverflow.com/a/22188943/290617
-
在任何意义上都不是“更准确”。完全一样。
标签: c++ algorithm big-o time-complexity heapsort