对于某些问题[被证明是NP难]我没有其他选择,只有彻底的搜索。我有一组数据-为了简单起见,S = ['A', 'B', 'C', ... ,'Z']
并希望将一个函数f
应用于该集合中所有长度为N < len(S)
的子集。我不能在这里使用列表,因为二项式系数是几十亿。但是f(x), x∈S
的结果是零,几乎所有的值都是零。因此在简单的情况下,所有的
在
from itertools import ifilter, combinations
answer = list(ifilter(lambda x: f(x) > 0, combinations(S,N)))
但在现实生活中,len(S) ~ 10⁴
和{ipyparallel
在CPU引擎之间分散工作。我有一个有100个CPU核心的小集群。但我仍然无法将组合存储为列表,因此我需要一些类似单独生成器的东西。在
有一个couple的examples如何将生成器分成块,但据我所知,它们仍然是连续的生成器。还有一个@minrk的idea与此相关,但由于某些原因它的性能非常差。在
所以问题是:
ipyparallel
实现itertools.ifilter
?或ipcluster
引擎)?在
在这里,彻底的搜索是完全没有希望的,不管你如何并行。由于}的数量级如此之高,您需要搜索大约6e241个候选解决方案。这远远超出了人类希望建立的任何计算系统的能力。在
len(S)
和{你需要使用更智能的算法。在
相关问题 更多 >
编程相关推荐