我计算出的答案是n提高到2/3。谁能告诉我最糟糕的情况是大O()
答案 0 :(得分:0)
是否最坏情况取决于您使用的算法。
但是一般来说,如果您要进行的操作数为n^(2/3)
,则复杂度为O-notation
为O(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)