我对分析空间复杂性感到有些困惑。我不确定“算法占用额外空间”的含义。什么算作空间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)?
谢谢!
答案 0 :(得分:1)
Heapsort只需要一定数量的辅助存储,因此O(1)
。要排序的输入使用的空间当然是O(n)
。
答案 1 :(得分:0)
实际上额外的空间对应于算法使用的额外堆栈空间,即其他输入,并且通常需要在递归函数调用中进行堆栈,如果算法中存在递归,则肯定会使用堆栈来存储内容,直到它被解决为止终止条件。
堆栈的大小为O(递归树的高度)。
希望这有用!!