我想弄清楚算法的时间复杂度是什么,我有二进制搜索算法,一般是O(log n),我知道 . 但我搜索两个常数,即x = 1和x = 2 ^ 31 - 1(整数的大小) . 我认为在最坏的情况下,我的时间复杂度是log2(2 ^ 31)= 31,所以在最坏的情况下二进制搜索需要31步 . 然而,二进制搜索中的每一步我都调用一个函数,它具有O(n)运行时(只有一个输入大小的循环) . 我的算法是否只是O(31n)= O(n)的阶数?
我算法的输入:一个键,两个大小为n的数组a和b .
在代码中它看起来像这样:
binarySearch(key, a, b)
min = 0, max = 2^31 - 1
mid = (min + max) / 2
while (min<=max) {
x = function(mid, a, b); //this function has O(n)
if (x==key) {
return mid;
} else if (x < key) {
min = mid + 1
} else {
max = mid - 1
}
mid = (min + max) / 2
}
return KEY_NOT_FOUND
我只想确定,如果你有时间复杂性(减少的),请解释你的答案 .