【问题标题】:Range Minimum Query <O(n), O(1)> approach (Query)范围最小查询 <O(n), O(1)> 方法(查询)
【发布时间】:2013-01-24 22:55:22
【问题描述】:

接上两个问题,“Range Minimum Query approach (from tree to restricted RMQ)”和“Range Minimum Query approach (Last steps)

我在TopCoder上关注this tutorial,方法在上一节介绍。

现在假设我已经完成了所有工作,并且准备好接受查询。根据教程,这是我应该做的:

i 和 j 在同一个块中,所以我们使用 P 和 T 中计算的值

例如,如果有这样的块:

000111

最小值当然在第三个0,但是如果i和j像4和6一样,第三个0就不会在查询条件中。是不是我的理解错了?

i 和 j 位于不同的块中,因此我们计算三个值: 使用 P 和 T 从 i 到 i 块末尾的最小值,最小值 i's 和 j's 块之间的所有块使用 A' 上的预计算查询 以及从 j 的块开始到 j 的最小值,再次使用 T 和 磷;最后返回整体最小值使用的位置 您刚刚计算的三个值。

为什么要计算从 i 到 i 块末尾的最小值以及从 j 块开始到 j 的最小值?两者的答案不都在 i...j 之外吗?另外,如果不完全像上一个问题那样合适,该怎么做。

【问题讨论】:

    标签: algorithm rmq


    【解决方案1】:

    最小值当然在第三个0,但是如果i和j像4和6一样,第三个0就不会在查询条件中。是不是我的理解错了?

    这个想法是为每个可能的块中的所有索引对预先计算 RMQ。因此,无论您在该块中查询什么索引,您都应该始终能够在 O(1) 时间内读取块内两个值的 RMQ。在您在问题中列出的情况下,索引 4 和 6 不包含块最小值这一事实是正确的,但无关紧要。您已经为索引 4 和 6 预先计算了 RMQ。

    为什么要计算从 i 到 i 块末尾的最小值以及从 j 块开始到 j 的最小值?两者的答案不都在 i...j 之外吗?另外,如果不完全像上一个问题那样合适,该怎么做。

    考虑这张图片:

    +------+------+------+------+------+------+
    | ?i?? | ???? | ???? | ???? | ??j? | ???? |
    +------+------+------+------+------+------+
       ^                            ^
       i                            j
    

    如果你想解决 RMQ(i, j),那么最小值可能在三个位置之一:

    • 在与 i 相同的块中,在从 i 在其块内的位置到其块末尾的索引处,
    • 在与 j 相同的块中,在从 0 到 j 在其块中的位置的索引处,或
    • 在中间三个街区之一的某个地方。

    该算法通过使用预先计算的表来解决前两种情况的问题,然后使用另一种算法来解决第三种情况。这三个中的最小值应该是您的答案。

    希望这会有所帮助!这绝不是一个简单的算法,所以如果您需要帮助,请随时在这里提出更多问题!

    【讨论】:

    • 所以 P 和 T 实际上有所有这些组合和所有可能的索引组合?该数据结构将如何?您可以将其添加到答案中吗?
    • 我没有看到教程中关于计算每对索引的参考,我认为这将是 O(N^2)。
    • @ShaneHsu- 关于比较块内所有索引对的部分:“因此,对于每个大小为 l 的二进制块,我们需要在表 P 中锁定每对之间的 RMQ 值指数。这可以在 O(sqrt(N)*l2)=O(N) 时间和空间中轻松计算"
    • @ShaneHsu- 块大小选择为 log(n / 2),因此每个块只有 (log(n / 2))^2 对索引,小于 O( N)。块的数量最终为 sqrt(N),因此计算所有索引的总工作量为 O(sqrt(N) log(N)^2),小于 O(n)。
    • @ShaneHsu- 至于你将使用的数据结构 - 你可以有一个三维数组,其中第一个索引是块索引,第二个索引是块中的起始位置,第三个索引是块内的结束位置。这可能是最简单的方法。
    猜你喜欢
    • 1970-01-01
    • 2015-10-02
    • 2015-07-06
    • 1970-01-01
    • 2013-01-24
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多