N个数字的所有可能组合

时间:2014-01-24 08:25:25

标签: algorithm numbers combinations

你能帮我解决一些算法吗?

我应该找到N个数的所有可能组合: 1 / N,2 / N,3 / N,...,N-2 / n,N-1 / N,N / N

例如,取4个数字:A,B,C,D

1/4: A + B + C + D

2/4: A * B + A * C + A * D + B * C + B * D + C * D

3/4: A * B * C + A * B * D + A * C * D + B * C * D

4/4: A * B * C * D

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如您所注意到的,这些是扩展时多项式(X + A)(X + B)(X + C)(X + D)的系数。

用单项式实现多项式的乘法就足够了,并且迭代地使用它。

def PolyByMono(Poly, Mono):
    Poly.append(0)
    for i in range(len(Poly) - 2, -1, -1):
        Poly[i + 1]+= Mono * Poly[i]
    Poly[0]+= Mono
    return Poly

def Expand(Numbers):
    Poly= [Numbers[0]]
    for M in Numbers[1:]:
        Poly= PolyByMono(Poly, M)

    print Poly  

Expand([1, 2, 3, 4])

给出:

[10, 35, 50, 24]