【发布时间】:2012-05-16 14:15:08
【问题描述】:
我正在尝试为给定 H 生成以下方程的所有解。
H=4:
1) ALL solutions for x_1 + x_2 + x_3 + x_4 =4
2) ALL solutions for x_1 + x_2 + x_3 = 4
3) ALL solutions for x_1 + x_2 = 4
4) ALL solutions for x_1 =4
对于我的问题,总是有 4 个方程需要求解(独立于其他方程)。总共有 2^(H-1) 个解。对于上一个,这里是解决方案:
1) 1 1 1 1
2) 1 1 2 and 1 2 1 and 2 1 1
3) 1 3 and 3 1 and 2 2
4) 4
这是一个解决问题的 R 算法。
library(gtools)
H<-4
solutions<-NULL
for(i in seq(H))
{
res<-permutations(H-i+1,i,repeats.allowed=T)
resum<-apply(res,1,sum)
id<-which(resum==H)
print(paste("solutions with ",i," variables",sep=""))
print(res[id,])
}
但是,此算法进行的计算超出了需要。我相信有可能走得更快。我的意思是不生成总和为 > H
的排列对于给定的 H 有更好的算法吗?
【问题讨论】:
-
您发布的解决方案不是独一无二的吗? (
x_1 = 4,x_2 = x_3 = x_4 = 0) -
如果您不给我们方程式,我们将无法帮助您解决它。
-
我假设除了您的值是整数之外,您还将它们限制为正整数?而且我还假设这四个方程实际上是独立的,而不是一起求解...
-
你是对的。我编辑了帖子。
-
那么你的问题就是“对于给定的 N,找出所有 n 个严格正整数的组合,例如 X1 + X2 ... + Xn = N”
标签: algorithm math equation linear-programming diophantine