Java 如何在随机生成的4x4网格(模数网格,可环绕)中找到最大和3x3网格

Java 如何在随机生成的4x4网格(模数网格,可环绕)中找到最大和3x3网格,java,arrays,grid,integration,mathematical-optimization,Java,Arrays,Grid,Integration,Mathematical Optimization,我解决这个问题的方法效率很低 我的解决方案:我发现,对于4x4网格(2d数组)中的每个值,都是以该值为中心的3x3网格。然后我将这个网格求和,添加到一个数组中,然后每找到一个3x3网格,我就在新数组中找到最大的和 据我的教授说,这是一个“针对我们使用的网格大小的很好的解决方案”。但是有一个更有效的解决办法,他给了我这个暗示 提示更有效的解决方案:一个可能有用的提示:将其视为最大化二维积分,将网格视为(行、列)的函数 明确地说,我的解决方案得到了充分的认可。我完全不知道如何开始编写更高效的解决方案

我解决这个问题的方法效率很低

我的解决方案:我发现,对于4x4网格(2d数组)中的每个值,都是以该值为中心的3x3网格。然后我将这个网格求和,添加到一个数组中,然后每找到一个3x3网格,我就在新数组中找到最大的和

据我的教授说,这是一个“针对我们使用的网格大小的很好的解决方案”。但是有一个更有效的解决办法,他给了我这个暗示

提示更有效的解决方案:一个可能有用的提示:将其视为最大化二维积分,将网格视为(行、列)的函数


明确地说,我的解决方案得到了充分的认可。我完全不知道如何开始编写更高效的解决方案。

这里有一个
NxM
网格
O(N*m)
时间和空间的通用解决方案。
假设网格的大小为
NxM
size,我们必须找到最大和的
AxB
网格(1)一个想法是首先将所有2x2网格相加,尽管我不知道这是否是你教授所指的改进。但是,如果最大2x2网格可能不会导致最大3x3网格,是否也有例外?不,这些总和将用于计算3x3网格。但这对于3x3网格可能不是一个非常有用的改进,因为它是uld适用于4x4(这只是4个2x2s的总和)。这是一个很好的解决方案,尽管无法理解。我最终决定花时间来破译您可能试图传达的内容,是的,这是一个非常好的解决方案,但它不会在O(NM)时间内运行。sum(x,y)数组的初始计算为O(N^2*M^2)。有NM计算,每一个都是O(N*M)项的总和。我的一部分想+1是因为独创性。我的一部分想-1是因为缺乏清晰性和错误的时间评估。所以…我还没有投票。如果你澄清和更正的话+1…总和是用O(N*M)计算的。总和(x,y)=总和(x,y-1)+总和(x-1,y)-总和(x-1,y-1)+a(x,y).一个公式。它是在固定的时间内为固定的x和y计算的。我很抱歉。是的。当我完成解译答案时,我忘记了。是的。这确实是一个美丽而优雅的解决方案。我认为如果你清楚地确定组件的定义并描述每一步的执行原因,它可能更具可读性。这真的很难理解现在。不管怎么说+1,是为了令人敬畏。而且,我认为这正是教授在暗示中想要做的事情。
aa
aa