我需要找出给定2d数组中哪个矩形的平均值最高。显然答案是1x1矩形,只包含最高值的单元格。但是,只有两边等于或超过给定值的矩形才有效,应予以考虑。
问题在技术上很容易解决:
def highest_average(array, minsize):
highest = -1, -1, -1, -1, -float("inf")
width, height = len(array[0]), len(array)
for rowstart in range(height-minsize):
for colstart in range(width-minsize):
for rowend in range(rowstart+minsize, height):
for colend in range(colstart+minsize, width):
val = sum(
sum(array[row][col] for row in range(rowstart, rowend+1)) for col in range(colstart, colend+1)
)/((rowend-rowstart)*(colend-colstart))
if val > highest[4]:
highest = rowstart, colstart, rowend, colend, val
return highest
# Random-valued 16x16 array
array = [[random.randint(0, 100) for _ in range(16)] for _ in range(16)]
for row in array:
print(" ".join("{:3d}".format(f) for f in row))
# Calculated average with min rectangle size 4x4
print(highest_average(array, 4))
但这只适用于小型数组。使用大数组(100x100或更多)运行此函数,以及一个minsize
,例如10,将需要数小时才能返回。
我可以用任何方法来减少运行时间吗?显然我不是在寻找减少0.1%时间的技巧,我需要大幅提高执行速度。