下面是关于排列的另一个问题。我尽我所能来尽我所能来制定我的问题。如果您有不明白的地方,请随时提问。二维数组的排列
我有一个列表,包含一个列表,包含一个列表,包含一个符号。
List<List<List<Symbol>>> list = new ArrayList<List<List<Symbol>>>();
符号类只是一个值,并跟踪我创建的一些重要特征。结构中的所有符号都彼此不同。
但是也有一些困难,因为刚刚切换各种不同方式的地方,因为...
第一个列表是一种包装了整个事情的。它包含两个包含符号的列表的分组。这是因为当包含在一个分组中时,符号不应该彼此分离。
第二个列表始终长度为2,并且每个列表都包含一个唯一符号列表。至于为什么是两个,不要问我这个问题。这个程序有能力处理这个列表的长度大于两个,这将是很好的。
第三个列表包含所有符号,并且如上所述,每个包装中有两个符号。
我想要的是产生所有可能的排列并分析它们。也就是说,我希望符号切换成所有可能的组合,同时仍然包含在其各自的列表中。
这可能看起来像这样(用伪代码写成,描述了上面提到的类似列表的结构)。
[[a, b, c], [d, e, f]],
[[g, h, i, j], [k, l, m, n]],
[[o, p], [q, r]],
[[s, t, u], [v, x, y]],
一个例子是什么(可能是成千上万)的排列可能是,这是。
[[c, a, b], [d, f, e]],
[[g, h, j, i], [k, l, m, n]],
[[o, p], [q, r]],
[[s, t, u], [v,y, x]],
我已经试过到目前为止是把这些变成一个很好的旧传统的排列方法(如果你愿意或列表),对单个阵列的作品,并试图修改与多维工作阵列。当然有一个很好和简单的方法来做到这一点,最好使用递归。如果没有方法,那完全没问题。
再次,如果您有任何问题超出我刚写的内容,请随时发表评论。
亲切的问候,
虽然这在技术上是一个正确的答案,但它是相当长的一段时间后内存用完了我。我会将你的答案标记为正确的,但是,如果你对如何分析所有这三百万种可能的组合有任何建议,我会很乐意。 –
您可以增加可用ram的数量,例如到1GB与'java -Xmx1G烫发'但我想一个更好的解决方案是不要把所有300万的排列在RAM中,而是'permutationsLists'返回一个迭代器。 – SpiderPig
我之前没有在Java中使用过迭代器,我假设您正在讨论迭代器类。你会如此善良的向我展示实现它的一切手段吗? –