一般来说,我对分析空间复杂性有点困惑。我不确定“算法占用的额外空间”的含义。什么算作 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。
但是对于像堆排序这样的东西,它需要 O(1)。就地堆排序是否也需要一个大小为 n 的数组(n 是输入的大小)?还是我们假设输入已经在数组中?为什么堆排序的空间复杂度为 O(1)?
谢谢!