考虑以下a
对长度排序数组n
(按递增顺序)的随机搜索算法。x
可以是数组的任何元素。
size_t randomized_search(value_t a[], size_t n, value_t x)
size_t l = 0;
size_t r = n - 1;
while (true) {
size_t j = rand_between(l, r);
if (a[j] == x) return j;
if (a[j] < x) l = j + 1;
if (a[j] > x) r = j - 1;
}
}
当从 中随机选择时,该函数的Big Theta 复杂度(上下都有界)的期望值是多少?x
a
虽然看起来是这样log(n)
,但我做了一个指令计数的实验,发现结果增长速度比log(n)
(根据我的数据,甚至(log(n))^1.1
更好地拟合结果)。
有人告诉我,这个算法有一个非常大的 theta 复杂度(所以显然log(n)^1.1
不是答案)。那么,您能否给出时间复杂度以及您的证明方法?谢谢。
更新:我的实验数据
log(n)
数学拟合结果:
log(n)^1.1
拟合结果: