我想写一个R脚本,它将生成一个集合数的所有可能组合,其乘积总和低于某个总数。
例如,我有这两个向量,x
表示我要为其生成组合的元素,
y
表示要求乘积和的元素。
<代码>x
<代码>y
我这里的主要约束是
x
的任何组合的总和必须小于或等于1244。
|--------------|--------------|--------------|---------------------|
| Total of 2 | Total of 4 | Total of 6 | Total Product Sum |
|--------------|--------------|--------------|---------------------|
| 1 | 1 | 1 | 144 |
|--------------|--------------|--------------|---------------------|
| 2 | 2 | 2 | 288 |
|--------------|--------------|--------------|---------------------|
| 3 | 3 | 3 | 432 |
|--------------|--------------|--------------|---------------------|
| 4 | 4 | 4 | 576 |
|--------------|--------------|--------------|---------------------|
| 5 | 5 | 5 | 720 |
|--------------|--------------|--------------|---------------------|
| ... | ... | ... | ... |
|--------------|--------------|--------------|---------------------|
我尝试使用以下代码,但它只能线性工作,而不是生成小于或等于1244的所有可能组合。
n_trials <- 30
# data frame to store all possible combinations and their product sum
combo_data <- data.frame(total_of_2 = rep(0,n_trials)
, total_of_4 = rep(0,n_trials)
, total_of_6 = rep(0,n_trials)
, total_product_sum = rep(0,n_trials))
for (i in 1:n_trials) {
# check that combination is at most 1244 sqft
if (i*24 + i*48 + i*72 <= 1244) {
# track number of each element in x
combo_data$total_of_2[i] <- i
combo_data$total_of_4[i] <- i
combo_data$total_of_6[i] <- i
# add total product sum
combo_data$total_product_sum[i] <- i*24 + i*48 + i*72
}
}
view(combo_data)
如果我理解正确:
tibble(X=1:30, Y=1:30, Z=1:30) %>%
expand(X, Y, Z) %>%
mutate(Total=X*24 + Y*48 + Z*72) %>%
filter(Total <= 1244)
# A tibble: 2,990 x 4
X Y Z Total
<int> <int> <int> <dbl>
1 1 1 1 144
2 1 1 2 216
3 1 1 3 288
4 1 1 4 360
5 1 1 5 432
6 1 1 6 504
7 1 1 7 576
8 1 1 8 648
9 1 1 9 720
10 1 1 10 792
# … with 2,980 more rows
你的解决方案失败了,因为你没有循环total_of_
匿名用户
从展开开始。网格具有所有可能的组合,然后使用矩阵乘法。
x <- c(24, 48, 72)
e <- expand.grid(X = seq_len(30), Y = seq_len(30), Z = seq_len(30))
y <- as.vector(x %*% t(e))
z <- cbind(e[y < 1244, ], Prod = y[y < 1244])
head(z)
# X Y Z Prod
#1 1 1 1 144
#2 2 1 1 168
#3 3 1 1 192
#4 4 1 1 216
#5 5 1 1 240
#6 6 1 1 264
1244下有效组合的数量将随着你增加而增加,所以我不完全清楚这里的目标。也就是说,这是一个使用base R的版本:
y <- c(24,48,72) #elements to find product sum
n <- 30
instances <- expand.grid(1:n, 1:n, 1:n)
instances$product_sum = rowSums(data.frame(Map('*', instances, y)))
instances <- subset(instances, product_sum <= 1244 )
结果的前几行:
Var1 Var2 Var3 product_sum
1 1 1 1 144
2 2 1 1 168
3 3 1 1 192
4 4 1 1 216
5 5 1 1 240
6 6 1 1 264
如果只使用原始值2、4和6而不是1:n,则应得到27个有效组合。
问题内容: 我正在为Android开发一个数学应用程序。在这些字段之一中,用户可以输入一个整数(无数字且大于0)。这个想法是获得所有可能的和,使之成为整数,而不加倍(在这种情况下为4 + 1 == 1 + 4)。唯一已知的是此int。 例如: 假设用户输入4,我希望该应用返回: 4 3 + 1 2 + 2 2 + 1 + 1 1 + 1 + 1 + 1 显然4 == 4,所以也应该加上。关于我应该
我正在尝试构造一个程序,该程序将获取一个int({1,2,3})数组和一个长度值,并计算该数组的所有可能组合。 例如: 这将输出: 但是当我尝试在 for 循环中调用可能的梳子时,我不断收到堆栈溢出错误 }
问题内容: 给定一个长度 和a ,如何编写一些Java代码以产生长度为n的所有可能的字符串,其中包含集合中的字符? 对于上面的示例,结果应具有2 ^ 4 = 16个字符串,即: 这是我的代码段: 好像只是在做排列,而不是我想要的。……在此先谢谢您:) 问题答案: 以与计数相同的方式来考虑它。从技术上讲,您是从aaaa到bbbb进行“计数”,就像二进制一样。 没有看到您尝试过的内容,我不能为您提供更
我正在寻找以下问题的答案。 给定一组整数(无重复项)和一个和,找出集合元素的所有可能组合,并求和。解的顺序并不重要(解{2,2,3}和{3,2,2}是相等的)。 请注意,最终组合不需要是集合,因为它可以包含重复。 示例:集合{2,3,5}和10 结果:{2, 2, 2, 2, 2},{2,2,3,3},{2,3,5},{5,5} 我已经研究过子集和问题以及硬币兑换问题,但不能使它们适应我的需要。我
问题内容: 给出了长度为 n 的数组。查找子数组元素的乘积之和。 说明 数组 A* = 长度 3的 [2,3,4] 。 * 长度为 2的 子数组= [2,3],[3,4],[2,4] [2,3] 中元素的乘积= 6 [3,4] 中元素的乘积= 12 [2,4] 中元素的乘积= 8 长度 2 = 6 + 12 + 8 = 26的子数组的总和 同样,对于长度 3 ,Sum = 24 因此,乘积以模 1
问题内容: 假设我有以下课程: 这是hashCode的正确实现吗?这不是我通常这样做的方式(我倾向于遵循有效的Java准则),但是我总是很想做类似上面的代码的诱惑。 谢谢 问题答案: 这取决于您所说的“正确”。假设您正在使用所有相关的-defining字段,那么是的,它是“正确的”。但是,此类公式可能不会具有良好的分布,因此可能导致比其他情况更多的冲突,这将对性能产生不利影响。 这是来自 有效Ja