空间复杂性混乱

时间:2012-12-27 06:41:03

标签: language-agnostic complexity-theory big-o heapsort space-complexity

我对分析空间复杂性感到有些困惑。我不确定“算法占用额外空间”的含义。什么算作空间1? 在这里的例子中

int findMin(int[] x) {
    int k = 0; int n = x.length;
    for (int i = 1; i < n; i++) {
        if (x[i] < x[k]) {
            k = i;
        }
    }
    return k;
}        

空间复杂度为O(n),我猜它是由于数组大小为n。

但对于像heapsort这样的东西,需要O(1)。就地堆也不需要有一个大小为n的数组(n是输入的大小)吗?或者我们假设输入已经在数组中?为什么heapsort的空间复杂度为O(1)?

谢谢!

2 个答案:

答案 0 :(得分:1)

Heapsort只需要一定数量的辅助存储,因此O(1)。要排序的输入使用的空间当然是O(n)

答案 1 :(得分:0)

实际上额外的空间对应于算法使用的额外堆栈空间,即其他输入,并且通常需要在递归函数调用中进行堆栈,如果算法中存在递归,则肯定会使用堆栈来存储内容,直到它被解决为止终止条件。

堆栈的大小为O(递归树的高度)。

希望这有用!!