我有一个已排序元素的列表。它们形成类似正弦波的结构。我有兴趣在Maxima和Minima之间找到一个点 - 以最快的方式。
目前,我尝试过二元搜索和斐波那契搜索。它们都给出大致相同的时间。但我认为我花了很多时间来寻找这些元素。通过文献,有更快的方法吗?我并不担心空间复杂性。
答案 0 :(得分:2)
理论上,二分搜索是在排序列表中搜索的最低边界,并在O(log(n))
中运行。直到我们的日子,在非量子计算中,唯一可以击败它的方法就是掌握一些数据分布知识。
但是,如果分配足够统一,您实际上可以使用Interpolation Search,其中性能平均可以显示为O(log(log(N)))
。
在您的情况下,您必须搜索范围而不是单个值,如果您的值具有均匀分布并且您的最小 - 最大窗口足够大,则插值搜索可能会很好地执行;你的第一次点击可能非常接近。
*另一种解决方案是保留以前查询的某种缓存,因此不要在相同范围的连续请求中搜索整个列表。