我必须编写一个算法,在3D数组(嵌套列表)中找到两个数字:
原始数据是由基本正方形组成的N×N字段,每个基本正方形中都有一个随机数。问题是找到两个子字段,其总和满足写入的4个条件。我计算所有可能的总和,并将它们存储在3D数组sum [i] [j] [k]中,其坐标为起点(i,j)及其大小(k)。我需要跟踪索引以确保字段不重叠。 现在我正在使用6个嵌套for循环(每个索引一个,每个数字3个索引)和许多if语句(检查总和在范围内并且字段不重叠),然后简单地迭代每个可能的组合真的很慢。
有没有更快的方法(可能没有这么多循环)?只允许使用标准库
答案 0 :(得分:0)
您可以检查下面列出的算法是否足够快。
对3D阵列中给定范围内的数字进行排序,并跟踪索引。 现在做一个嵌套循环,其中外循环找到最小数字的候选者和最大数字的内部。内循环从列表中的下一个数字开始,一旦找到对应于非重叠子字段的数字(满足条件2的第一个数字,所有剩余数字在条件3中失败)或差异大于已经找到的最佳数字对(这个和所有剩余数字都不符合条件3)。如果内循环终止,则在适当时更新最佳候选对的信息。