n, m, q = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(n)]
operations = [list(map(int, input().split())) for _ in range(q)]

# 创建一个新矩阵,用于存储操作后的结果
new_matrix = [[0] * m for _ in range(n)]

# 遍历每个操作
for op in operations:
    x1, y1, x2, y2, c = op
    # 更新子矩阵中的每个元素
    for i in range(x1 - 1, x2):
        for j in range(y1 - 1, y2):
            new_matrix[i][j] += c

# 输出最终矩阵
for row in new_matrix:
    print(' '.join(map(str, row)))

时间复杂度分析:

遍历每个操作,并更新子矩阵中的每个元素,时间复杂度为 O(qnm)。输出最终矩阵的时间复杂度为 O(nm)。因此,总的时间复杂度为 O(qnm+nm)。

优化思路:

当前代码的时间复杂度较高,主要原因是遍历所有操作时,对每个操作都需要遍历子矩阵中的所有元素进行加值。为了优化时间复杂度,可以采用差分数组的思想,将操作转换为对矩阵边界值的修改,从而将时间复杂度降低到 O(q+n*m)。

差分数组优化代码:

n, m, q = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(n)]
operations = [list(map(int, input().split())) for _ in range(q)]

# 创建差分数组
diff = [[0] * (m + 1) for _ in range(n + 1)]

# 将原矩阵转换为差分数组
for i in range(n):
    for j in range(m):
        diff[i + 1][j + 1] = matrix[i][j]
        diff[i + 1][j] -= matrix[i][j]
        diff[i][j + 1] -= matrix[i][j]
        diff[i][j] += matrix[i][j]

# 处理每个操作
for op in operations:
    x1, y1, x2, y2, c = op
    diff[x1][y1] += c
    diff[x2 + 1][y1] -= c
    diff[x1][y2 + 1] -= c
    diff[x2 + 1][y2 + 1] += c

# 将差分数组还原为最终矩阵
for i in range(n):
    for j in range(m):
        matrix[i][j] = diff[i + 1][j + 1]
        matrix[i][j] += diff[i + 1][j]
        matrix[i][j] += diff[i][j + 1]
        matrix[i][j] -= diff[i][j]

# 输出最终矩阵
for row in matrix:
    print(' '.join(map(str, row)))

使用差分数组优化后,时间复杂度降低为 O(q+n*m),在操作次数较多时可以有效提高程序效率。

Python 矩阵操作:子矩阵加值 - 优化时间复杂度

原文地址: https://www.cveoy.top/t/topic/p9Qf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录