【问题标题】:How can I find an element in a pre-sorted array without iterating all of it?如何在不迭代所有元素的情况下在预排序数组中找到元素?
【发布时间】:2019-05-11 10:18:13
【问题描述】:

我试图找到一条线与抛物线数组的交点的最高值(我正在实现一条财富线,这是一个现场事件)。

我注意到当我接近最大值(我正在寻找的那个)时,这些值往往会变大,然后又变小,就好像它们已经过排序一样。一个例子是:
[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ï 图表很大,抛物线阵列预计平均在 10k 到 20k 个元素之间。最大值可以是数组中的任何位置。

【问题讨论】:

    标签: c# voronoi


    【解决方案1】:

    先增后减或先减后增的序列称为双调序列。您可以在 O(log n) 中找到最大/最小点,这里是 a link 的示例实现。事实上,一旦你找到了这一点,你就可以通过二分查找找到 O(log n) 中的任何元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      相关资源
      最近更新 更多