【发布时间】:2016-02-26 21:00:24
【问题描述】:
我有一个List<List<T>>,两个列表维度的长度各不相同。
Using recursion I can calculate all the combinations
一些示例List<List<T>> 及其组合
[
[1],
[2, 3],
[4, 5, 6]
]
// [1, 2, 4], [1, 2, 5], [1, 2, 6], [1, 3, 4], [1, 3, 5], [1, 3, 6]
[
[0, 4],
[3, 4, 1, 2]
]
// [0, 3], [0, 4], [0, 1], [0, 2], [4, 3], [4, 4], [4, 1], [4, 2]
[
["A", "B", "B"],
["C"]
]
// ["A", "C"], ["B", "C"], ["B, "C"]
组合的数量会迅速增长,使用递归会成为内存和性能问题。
如何实现迭代器以在计算组合时对组合进行迭代?
做一些阅读我可能能够使用阶乘或组合数系统,但我不确定在这种情况下我将如何应用它。
【问题讨论】:
-
您对可能组合的数量感兴趣,还是想要所有可能组合的列表?原因,只需要组合的数量不需要您进行任何递归。它只是 1C1 * 2C1 * 3C1。
-
可能的组合数量计算起来相当简单,我发布了一个列出每个组合的示例,我有兴趣实现一个迭代器来迭代每个可能的组合,因为它们被计算出来。
-
我记得在某处使用 Lehmer 代码映射做过一些事情。让我检查一下,然后回到这篇文章。
-
这个link 就是我所说的。这有帮助吗?
-
@DebosmitRay 我已经阅读了关于阶乘数系统和组合数系统的维基百科条目。它们有点超出我的想象,并且非常注重数学,我不确定它们究竟如何在 Java 中应用或实现。
标签: java iterator combinatorics