gpt4 book ai didi

algorithm - RMQ 问题的预处理代码。它有什么作用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:39 28 4
gpt4 key购买 nike

这取自 TopCoder 的算法页面 - 关于“RMQ 的简单算法”的部分据说是用于计算 A 数组上的 RMQ 的预处理函数。


void process1(int M[MAXN][MAXN], int A[MAXN], int N)
{
int i, j;
for (i =0; i < N; i++)
M[i][i] = i;
for (i = 0; i < N; i++)
for (j = i + 1; j < N; j++)
if (A[M[i][j - 1]] < A[j])
M[i][j] = M[i][j - 1];
else
M[i][j] = j;
}

但我看不出生成的 M 二维数组对计算 RMQ 有何帮助,我没有得到什么?

最佳答案

提示

数组 A[] 包含您为其计算 RMQ 的元素序列。数组 M[][] 包含“范围 a..b 中的最小元素是多少?”类型的每个查询的答案。进入 M[a][b]

完整答案

这样,您可以通过查看 M[][] 中的相应元素,在恒定时间内查找任何查询的答案。

计算方式如下:

  • 第一个 for 循环遍历所有元素并将范围 i..i 中的最小值分配给 i。这是因为单元素范围的最小值就是该元素。
  • 嵌套循环然后为所有 k > i 计算其他范围 i..k 的 RMQ 答案。这是通过一次将一个元素扩展从 i 开始的已计算范围来完成的。

关于algorithm - RMQ 问题的预处理代码。它有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5724816/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com