如何在不使用这么多嵌套循环的情况下在矩阵中找到数字对?

时间:2018-03-04 13:56:23

标签: python algorithm performance

我必须编写一个算法,在3D数组(嵌套列表)中找到两个数字:

  1. 它在给定范围内(min
  2. 不要重叠
  3. 尽可能接近(abs(num1 - num1)) 最小)
  4. 如果存在更多满足1)的数字对, 2)和3),选择总和最大的那些
  5. 原始数据是由基本正方形组成的N×N字段,每个基本正方形中都有一个随机数。问题是找到两个子字段,其总和满足写入的4个条件。我计算所有可能的总和,并将它们存储在3D数组sum [i] [j] [k]中,其坐标为起点(i,j)及其大小(k)。我需要跟踪索引以确保字段不重叠。 现在我正在使用6个嵌套for循环(每个索引一个,每个数字3个索引)和许多if语句(检查总和在范围内并且字段不重叠),然后简单地迭代每个可能的组合真的很慢。

    有没有更快的方法(可能没有这么多循环)?只允许使用标准库

1 个答案:

答案 0 :(得分:0)

您可以检查下面列出的算法是否足够快。

对3D阵列中给定范围内的数字进行排序,并跟踪索引。 现在做一个嵌套循环,其中外循环找到最小数字的候选者和最大数字的内部。内循环从列表中的下一个数字开始,一旦找到对应于非重叠子字段的数字(满足条件2的第一个数字,所有剩余数字在条件3中失败)或差异大于已经找到的最佳数字对(这个和所有剩余数字都不符合条件3)。如果内循环终止,则在适当时更新最佳候选对的信息。