考虑以下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 复杂度(上下都有界)的期望值是多少?xa
虽然看起来是这样log(n),但我做了一个指令计数的实验,发现结果增长速度比log(n)(根据我的数据,甚至(log(n))^1.1更好地拟合结果)。
有人告诉我,这个算法有一个非常大的 theta 复杂度(所以显然log(n)^1.1不是答案)。那么,您能否给出时间复杂度以及您的证明方法?谢谢。
更新:我的实验数据
log(n)数学拟合结果:

log(n)^1.1拟合结果:
