首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >guava google code cartesian

guava google code cartesian
EN

Stack Overflow用户
提问于 2013-01-18 08:14:02
回答 1查看 759关注 0票数 0

有没有办法在15个大小为5的整数集上做笛卡尔乘积?似乎这个库抛出了一个异常错误:笛卡尔积太大了!

EN

回答 1

Stack Overflow用户

发布于 2017-03-23 16:39:47

error message解释了这个问题:

代码语言:javascript
复制
IllegalArgumentException: Cartesian product too large; must have size at most Integer.MAX_VALUE

15个5长度集合的笛卡尔乘积产生5^15个不同的结果,或30,517,578,125个结果。因为Setsize()不能大于Integer.MAX_VALUE,所以不可能(正确地)返回这么大的集合。正如路易斯·沃瑟曼指出的那样,你不太可能真的想要对如此大量的结果进行操作,因为无论如何,构建300亿个列表都是昂贵的。你最好的选择可能是重新检查这个问题,看看是否有一些解决方案可以避免构造这么多的结果。

如果您实际上不需要Set语义,那么您当然可以使用嵌套的for循环逐个构造所有笛卡尔集合(如documentation中所述):

代码语言:javascript
复制
for (B b0 : sets.get(0)) {
  for (B b1 : sets.get(1)) {
    ...
    ImmutableList<B> tuple = ImmutableList.of(b0, b1, ...);
    // operate on tuple
  }
}

当然,不要试图将它们全部存储在一个集合中--当超过集合的最大大小(或堆空间)时,您会得到一个错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14390475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档