当前位置: 首页 > news >正文

南安市住房和城乡建设部网站唐山建站公司模板

南安市住房和城乡建设部网站,唐山建站公司模板,网站建设 我们是专业的,淘宝客做网站多少钱前缀和(Prefix Sum)是一种用于高效计算数组区间和的预处理技术,尤其适用于需要频繁查询子数组或子矩阵和的场景。下面详细讲解一维前缀和与二维前缀和的原理、构建方法及应用。 一、一维前缀和 1. 定义 前缀和数组 prefix 的每个元素 prefi…

前缀和(Prefix Sum)是一种用于高效计算数组区间和的预处理技术,尤其适用于需要频繁查询子数组或子矩阵和的场景。下面详细讲解一维前缀和与二维前缀和的原理、构建方法及应用。


一、一维前缀和

1. 定义
  • 前缀和数组 prefix 的每个元素 prefix[i] 表示原数组 arri 个元素的和(通常从 arr[0]arr[i-1])。
  • 例如,原数组 arr = [1, 2, 3, 4],前缀和数组为 prefix = [0, 1, 3, 6, 10]
2. 构建方法
  • 初始化 prefix[0] = 0
  • 递推公式:
    [
    \text{prefix}[i] = \text{prefix}[i-1] + \text{arr}[i-1]
    ]
  • 代码实现
    vector<int> buildPrefix(vector<int>& arr) {int n = arr.size();vector<int> prefix(n + 1, 0);for (int i = 1; i <= n; i++) {prefix[i] = prefix[i - 1] + arr[i - 1];}return prefix;
    }
    
3. 查询区间和
  • 查询区间 [L, R] 的和(左闭右闭区间):
    [
    \text{sum}(L, R) = \text{prefix}[R+1] - \text{prefix}[L]
    ]
  • 示例
    arr = [1, 2, 3, 4],求 [1, 2] 的和:
    [
    \text{sum}(1, 2) = \text{prefix}[3] - \text{prefix}[1] = 6 - 1 = 5
    ]
4. 应用场景
  • 快速计算子数组的和(时间复杂度 O(1))。
  • 解决滑动窗口问题(如和大于等于目标值的最短子数组)。

二、二维前缀和

1. 定义
  • 二维前缀和数组 prefix 的每个元素 prefix[i][j] 表示从矩阵左上角 (0,0) 到右下角 (i-1,j-1) 的子矩阵的和。
  • 例如,矩阵 matrix = [[1,2],[3,4]],前缀和数组为:
    [
    \text{prefix} = \begin{bmatrix}
    0 & 0 & 0 \
    0 & 1 & 3 \
    0 & 4 & 10 \
    \end{bmatrix}
    ]
2. 构建方法
  • 初始化 prefix[0][0] = 0
  • 递推公式:
    [
    \text{prefix}[i][j] = \text{prefix}[i-1][j] + \text{prefix}[i][j-1] - \text{prefix}[i-1][j-1] + \text{matrix}[i-1][j-1]
    ]
  • 代码实现
    vector<vector<int>> build2DPrefix(vector<vector<int>>& matrix) {int m = matrix.size();int n = matrix[0].size();vector<vector<int>> prefix(m + 1, vector<int>(n + 1, 0));for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {prefix[i][j] = prefix[i-1][j] + prefix[i][j-1] - prefix[i-1][j-1] + matrix[i-1][j-1];}}return prefix;
    }
    
3. 查询子矩阵和
  • 查询子矩阵 (x1, y1)(x2, y2) 的和(左闭右闭区间):
    [
    \text{sum}(x1, y1, x2, y2) = \text{prefix}[x2+1][y2+1] - \text{prefix}[x1][y2+1] - \text{prefix}[x2+1][y1] + \text{prefix}[x1][y1]
    ]
  • 示例
    matrix = [[1,2,3],[4,5,6],[7,8,9]],求子矩阵 (1,1)(2,2) 的和:
    [
    \text{sum} = 5 + 6 + 8 + 9 = 28 \
    \text{通过前缀和计算:} \text{prefix}[3][3] - \text{prefix}[1][3] - \text{prefix}[3][1] + \text{prefix}[1][1] = 45 - 6 - 12 + 1 = 28
    ]
4. 应用场景
  • 快速计算子矩阵的和(时间复杂度 O(1))。
  • 图像处理中的区域像素和统计。
  • 动态规划中的矩阵路径问题。

三、对比总结

特性一维前缀和二维前缀和
数据结构一维数组二维数组
构建复杂度O(n)O(mn)
查询复杂度O(1)O(1)
核心公式prefix[i] = prefix[i-1] + arr[i-1]prefix[i][j] = ...(见上文)
应用问题子数组和、滑动窗口子矩阵和、图像处理、动态规划

四、经典例题

  1. 一维前缀和

    • LeetCode 303. 区域和检索 - 数组不可变
    • LeetCode 560. 和为 K 的子数组
  2. 二维前缀和

    • LeetCode 304. 二维区域和检索 - 矩阵不可变
    • LeetCode 1292. 元素和小于等于阈值的正方形的最大边长

通过掌握前缀和和二维前缀和的原理与实现,可以高效解决许多与区间和相关的算法问题。

http://www.hkea.cn/news/570964/

相关文章:

  • 网站的推广和宣传方式各行业关键词
  • 腾讯云服务器网站建设淘宝推广哪种方式最好
  • 大专网站建设论文找个免费的网站
  • 移动端网站开发流程图seopeix
  • 购物网站制作免费太原seo招聘
  • 怎么建设食品网站济南seo外包公司
  • 建设网站有哪些seopeix
  • 桂林市工程建设项目招标网站莆田百度快照优化
  • 金华网站建设大型网页建设农产品网络营销
  • wordpress free cdn长沙百度快速优化
  • 网页界面设计首页seo快速优化软件网站
  • 和凡科网类似的网站四川省人民政府
  • 北辰网站建设如何推广引流
  • ps网页模板网站seo外包公司
  • 常平镇仿做网站快速排名刷
  • 青浦建设网站公司app推广代理加盟
  • wordpress 在线pdf优化关键词的正确方法
  • 网站悬浮窗口网站关键词全国各地的排名情况
  • 做网站得叫什么优化关键词排名
  • 丰县住房与城乡建设部网站太原网站制作优化seo公司
  • 微信如何做微商城网站建设手机网站智能建站
  • 网站尾部分页数字怎么做推广app大全
  • 建筑设计软件有哪些优化网站建设
  • 网站开发 word文件预览医疗器械龙头股
  • 电子商务网站建设花费南宁百度seo排名价格
  • 做公司网站要注意哪些问题真正免费建站网站
  • 在线服务器代理杭州seo网络公司
  • wordpress邮件订阅seo技术外包
  • 深圳营销网站建站公司搜索引擎关键词的工具
  • 做网站如何网站考虑优化游戏推广员是诈骗吗