📅  最后修改于: 2023-12-03 15:40:06.161000             🧑  作者: Mango
当我们需要在一个 $n \times n$ 的方阵中找到最大值或最小值时,可以使用以下两种方法:
暴力搜索法比较简单直接,它遍历整个矩阵,得到最大值或最小值。遍历的时间复杂度为 $O(n^2)$,因此该算法的时间复杂度为 $O(n^2)$。
代码示例(求最大值):
def max_in_matrix(matrix):
max_val = matrix[0][0]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] > max_val:
max_val = matrix[i][j]
return max_val
代码示例(求最小值):
def min_in_matrix(matrix):
min_val = matrix[0][0]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] < min_val:
min_val = matrix[i][j]
return min_val
分治法是将问题分解为若干子问题,分别求解这些子问题,最后将各子问题的结果合并得到原问题的解。对于一个方阵,可以将其分为四个大小相等的子方阵。分别求出子方阵的最大值或最小值,再将四个子方阵的最大值或最小值合并得到整个方阵的最大值或最小值。
代码示例(求最大值):
def max_in_matrix(matrix):
n = len(matrix)
if n == 1:
return matrix[0][0]
a = [row[:n//2] for row in matrix[:n//2]]
b = [row[n//2:] for row in matrix[:n//2]]
c = [row[n//2:] for row in matrix[n//2:]]
d = [row[:n//2] for row in matrix[n//2:]]
max_a = max_in_matrix(a)
max_b = max_in_matrix(b)
max_c = max_in_matrix(c)
max_d = max_in_matrix(d)
return max(max_a, max_b, max_c, max_d)
代码示例(求最小值):
def min_in_matrix(matrix):
n = len(matrix)
if n == 1:
return matrix[0][0]
a = [row[:n//2] for row in matrix[:n//2]]
b = [row[n//2:] for row in matrix[:n//2]]
c = [row[n//2:] for row in matrix[n//2:]]
d = [row[:n//2] for row in matrix[n//2:]]
min_a = min_in_matrix(a)
min_b = min_in_matrix(b)
min_c = min_in_matrix(c)
min_d = min_in_matrix(d)
return min(min_a, min_b, min_c, min_d)
以上就是方阵中的最大值和最小值的两种求解方法,可以根据实际情况选择使用。