【发布时间】:2019-12-10 07:04:02
【问题描述】:
我正在尝试解决来自生物学领域的问题,我必须将每个大元素的局部次优解决方案结合起来,以使每个子粒子都是独一无二的。问题是可能性可以扩展到 +4.000 局部次优解决方案和 +30.000 元素。笛卡尔积不是一个选项,因为组合列表是一个 n*m*p*... 问题,如果没有超越 itertools 的算法,这是不可能的。
一般架构是:
[
[ [a,b,c],[d,e,a],[f], ...],
[ [f,e,t],[a,b,t],[q], ...],
[ [a,e,f],[],[p], ... up to 4.000],
... up to 30.000
]
[ [a,b,c],[d,e,a],[f],.....], -> 一组用于 elem 的次优解决方案。 #1
我想尽快找到
第一个:一个解决方案,这意味着每个元素的一个次优解决方案的组合(可能包括空白列表),这样就不会有重复项。例如 [[a,b,c],[f,e,t][p]]。
第二:所有兼容的解决方案。
我知道这是一个悬而未决的问题,但是我需要一些指导或通用算法来解决这个问题,如果我有什么要开始的话,我可以进一步调查。
我在实验室的其余工作中使用 python,但是我对其他语言持开放态度。
我们可以从一个基本的求解器开始,该求解器在总的次优和列表数量方面处理较少的可能性。
最好的。
编辑 1
一个非常简短真实的例子:
[[[1,2,3][1,2,4],[1,2,5],[5,8]],
[[1,3][7,8],[6,1]],
[[]],
[[9,10][7,5],[6,9],[6,10]]]
最佳解决方案(从第 # 行开始):
#1 [1,2,3]
#2 [7,8]
#3 [9,10]
Output: [[1,2,3],[7,8],[9,10]]
【问题讨论】:
-
嗨,欢迎来到 SO。您能否提供一些小样本输入、预期输出以及您的方法中可重现的代码示例(如果有)?
-
所以一行应该没有重复值?
-
LazyCoder,感谢您的快速回答。现在在答案正文中找到一个示例,也是一个最佳结果。
-
Basilisk,所需的解决方案在每个“大”列表中都有一个元素,在这些列表之间,条件是所有元素都是唯一的。
-
一个元素是指一行(列表或数组)还是数字?抱歉,我没有看到这里的模式,这些列表之间的条件是元素是唯一的吗?为什么你不使用 6 ?这是独一无二的
标签: python algorithm list cartesian-product branch-and-bound