java if for 算法复杂度_二进制搜索的算法时间复杂度

我想弄清楚算法的时间复杂度是什么,我有二进制搜索算法,一般是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

我只想确定,如果你有时间复杂性(减少的),请解释你的答案 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值