Tag: 组合学

如何在飞行中做组合

我有一个非常奇怪的问题,有一些限制,使其难以解决。 我有一个列表列表,我想要对这些列表中的所有项目进行组合。 每个项目都有一个名称和一个值。 这是一个例子: 主要清单: 清单01: Item 01:name:name01,value:value01 项目02:名称:name02,值:value02 清单02: 项目01:名称:name03,值:value03 清单03: 项目01:名称:name04,值:value04 项目02:名称:name05,值:value05 最终结果应如下所示: 一些清单: 项目01:name01:value01,name03:value03,name04:value04 项目02:name02:value02,name03:value03,name04:value04 项03:name03:value03,name03:value03,name04:value04 项04:name01:value01,name03:value03,name04:value05 项目05:name02:value02,name03:value03,name04:value05 项目06:name03:value03,name03:value03,name04:value05 新列表几乎包含像哈希映射一样的项目。 约束如下: 我无法收集到新的列表并将它们混合起来,因为这些列表很快就会变得非常大。 我正在使用某种类似观察者的API,所以我需要尽快让观察者了解结果,这样我才不会使用太多内存。 换句话说,该组合生成器可以用X个列表来提供,每个列表可以包含N个项目,并且我必须生成它们的组合而不使用太多的存储器。 我不希望一次使用超过5个列表,但我想使算法尽可能适应代码更改。 我正在解决java中的问题,但算法也应该在其他语言中同样工作,因为它很可能被翻译。 你有什么想法,建议吗? 提前致谢。 PS我不认为递归会很好。 我正在研究使用while循环和一些嵌套循环的想法,但是很难想象它应该如何工作。

快速计算多类别组合数

我必须为重复对象的排列评估以下公式 n!/(r1! * r2! * r3! * ……… * rn!) 其中n <= 500且1 <= ri <= 10 (总共有n个对象,其中r1与1种类似,r2与第2种类似,依此类推,公式表示此类对象的排列数)。 我需要一个有效的编码解决方案,因为在Java中使用大整数并不能certificate对于大型案例来说是富有成效的。 提前致谢。

获取列表元素的组合列表

假设我有3个列表:[‘q’,’w’],[‘a’,’s’],[‘z’,’x’]。 如何从这些列表中获取可能的组合列表? 所以我得到一个列表[[‘q’,’a’,’z’],[‘q’,’s’,’z’]]等等。 我为两个方法制作了一个方法,但是无法为N个列表找到一个方法: static ArrayList combine(ArrayList one,ArrayList two) { ArrayList<ArrayList> combs=new ArrayList<ArrayList>(); for(E e:one) { for(E e2:two) { ArrayList ps=new ArrayList(); ps.add(e); ps.add(e2); combs.add(ps); } } return combs; } 我发现这是由Guava的Sets.cartesianProduct完成的。