1
21
我已经写了一个解决方案,它不需要您在内存中填充大量的集合。不幸的是,所需的代码有数百行长。你可能要等到它出现在关岛项目中( http://guava-libraries.googlecode.com ,我希望在今年年底。对不起的。:( 注意,如果笛卡尔公式生成的集合数是编译时已知的固定数,那么您可能不需要这样的实用程序——您可以只使用嵌套的for循环数。 编辑: 代码现在被释放。 我想你会很高兴的。它只在您请求的时候创建单独的列表;不会用它们的所有MXNXPXQ填充内存。 如果你想检查源头, here at line 727 . 享受! |
2
2
使用谷歌番石榴19和爪哇8非常简单: 假设您拥有要关联的所有数组的列表…
生成不可变列表的方法如下:
输出如下:
|
3
1
下面的答案使用迭代而不是递归。它使用相同的
这是一个单独的答案,因为IMHO都是有效的、不同的方法。 这是新的主要课程:
|
4
1
这是我写的一个迭代的、懒惰的实现。这个界面与Google的sets.cartesiaproduct非常相似,但它有点灵活:它处理的是iterables而不是sets。此代码及其单元测试位于 https://gist.github.com/1911614 .
|
5
1
基于索引的解决方案 使用索引是一种简单的替代方法,它速度快、内存效率高,可以处理任意数量的集合。实现iterable允许在for-each循环中轻松使用。有关用法示例,请参见main方法。
} |
6
0
我相信这是正确的。它不是在寻求效率,而是通过递归和抽象实现一种干净的风格。
关键的抽象是引入一个简单的
通过这个类,我们可以编写这样的类:
} 我有一个很好的例子来说明这项工作,但是为了简洁起见省略了它。 |
7
0
您可能对另一个关于笛卡尔产品的问题感兴趣(编辑:删除以保存超链接,搜索标签笛卡尔产品)。这个答案有一个很好的递归解决方案,我很难改进。您是否特别需要迭代解决方案而不是递归解决方案? 编辑: 在研究了Perl中堆栈溢出的另一个迭代解决方案之后, a clean explanation ,这里是另一个解决方案:
|
8
0
这里是一个使用函数生成适当输出类型的惰性迭代器方法。
|
9
0
我为字符串表编写了一个递归笛卡尔积算法。您可以将其修改为具有集合ISTEAD。下面是算法。它也在我的 article
|
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |