这个搜索算法叫什么?

时间:2013-05-25 15:15:45

标签: algorithm search data-structures skip-lists

我最近遇到了一种在排序列表中搜索数字的算法,结果如下:

给定:一个oracle告诉你一个给定的数字是否大于或小于被搜索的数字。

从列表中的第一个元素开始。向前跳过1个元素并询问oracle是否已经超过了被搜索的数字。

如果没有,请跳过2个元素并询问oracle是否已经走得太远。

如果没有提前跳过4个元素等等......

当您找到导致您传递搜索号码的第一个跳过时,您可以确定包含要搜索的号码的子区间。

最后,在子区间上执行二进制搜索。

我想知道这个算法被调用了什么,以便我可以对它进行更多的研究。

由于

3 个答案:

答案 0 :(得分:4)

这就是你如何二元搜索无界集。

例如,要解决正整数上的不等式f(n) < t,其中f是递增函数。

具体例子:

Solve n**2 + 10*n < 100 over the positive integers.

Let f(n) = n**2 + 10*n for n > 0
f is increasing because it's the sum of increasing functions.

f(1) = 1 + 10 = 11
f(2) = 4 + 20 = 24
f(4) = 16 + 40 = 56
f(8) = 64 + 80 = 144 > 100

Now we binary search the interval [4,8]

f(6) = 36 + 60 = 96
f(7) = 49 + 70 = 119 > 100

Thus n < 7

答案 1 :(得分:0)

此数据结构称为Skip Lists

enter image description here

  

跳过列表是用于存储排序的项目列表的数据结构   使用链接列表的层次结构,连接越来越稀疏   项目的后续序列。这些辅助列表允许项目查找   效率可与平衡二叉搜索树相媲美(即   探针数量与log n成比例而不是n)。

答案 2 :(得分:0)

我建议对算法进行一些修改。应该有两个迭代器一个接着另一个,当你意识到你已经移动到一个列表节点的数量大于被搜索的数字..我们应该重新启动与前一个迭代器相同的步骤..这一直持续到我们找到数字。因为我不明白怎么做二进制serch,即在log(N)时间与列表......