gpt4 book ai didi

java - 可变数量的集合的笛卡尔积,每个集合的大小可变

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:20:37 24 4
gpt4 key购买 nike

设 G 为某个对象。

令 n = f(G) 为组数。

令 Si = {1,2, ..., h(i) - 1, h(i)} 且 1 ≤ i ≤ n。

我想编写一个方法 (Java),它返回一个表示笛卡尔积 S = S1 X S2 X ... X Sn 的二维数组-1 X Sn。该方法的意图在下面的类似 java 的伪代码中显示。它意味着迭代解决方案,但递归解决方案也可以。

int[][] varCart(G, j) {
int[][] result = new int[sizeOfCartProduct][f(G)]
....
return result;
}

此外,Sj 更改为 { 1 }(或任何其他单例)。


举个例子:

设 G 为对象,以便:

f(G) = 3

S1 = {1,2} [h(1) = 2]

S2 = {1,2,3} [h(2) = 3]

S3 = {1,2,3,4} [h(3) = 4]

让 j = 2。

那么varCart(G,2)的结果一定是

int[2*1*4 = 8][3] = {{1,1,1},{1,1,2},{1,1,3},{1,1,4},{2,1,1},{2,1,2},{2,1,3},{2,1,4}}

最佳答案

创建一个数组,每个数字的值都为最大值;在您的示例中,这将是 [2,3,4]
将数字j的最大值设置为1,所以你得到[2,1,4]
创建第一个组合 [1,1,1] 并将其添加到结果中。然后重复增加组合并将其添加到结果中。
要增加组合,请增加最后一位数字;如果该数字等于最大值,则将其设置为 1 并递增前一个数字,依此类推。如果第一个数字需要递增并且它已经设置为最大值,则您已找到所有组合。

[1,1,1] -> [1,1,2] -> [1,1,3] -> [1,1,4] ->4 is maximum for last digit, so set it to 1 and increment previous digit ->1 is maximum for second digit, so set it to 1 and increment previous digit ->[2,1,1] -> [2,1,2] -> [2,1,3] -> [2,1,4] ->4 is maximum for last digit, so set it to 1 and increment previous digit ->1 is maximum for second digit, so set it to 1 and increment previous digit ->2 is maximum for first digit, so all combinations have been found.

关于java - 可变数量的集合的笛卡尔积,每个集合的大小可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com