Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 查找O(1)时间内未排序数组的两个索引之间的最大值_Arrays_Search - Fatal编程技术网

Arrays 查找O(1)时间内未排序数组的两个索引之间的最大值

Arrays 查找O(1)时间内未排序数组的两个索引之间的最大值,arrays,search,Arrays,Search,在未排序的数组中,(我们可以预处理此数组)。我们如何在O(1)时间内回答以下问题?求指数i到j的最大值 编辑:预处理可能需要O(n)个时间和O(n)个额外内存顺序,因此经常出现的查询会在O(1)个时间内得到回答…无内存约束或预处理约束?只需用每个可能的答案制作一个O(n2)表(即,i和j的每个可能值对应一个条目)。这个表可以在O(n3)时间内简单地生成,并且可以通过增量计算最大值非常容易地降到O(n2)。除非预处理可以大于O(1),否则这是不可能的。排序有什么问题?这只是O(n*log(n))(

在未排序的数组中,(我们可以预处理此数组)。我们如何在O(1)时间内回答以下问题?求指数i到j的最大值


编辑:预处理可能需要O(n)个时间和O(n)个额外内存顺序,因此经常出现的查询会在O(1)个时间内得到回答…

无内存约束或预处理约束?只需用每个可能的答案制作一个O(n2)表(即,
i
j
的每个可能值对应一个条目)。这个表可以在O(n3)时间内简单地生成,并且可以通过增量计算最大值非常容易地降到O(n2)。

除非预处理可以大于O(1),否则这是不可能的。排序有什么问题?这只是O(n*log(n))(如果允许基数排序,则为最大O(n)。

这是不可能的。您需要遍历数组以找到需要O(n)的最大值,或者需要通过排序数组(比O(n)更昂贵)或确定所有可能范围的最大值来预计算,这两种方法都比O(n)更昂贵,并且需要太多内存。

此问题(称为范围最小查询问题)已解决(O(n)个预处理,O(1)个查询)。来源:

众所周知,O(n)时间预处理足以在O(1)时间内回答后续查询。结果方案的空间实际上非常小,即O(n)位(见Fischer&Heun(2007))

RMQ问题与您的问题完全相同(只需将“最小值”替换为“最大值”)。有关算法草图及其正确性和内存/时间保证的证明,请参阅


另请参见本节,了解解决此问题的不同选项的概述,它们的实现复杂度从本质上说是不断增加的。

排序完全破坏了问题的意义——我们试图从索引
i
j
,排序将使这些查询变得毫无意义。对,但是t如果没有一些非恒定时间的预处理,这是不可能的。排序与其他任何操作一样好。如何使用排序数组回答查询?因为它已编辑:创建一个大小为n的数组,按递增顺序包含数字0到n-1。使用n*log(n)中第一个数组的比较函数对其排序时间。将新数组解释为索引。在O(1)中找到你的答案。@nneonneo说排序会破坏问题的意义是正确的。当你问这个问题时,最好提到这些限制:)哦,不,我认为这是一种非常简单的看待问题的方式。为什么不可能?不要提出错误的二分法——你需要一个真实的证据证明这是不可能的。给出真实的证据需要一点CS理论。任何涉及算法设计和/或复杂度分析的CS类都应该涵盖这个特定问题。实际上,这里有一个理论解决方案:如果您的CPU数量与您正在查看的阵列片中的元素数量相同,那么您可以并行扫描所有元素,以找到最大值。实际上,您可能拥有比CPU更多的元素,并且通信开销可能比这种方法的任何理论好处都要高得多,这使得这种方法不可行。考虑到新的约束条件,这个特定的问题变得不那么容易。O(n)预处理解决方案是在2007年发现的——鉴于大多数“简单”的CS复杂性理论问题是在70年代和80年代解决的,这表明这个问题并不容易。我怀疑这一证明是否包含在CS理论导论课程中;)