【发布时间】:2019-01-18 06:33:49
【问题描述】:
我正在尝试解决小节集的问题。
输入数据是列表和整数。
案例是将一个集合划分为元素之和几乎相等的 N 个元素子集。由于这是一个 NP 难题,我尝试了两种方法:
a) 迭代所有可能性并使用 mpi4py 将其分发到许多机器(100 个元素和 20 个元素子集的列表工作时间过长)
b) 使用 mpi4py 将列表发送到不同的种子,但在这种情况下,我可能会多次计算相同的集合。例如,在 60 年代,有 100 个数字和 5 个子集,每个子集有 20 个元素,我的结果很容易通过人类简单地查找表格来获得更好的结果。
最后我正在寻找启发式算法,它可以在分布式系统中进行计算,并从总和几乎相等的更大集合中创建 N 元素子集。
a = [range(12)]
k = 3
一种可能的解决方案:
[1,2,11,12] [3,4,9,10] [5,6,7,8]
因为总和是 26、26、26
并非总是可以创建完全相同的总和或数量 元素。最大和最小元素数之差 集合可以是 0(如果 len(a)/k 是整数)或 1。
编辑 1:
我研究了两个选项:1. 父级生成所有迭代,然后发送到并行算法(但这对我来说很慢)。 2. 父节点发送一个列表,每个节点生成自己的子集,并在限定时间内计算子集总和。然后将最好的结果发送给父母。父母收到了这个结果,并选择了最好的一个,使子集中的总和之间的差异最小化。我认为第二种选择有可能更快。
最好的问候, 斯泽潘
【问题讨论】:
-
这是不同的,因为我的请求算法需要在分布式系统中使用以及最终寻找最小总和。正如我写的那样,我试图 a) 迭代所有可能性并使用 mpi4py 将其分发给许多机器(100 个元素和 20 个元素子集的列表工作时间过长)
-
你的问题我不清楚。您是否尝试使用并行算法来拆分您的集合,或者您是否需要拆分您的集合以便将子集发送到并行算法?..我的理解是您想要后者,因此显然是重复的。
-
任务是将集合拆分为 N 个元素的子集,其中元素的总和(几乎)相等。为了让它更快,我想发送并行计算。
-
这不能回答我的问题。