次线性算法,用于在数组中找到元素> = k的最大连续范围

时间:2015-02-20 14:03:27

标签: algorithm language-agnostic

您将获得一个长度为A的数组N,其中包含自然数。 问题是:给出索引i和自然数k,最大偏移量m是多少,使得子数组A[i,i+m]中的所有元素都大于或等于{ {1}}。

有一个简单的O(N)算法:从k开始并向右扫描数组,直到你用i命中偏移量。

我正在寻找的是算法和数据结构,以便:

  • 可以从给定数组计算最多为O(N log N)
  • 的数据结构
  • 数据结构的大小最多为O(N)
  • 该算法使用预先计算的数据结构来解决上述问题,最多为O(log N)。

任何人都可以构建这样的算法吗?或者有一个很好的论据,为什么这样的算法不存在?

我能想到的最好的事情是使用O(N²)和O(log N)查找构建O(N²)数据结构。

1 个答案:

答案 0 :(得分:3)

是的,有可能。您可以使用可以在线性时间内构建的特殊数据结构,并在O(1)中回答范围最大查询。它相当复杂,你可以阅读它here。当我们有这个数据结构时,我们可以使用二进制搜索来找到最大的可行m。每个查询需要O(log N)次。