给定一个键的排序数组A[1...n]
,以及存储在x
中的另一个键A
,显示如何找到索引k
,以便A[k] = x
1}}及时O(log(k))
。
我知道排序数组的二进制搜索平均会在O(logn)
完成,但如上所述,显示O(logk)
运行时的最佳方法是什么一个排序的数组?
我感谢任何帮助。
答案 0 :(得分:5)
进行指数搜索,从索引m = 1开始,然后每次加倍m,直到m处的数组元素大于x。然后,对最终m下面的数组子集进行常规二进制搜索。
答案 1 :(得分:0)
二进制搜索给出O(log N)是标准方法。我不确定O(log k)是否是错误打印,半等价,或者建议将搜索“偏向”到范围的低端。
也许是使用非中途中点的二进制搜索..因为log
的差异是log
,可能使用log()
函数在每次迭代时选择一个中点?