python组合非常大的列表

时间:2019-07-19 18:19:44

标签: python list

对于非常大的n,我需要列出n个数字中k个所有可能组合的列表。我遇到了我的列表大小迅速超过500000的问题,而python似乎处理得不太好。但是,我想超越这个数亿。 我该如何处理? 非常感谢!

1 个答案:

答案 0 :(得分:0)

DP不适用于很大的数字,因为存储如此大的列表将导致MemoryError。想法是即时计算并记录所需的值。

def comb(n, k):
        deno = 1
        num = 1
        result = 1
        #set the value of deno and num bounds
        if k > n - k:
                num_val = k + 1
                den_val = n - k
        else:
                num_val = n - k + 1
                den_val = k
        i = n
        #calculate n * (n - k) *....* (n-num_value))
        while i != num_val - 1:
                if i == 0:
                        result *= 1
                else:
                        result *= i
                if i == num_val:
                        num = result
                i -=1
        i = 0
        result = 1
        #calculate den_val! (factorial of denominator)
        while i != den_val + 1:
                if i == 0:
                        result *= 1
                else:
                        result *= i
                if i == den_val:
                        deno = result
                i += 1
        ans = num/deno
        return ans


if __name__ == "__main__":
        n = input("Enter n\n")
        k = input("Enter k\n")
        print(comb(n, k))

复杂度-O(max(k,n-k))