对于我正在做的项目,我有兴趣创建符合以下条件的所有元组 (i,j,k,z,f) 的列表:
- 所有五个变量都可以在 0 到 343 之间变化
- i==k 或 j==z 或 k==f
到目前为止我想出的是:
z1=set()
for i in xrange(344):
for j in xrange(344):
for k in xrange(344):
for z in xrange(344):
for f in xrange(344):
if f!=k:
continue
z1.add((i,j,k,z,f))
for i in xrange(344):
for j in xrange(344):
for k in xrange(344):
for z in xrange(344):
for f in xrange(344):
if z!=j:
continue
if (i,j,k,z,f) not in z1:
z1.add((i,j,k,z,f))
for i in xrange(344):
for j in xrange(344):
for k in xrange(344):
for z in xrange(344):
for f in xrange(344):
if k!=i:
continue
if (i,j,k,z,f) not in z1:
z1.add((i,j,k,z,f))
这很慢。我在想可能有一种简单的方法可以加快我忽略的速度……有什么想法吗?
请您参考如下方法:
您需要更多内存。很多很多的内存。我们只看第一个条件,i == k。满足该条件的元组数为 343 ** 4 = 13841287201。 130亿!如果每个元组只需要 5*4 = 20 字节的内存,那么该集合仍然需要 257 GB。这甚至不是您想要的集合的所有元素。
所以,不,没有简单的出路。如果我要将这个问题优化到可管理的大小,我首先会问 mysqlf:我真的需要一个那么大的列表吗?或者我可以不用它来解决这个问题吗?
