计算数组中的算术进程数

时间:2014-06-13 10:43:19

标签: math

我以前的qs。不清楚,所以我再次明确表达。 我需要一个有效的算法来计算一系列算术进展的数量。单个AP中的元素数量应该> 2。 例如。如果系列是{1,2,2,3,4,4},那么下面列出了不同的解决方案(带索引号):

0,1,3
0,2,3
0,1,3,4
0,1,3,5
0,2,3,4
0,2,3,5
hence the answer should be 6

当这些数字变大并且数组大小增加时,我无法对其进行编码。我需要一个有效的算法。

1 个答案:

答案 0 :(得分:0)

首先,你的回答是不正确的。数字2,3,4(索引也是2,3,4)形成一个AP。

其次,这是一个简单的强力算法:

def find (vec,value,start):
    for i from start to length(vec):
        if vec[i] == value:
           return i
    return None

for i from 0 to length(vec) - 2:
    for j from i to length(vec) - 1:
        next = 2 * vec[j] - vec[i] # the next element in the AP
        pos = find(vec,next,j+1)
        if pos is None:
            continue
        print "found AP:\n %d\n %d\n %d" % (i,j,pos)
        prev = vec[j]
        here = next
        until (pos = find(vec,next = 2*here-prev,pos+1)) is None:
          print ' '+str(pos)
          prev = here
          here = next

我认为你不能比这个O(n^4)做得更好,因为要打印的AP总数是O(n^4)(考虑一个零向量)。

另一方面,如果您只想打印最大 AP,即未包含在任何其他AP中的AP,则问题会变得更加有趣......