【问题标题】:Efficiently generating combinations without duplicate subsets有效地生成没有重复子集的组合
【发布时间】:2018-11-27 20:58:35
【问题描述】:

假设我有 N (1 ≤ N) 数字,1 .. N,有效地生成最大可能的 L (1 ≤ LN) 数量,其大小为 combinations组合的任何U 长度子集 (1 ≤ UL) 的限制只在结果中出现一次。通常有许多结果满足约束条件 - 任何结果都可以。

例如,如果N 是 5,L 是 3,并且最终的约束被删除(即答案只是组合),那么我们有:

123,124,125,134,135,145,234,235,245,345;

一旦引入U is 2 约束,这些行中的任何一个都是可接受的解决方案,只要它是有效生成的:

123,145;
123,245;
123,345;
124,135;
124,235;
124,345;
125,134;
125,234;
125,345;

理想的运行时间是 O(size_of_output)。在我的用例中,N 总是比 L 大得多(一个数量级或更多),因此任何比计算所有组合更快的方法都将是对我提出的改进的改进(这太慢了):

import itertools

def unique_combinations(population, length, unique):
    seen = set()
    for r in itertools.combinations(range(population), length):
        u = set(itertools.combinations(r, unique))
        if not (u & seen):
            yield r
            seen |= u

提供一种从有效解决方案列表中确定性地选择任何给定解决方案的方法的奖励积分。例如,上面的 (N=5,L=3,U=2) 示例有 9 个有效解决方案。能够选择返回的附加参数 1 .. 9 会非常好。

计算结果中组合数量的简单公式也会有所帮助。

【问题讨论】:

  • 你已经展示了 123 的 2 对,而有你的:123 145; 123 245; 123 345 所以你的例子似乎确实存在 18 个变体。
  • MBo - 您的所有三个组合共享一对 45。它最多可以在其中一个中。
  • 还不明白。你的四个组合共享对 45
  • 我对你的输出有点困惑。你说你是从一个组合池中提取的,但是为什么你的输出被打乱了?
  • OP,我认为您误读了@MBo 的评论。您不能在 cmets 中添加换行符,所以这里分号表示句点和换行符在您的问题中的含义:这些是大小 L=2 的三个独立组合,其中没有一个大小为 U=2 的共享子集.

标签: algorithm combinations


【解决方案1】:

这是一个放在答案中的评论,因为它对于评论来说太大了。

这是让 OP 在他的问题中编写更好的示例的部分答案。我不理解 U 参数,正如我在 cmets 中指出的那样,我可能对他的问题有一个非常简单的解决方案,但他可能不会理解。由于我无法理解这里的所有问题,因此他可能无法理解。是的,我可以写出很棒的answers 和很棒的questions

所以如果OP可以解释U参数以便我理解它,那么我可以看看我的想法是否有效,如果可以,请在此处发布答案并进行解释。但如果OP不帮我帮他,那么答案可能会被时间的沙子一扫而光。

第一部分

comb(0,_,[]).
comb(N,[X|T],[X|Comb]) :-
    N>0,
    N1 is N-1,
    comb(N1,T,Comb).
comb(N,[_|T],Comb) :-
    N>0,
    comb(N,T,Comb).

当运行返回时

?- comb(3,[1,2,3,4,5],C).
C = [1, 2, 3] ;
C = [1, 2, 4] ;
C = [1, 2, 5] ;
C = [1, 3, 4] ;
C = [1, 3, 5] ;
C = [1, 4, 5] ;
C = [2, 3, 4] ;
C = [2, 3, 5] ;
C = [2, 4, 5] ;
C = [3, 4, 5] ;
false.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2012-09-10
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多