有没有办法在15个大小为5的整数集上做笛卡尔乘积?似乎这个库抛出了一个异常错误:笛卡尔积太大了!
发布于 2017-03-23 16:39:47
error message解释了这个问题:
IllegalArgumentException: Cartesian product too large; must have size at most Integer.MAX_VALUE15个5长度集合的笛卡尔乘积产生5^15个不同的结果,或30,517,578,125个结果。因为Set的size()不能大于Integer.MAX_VALUE,所以不可能(正确地)返回这么大的集合。正如路易斯·沃瑟曼指出的那样,你不太可能真的想要对如此大量的结果进行操作,因为无论如何,构建300亿个列表都是昂贵的。你最好的选择可能是重新检查这个问题,看看是否有一些解决方案可以避免构造这么多的结果。
如果您实际上不需要Set语义,那么您当然可以使用嵌套的for循环逐个构造所有笛卡尔集合(如documentation中所述):
for (B b0 : sets.get(0)) {
for (B b1 : sets.get(1)) {
...
ImmutableList<B> tuple = ImmutableList.of(b0, b1, ...);
// operate on tuple
}
}当然,不要试图将它们全部存储在一个集合中--当超过集合的最大大小(或堆空间)时,您会得到一个错误。
https://stackoverflow.com/questions/14390475
复制相似问题