Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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
Java 对于范围最小的查询,我应该使用什么数据结构使用O(n logn)存储和O(logn)查询时间?_Java - Fatal编程技术网

Java 对于范围最小的查询,我应该使用什么数据结构使用O(n logn)存储和O(logn)查询时间?

Java 对于范围最小的查询,我应该使用什么数据结构使用O(n logn)存储和O(logn)查询时间?,java,Java,假设给我们一个n值序列x1,x2。。。XN,并寻求快速回答形式的重复查询:给定I和J,求最小值在席…xj 设计一个使用O(logn)空间并在O(logn)时间内回答查询的数据结构 我知道O(n)空间和O(logn)时间的数据结构的解决方案,但我需要一个答案 它使用的O(n logn)空间不少于 有什么建议吗 O(n)空间的解决方案: O(n)空间:对于a1,a2,a3,…an的输入,构造一个包含最小值(a1,…,ak)和最小值(ak+1,…,an)的节点,其中k=n/2。递归地构造树的其余部分。

假设给我们一个n值序列x1,x2。。。XN,并寻求快速回答形式的重复查询:给定I和J,求最小值在席…xj 设计一个使用O(logn)空间并在O(logn)时间内回答查询的数据结构

我知道O(n)空间和O(logn)时间的数据结构的解决方案,但我需要一个答案 它使用的O(n logn)空间不少于

有什么建议吗

O(n)空间的解决方案:

O(n)空间:对于a1,a2,a3,…an的输入,构造一个包含最小值(a1,…,ak)和最小值(ak+1,…,an)的节点,其中k=n/2。递归地构造树的其余部分。现在,如果你想找到ai和aj之间的最小值:确定i的最低共同祖先,j。让它成为k,从i开始,一直移动直到你碰到k。在每次迭代中,检查子节点是否为左节点。如果是,则比较右侧子树的最小值,并相应地更新当前最小值。类似地,对于j,检查它是否是正确的节点。。。。在节点k,比较每个子树返回的值并返回min

首先,
O(n)
也是
O(n logn)
,因此从技术上讲,任何
O(n)
的解决方案也会自动
O(n logn)

您似乎要问的是一个使用
Θ(n logn)
内存的解决方案(请注意)。我不得不说,我认为这是一个有点奇怪的要求,因为你声称你已经有了一个更好的
Θ(n)
解决方案


在任何情况下,您都可以通过制作数据结构的
log(n)
副本,轻松地将
Θ(n)
解决方案转换为
Θ(n logn)
解决方案;当然,为什么不呢?当你有一个更好的-O(n)解决方案时,为什么你想有O(nlogn)?请注意,任何
O(n)
解决方案也是
O(n log n)
,因此你的解决方案(如果有效)在技术上是正确的。相反,我建议你向我们展示你的解决方案,我们向你展示其中的错误。如果我们失败了,我建议你应该能够从出租人那里获得一些巨大的金额或敬畏。首先确保你的符号是正确的。在这种情况下,Big-O和little-O有非常不同的含义。谢谢你的帮助,我知道O(n)也是O(n log n),但我想知道如何在不使用O(n)内存的情况下解决这个问题。我猜这个解决方案一定有不同的惰性结构!