求组合算法

求组合算法

有一个变量
as =[1,2,3,4,5]

我想求出这个序列会有多少中组合
比如1,2|1,3|1,4|1,5|2,3|,2,4|2,5……
1,2,3|1,2,4|1,2,5
1,2,3,4|1,2,3,5
………………
谢谢

就用二进制的方法嘛。
枚举0到31的各个数的二进制,就能得出所有的组合来了。


def fun(arr):
        count = len(arr)
        max_num = 1 << count;

        rst = []
        for i in range(max_num):
                tmp = 1
                s = []
                for j in range(count):
                        if tmp & i != 0:
                                s.append(arr[j])
                        tmp *= 2
                rst.append(s)
        return rst

如果求多少组合,那就很簡單...
如果你有 [1,2,3] , 長 3 的 list, 那它的组合就有 2 + 1 = 3                        # 1,2 | 1,3 | 2,3
如果你有 [1,2,3,4] , 長 4 的 list, 那它的组合就有 3 + 2 + 1 = 6               # 1,2 | 1,3 | 1,4 | 2,3 | 2,4 | 3,4
如果你有 [1,2,3,4,5] , 長 5 的 list, 那它的组合就有 4 + 3 + 2 + 1 = 10   
你就會發現它的算法是  range(1, 總長) 的和...

只求两两组合?
是所有可能出现的组合,
# try this
def c(n,m):
    ret=1
    if n<2*m: m=n-m
    for i in range(1,m+1):
        ret=(ret*(n-i+1))/i
    return ret


print c(1000,100)
shhgs牛人
def fun (arr):
    a = []
    b = []
    arr2 = arr[:]
    for x in arr:
        a.append(x)
        arr2.remove(x)
        for y in arr2:
            tmp = a[:]
            tmp.append(y)
            b.append(tmp)
    return b

if __name__=="__main__":
    l = [1,2,3,4,5]
    b = []
    for i in range(len(l)):
        b.extend(fun(l[i:]))
    print(l)
    print(b)
        
先确认下你要的是这个效果:
[1, 2, 3] 的组合有:
1, 2, 3
12, 13, 23
123
总共7种, 对么?

那么根据组合公式
f(n) = c(n, 1) + c(n, 2) + ... + c(n, n) = 2^n - 1
f(3) = 2^3 - 1 = 7
f(5) = 2^5 - 1 = 31