嵌套循环的空间复杂性

时间:2016-03-01 18:08:46

标签: algorithm space-complexity

当涉及到算法的空间复杂性时,我很困惑。理论上,它对应于算法使用的额外堆栈空间,即输入以外的堆栈空间。但是,我有问题指出,究竟是什么意思。

例如,如果我有一个以下的强力算法来检查数组中是否没有重复,那么这是否意味着它使用O(1)额外的存储空间,因为它使用int j和int k?

 public static void distinctBruteForce(int[] myArray) {
    for (int j = 0; j < myArray.length; j++) {
        for (int k = j + 1; k < myArray.length; k++) {
            if (k != j && myArray[k] == myArray[j]) {
                return;
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

是的,根据你的定义(这是正确的),你的算法使用常量或 O(1),辅助空间:循环索引,可能是设置一个所需的一些常量堆空间函数调用本身等。

确实可以认为循环索引在输入的大小中是位对数的,但它通常近似为常数。

根据Wikipedia entry

  

在计算复杂性理论中,DSPACE或SPACE是描述确定性图灵机的存储空间资源的计算资源。它表示&#34;正常&#34;的内存空间总量。物理计算机需要用给定的算法解决给定的计算问题

所以,在&#34;正常&#34;计算机,索引将被视为64位,或 O(1)

答案 1 :(得分:1)

这意味着它使用O(1)额外的存储空间,因为它使用int j和int k?

额外存储空间表示用于输入本身之外的其他空间。而且,正如时间复杂度一样,如果输入大小本身的大小不依赖(当输入大小增加时增加),那么空间复杂度将是O(1)

答案 2 :(得分:1)

是的,您的算法确实是O(1)存储空间 1 ,因为您使用的辅助空间具有与输入无关的严格上限。

(1)假设用于迭代的整数在限制范围内,通常最多为2 ^ 32-1