【发布时间】:2012-03-04 10:36:25
【问题描述】:
我有三个数组:
{}
{a, b, c}
{d, e}
我正在尝试将它们组合以获得以下数组:
{a, d}
{a, e}
{b, d}
{b, e}
{c, d}
{c, e}
我遇到的问题是第一个空数组导致嵌套的 for 循环根本不运行 - 从逻辑上讲是有道理的。即:
for (int i = 0; i < bL.size(); i++) {
for (int j = 0; j < dL.size(); j++) {
for (int k = 0; k < oL.size(); k++) {
我试图找到的是组合三个数组的最有效方法,无论它们的大小如何。大多数时候这三个都有元素,但在某些情况下可能会生成一个空集。
任何帮助表示赞赏。
编辑:为所有三个数组添加输出
输入 - {a,b} {光盘} {e,f}
输出 - {高手} {a,c,f} {a,d,e} {a,d,f} {b,c,e} {b,c,f}
编辑:只有第一个或第三个数组可能导致空集
【问题讨论】:
-
为什么不递归地调用一个组合两个数组的方法,并在该方法中处理空数组的特殊情况?您甚至不必递归调用它,只需为前两个数组调用它,然后为当前组合结果和下一个数组调用它。
-
假设第一个数组有元素 {f,g}。在这种情况下,答案应该是什么?
-
@GregS 我假设他想要一个笛卡尔积,尽管它的不同之处在于空数组/集合被有效地忽略了。
-
@Thomas 我可以看到该方法是如何工作的。这会被认为是实现笛卡尔积的常见做法吗?
-
@Josh 显式地生成潜在无限集合的笛卡尔积并不太常见,因为存在消耗大量内存的危险。通常,您还希望根据某些条件过滤您的结果,并且这两个操作合而为一。但是,如果内存消耗不是问题,并且您不能立即减小结果的大小,那就继续吧。