如何在不迭代所有元素的情况下在预排序数组中找到元素?

时间:2019-05-11 10:18:14

标签: c# voronoi

我试图找到一条直线与一组抛物线的交点的最大值(我正在实现一条幸运线,这是一个现场事件)。

我注意到,当我接近最大值(我正在寻找的值)时,这些值往往会变大,然后又再次变小,就像它们已经被排序一样。例如:
[f(a) = -3, f(b) = -1, f(c) = 4, f(d) = 18, f(e) = 67, f(f) = 34, f(g) = 8, f(h) = -7]
(我需要获得67的值)。

由于计算交点的速度不如读取数组的值快,我想知道是否有一种更快的方法来获得最大的值而不迭代所有抛物线。

由于voronoï图很大,因此抛物线阵列的平均范围预计为10,000至20k。最大值可以在数组中的任何位置。

1 个答案:

答案 0 :(得分:2)

先增加然后减少或减少然后增加的序列称为双子序列。您可以在O(log n)中找到最大/最小点,此处是示例实现的a link。实际上,一旦找到这一点,就可以使用二进制搜索在O(log n)中找到任何元素。