我正在阅读有关静态数组查询的信息,这就是我发现的:
最小查询:有一个 O(nlogn) 时间预处理方法,之后我们可以在 O(1) 时间内回答任何最小查询。
这个想法是预先计算 min(a, b) 的所有值,其中 b - a + 1(范围的长度)是 2 的幂。预先计算的值的数量是 O(nlogn),因为有 O(logn) 范围长度是 2 的幂。
可以使用递归公式有效地计算这些值:
min(a,b) = min(min(a, a + w - 1), min(a + w, b))
其中 b-a+1 是二和 w = (b - a + 1) / 2
上面引用的部分是什么意思?为什么我们只计算特定长度的最小值?
它背后的想法和直觉是什么?逻辑有什么作用?
有一种预感,它一定与二叉树有关,因为我们只考虑长度的 2 的幂。