继续我的最后两个问题,“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的块的最小值 使用A'上的预计算查询在i和j的块之间的所有块 从j的块开始到j的最小值,再次使用T和 P:最后返回总体最小值使用的位置 你计算的三个值。
为什么计算从i到i的块结尾的最小值和j的块到j的最小值?两个人的答案都不在于我... j?另外,如果不像最后一个问题那样完全合适,该如何做到这一点。
答案 0 :(得分:3)
最小值当然位于第三个0,但如果i和j类似于4和6,则第三个0不会出现在查询的标准中。我的理解错了吗?
我们的想法是为每个可能的块中的所有索引对预先计算RMQ。因此,无论您在该块中查询哪些索引,都应该始终能够在O(1)时间内读取块中两个值的RMQ。在您在问题中列出的情况下,索引4和6不包含最小块的事实是真实的但无关紧要。您已经为索引4和6预先计算了RMQ。
为什么计算从i到i的块结尾的最小值和j的块到j的最小值?两个人的答案都不在于我... j?另外,如果不像最后一个问题那样完全合适,该如何做到这一点。
考虑这张照片:
+------+------+------+------+------+------+
| ?i?? | ???? | ???? | ???? | ??j? | ???? |
+------+------+------+------+------+------+
^ ^
i j
如果你想解决RMQ(i,j),那么最小值可能是三个地方之一:
该算法通过使用预先计算的表来解决前两种情况中的问题,然后使用另一种算法来解决第三种情况。这三个中的最小值应该是你的答案。
希望这有帮助!这绝不是一个简单的算法,所以如果您需要帮助,请随时在这里提出更多问题!