【发布时间】:2015-02-23 22:00:00
【问题描述】:
我想弄清楚我的算法的时间复杂度是多少,我有二进制搜索算法,我知道,这通常是 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
我只是想确定一下,如果您有时间复杂度(降低的时间复杂度),请解释您的答案。
【问题讨论】:
-
如果您的列表已排序,那么是的,它是 O(n),但不一定是 31n,因为您必须计算常量的所有内容。
-
没有列表,所以没有什么可排序的。我只是检查函数的输出是否等于 0
标签: time big-o time-complexity binary-search-tree binary-search