您是否知道一些简洁的Java库,允许您制作两个(或更多)集的笛卡尔积?
例如:我有三套.一个是Person类的对象,第二个是类Gift的对象,第三个是GiftExtension类的对象.
我想生成一个包含所有可能的三元组Person-Gift-GiftExtension的集合.
集的数量可能会有所不同,所以我不能在嵌套的foreach循环中执行此操作.在某些情况下,我的应用程序需要制作一个Person-Gift对的产品,有时它是三人Person-Gift-GiftExtension,有时甚至可能会设置Person-Gift-GiftExtension-GiftSecondExtension-GiftThirdExtension等.
编辑1 - 自发布以来我了解到底层问题是关于如何找到CARTESIAN PRODUCT(现在去谷歌),但不仅因为我不想要每一个烫发,我想找到使用相同子阵列的笛卡儿产品密钥永远不会超过一次,而我的"额外"问题则更多地是关于如何最大限度地减少笛卡尔产品所需的工作量(接受小错误率,我不得不说) -
想象一下......我有四个厨师和四个食谱,每个厨师都有每个食谱的分数,今天我希望每个厨师做一道菜(但不应该做两次菜),决定应该基于最好的所有四个(最高总分)排列(所以也许一个厨师不会使他个人最好).
我已经将数据放入多维数组中
array(
array (1,2,3,4),
array (35,0,0,0),
array (36,33,1,1),
array (20,20,5,3)
)
Run Code Online (Sandbox Code Playgroud)
它在每个子数组中具有与子数组相同数量的值对(如果有帮助的话)
实际上,子阵列的数量最多会达到8(因此最大烫数= 8!,大约40,000不是8 ^ 8,因为不允许使用许多组合)
如果有帮助,选择以这种格式存储数据是灵活的
我正在尝试创建第二个数组,根据KEYs输出子数组的最佳(即最高值)可能组合,其中每个子数组只能使用一个子数组
- 这里每个子阵列[0] [1] [2] [3]每个排列使用一次,每个子阵列键[0] [1] [2] [3]每次使用一次,在我的实际问题中我正在使用相关的数组,但这对于这个问题来说是额外的.--
所以这个例子会创建一个像newArray(35,33,5,4)这样的数组//注意没有使用[2] [0]
理所当然我宁愿不生产所有的烫发,而是,SOMEHOW,丢弃许多显然不是最合适的组合.
有关如何开始的任何想法?我会接受伪代码.
有关笛卡尔积的SO的示例,请参阅PHP 2D阵列输出所有组合
编辑2了解更多关于使笛卡尔积更有效的信息,也许为什么它必须是特定于案例的,如果你想看看你是否可以偷工减料(有风险)高效的笛卡儿积算法
假设我按任何顺序列出以下列表:
S1
R1
R2
S2
S3
Run Code Online (Sandbox Code Playgroud)
我需要创建一个LIST,其中每个"S"包含每个"R"组合
输出:
S1 => R1
S1 => R2
S2 => R1
S2 => R2
S3 => R1
S3 => R2
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?谢谢