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