给我一段二维前缀和的代码示例
时间: 2024-10-10 18:14:23 浏览: 43
C语言:基于c代码实现的二维单调队列
二维前缀和,也称为累加数组或滚动数组,是一种用于高效计算二维矩阵元素区间和的数据结构优化技术。它通过预先计算每个子矩形的和,使得后续查询特定区间内元素总和的时间复杂度降低到 O(1)。
以下是一个简单的Python代码示例,假设有一个二维列表 `matrix`:
```python
def prefix_sum_2d(matrix):
# 获取矩阵维度
rows = len(matrix)
cols = len(matrix[0])
# 初始化二维前缀和数组
prefix_sum = [[0] * cols for _ in range(rows)]
# 遍历矩阵,填充前缀和数组
for i in range(rows):
for j in range(cols):
# 基础情况,第一行和第一列的元素直接相加
if i == 0 or j == 0:
prefix_sum[i][j] = matrix[i][j]
else:
# 根据前一单元格的值加上当前值来更新
prefix_sum[i][j] = prefix_sum[i - 1][j] + matrix[i][j]
return prefix_sum
# 示例矩阵
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 计算并打印前缀和
prefix_sum = prefix_sum_2d(matrix)
for row in prefix_sum:
print(row)
# 查询特定区间求和
start_row = 1
end_row = 2
start_col = 0
end_col = 2
sum_range = prefix_sum[end_row][end_col] - (prefix_sum[start_row - 1][end_col] if start_row > 0 else 0) - (prefix_sum[end_row][start_col - 1] if start_col > 0 else 0) + (prefix_sum[start_row - 1][start_col - 1] if start_row > 0 and start_col > 0 else 0)
print(f"区间 [{start_row}, {end_row}], [{start_col}, {end_col}] 的和为: {sum_range}")
#
阅读全文