尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

高维前缀和拓展

高维前缀和拓展
📅 发布时间:2026/7/18 18:49:16
说明

本文基于 ZR 黄老板的课堂讲授整理而成,系课堂笔记。如有疏漏,责任在笔者。

众所周知,二维前缀和有两种写法。

第一种是利用容斥原理。

for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + a[i][j];

第二种是逐维计算。

for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)sum[i][j] = a[i][j];
for (int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)if (i > 1) sum[i][j] += sum[i - 1][j];
for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)if (j > 1) sum[i][j] += sum[i][j - 1];

随着维数的增加,容斥的做法会很复杂。于是我们更加普遍地使用第二种。

考虑进行状态压缩。我们能否用一维来表示二维呢(\(n \times m \le 10^6\))?

我们考虑将二维平面断成行,使之首尾相接,于是我们发现,\(a_{i, j}\) 等价于 \(a_{mi + j}\)。

那三维呢(\(n \times m \times t \le 10^6\))?

考虑将一个三维几何体“切”成二维平面,转化为二维问题。于是有 \(a_{i, j, k}\) 等价于 \(a_{mti + mj + k}\)。

我们假设每个维度的长度为2,即每一维的下标范围为 \(\{ 0, 1 \}\)。

我们发现对于 \(n\) 维,上述压缩后的一维下标为 \(j = 2^n \times i_n + 2^{n - 1} \times i_{n - 1} + \cdots + 2 \times i_1 + 2\times i_0\),等式右边等价于 \(( \overline{i_n i_{n - 1} \cdots i_1 i_0} )_2\),而这就是 \(j\) 的二进制下表示。

也就是说,我们可以用一个整数来表示 \(k\) 维数组的下标(前提是每个维度的长度为 2)。

于是就可以对三维前缀和进行改写。

// 修改前
for (int i = 0; i <= 1; i++)for (int j = 0; j <= 1; j++)for (int k = 0; k <= 1; k++)if (i > 0) a[i * 4 + j * 2 + k] += a[(i - 1) * 4 + j * 2 + k];
for (int i = 0; i <= 1; i++)for (int j = 0; j <= 1; j++)for (int k = 0; k <= 1; k++)if (j > 0) a[i * 4 + j * 2 + k] += a[i * 4 + (j - 1) * 2 + k];
for (int i = 0; i <= 1; i++)for (int j = 0; j <= 1; j++)for (int k = 0; k <= 1; k++)if (k > 0) a[i * 4 + j * 2 + k] += a[i * 4 + j * 2 + (k - 1)];// 修改后
for (int x = 0; x < 8; x++)if ((x & 4) > 0) a[x] += a[x - 4];
for (int x = 0; x < 8; x++)if ((x & 2) > 0) a[x] += a[x - 2];
for (int x = 0; x < 8; x++)if ((x & 1) > 0) a[x] += a[x - 1];

将这三个 for 合并,并扩展至 \(n\) 维,得到如下代码。

int n = 1 << k;
for (int y = 1; y < n; y *= 2)for (int x = 0; x < n; x++)if (x & y) a[x] += a[x - y];

这也就是 快速莫比乌斯变换 (Fast Mobius Transform, FMT) 求子集和的实现,时间复杂度 \(O(n \log n)\)。

相关新闻

  • 2026淮南职业技术学校地址在哪?去学校参观要预约吗?乘车路线怎么走? - 我叫小周
  • 武昌闲置香奈儿包包回收哪家好?连锁逸程 30 分钟上门 - 融媒生活
  • 新手友好的wordpress主题模板推荐

最新新闻

  • Dify+Docker 构建生产级智能体:容器化部署与线上性能调优
  • 百元价位的红茶有哪些推荐?实测5款日常喝不踩坑的主流口粮红茶
  • 小红书稳定流量运营实操心得,告别流量起伏波动
  • 【Cursor测试工程化落地】:团队实测——测试编写效率提升3.7倍,缺陷拦截率提高64%
  • 成都 2026 名表回收行情更新,腕表首饰当场估价结算 - 逸程奢侈品回收中心
  • 开关频率在电源设计中的关键影响与优化策略

日新闻

  • 宝珀中国官方售后服务中心|官方热线和维修地址权威信息声明(2026年7月更新) - 宝珀官方售后服务中心
  • # 2026年北京知识产权律师推荐怎么选?看这五点关键不踩雷 - 本地品牌推荐
  • 2026实测教程:生成的拼豆图纸不满意怎么修改才省事 - 省事研究所

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号