如果精确为∛(n ^ 2),则算法的时间复杂度是多少?

时间:2018-12-11 17:55:40

标签: algorithm time-complexity

我计算出的答案是n提高到2/3。谁能告诉我最糟糕的情况是大O()

1 个答案:

答案 0 :(得分:0)

是否最坏情况取决于您使用的算法。

但是一般来说,如果您要进行的操作数为n^(2/3),则复杂度为O-notationO(n^(2/3))

让我详细解释一下(以便我们摆脱“通用”一词并给出明确的答案)。

考虑一个简单的算法,该算法在n个元素的数组中查找特定的数字。

如果您的算法是这样的:

find(arr, number) {
    boolean found = false;
    for(i = 0; i < arr.length; i++) {
        if(arr[i] == number) {
            found = true;         
        }
    }
    return found;
}

使用上述算法在数组中查找数字的时间复杂度为O(n) 始终。我总是说输入是什么,上述算法将始终具有n个迭代(考虑数组的长度为n)。

现在将该算法与以下算法进行比较和对比:

find(arr, number) {
    for(i = 0; i < arr.length; i++) {
        if(arr[i] == number) {
            return true;
        }
    }
    return false;
}

现在,时间复杂度取决于数组的输入。 (如果您有一个包含10 ^ 8个元素的数组,并且第一个元素与要搜索的元素匹配,那么您就完成了,可以立即返回而无需遍历整个数组)。因此,这里最差情况的复杂度变为O(n),而这里最坏情况的复杂度是O(1)

因此,基本上,它取决于算法的运行方式。我假设您说“准确”时的意图是您拥有上述的find的第一个版本。如果是这种情况,那么是的,最坏情况下的时间复杂度是O(n^2/3)