【发布时间】:2018-11-19 11:04:04
【问题描述】:
我有一个整数向量,例如totalVector <- c(4,2,1),还有两个变量totalResult 和totalNumber。我想做的是:
我想从 totalVector 中找到“totalNumber”元素的所有唯一组合,这些组合加起来为“totalResult”。为了澄清,如果totalResult = 100和totalNumber = 50,我希望totalVector中总和为100的50个元素的所有组合(显然允许重复,但重复的结果,例如25个四边形和25个重新排列的四边形应该只计算在内一次)。
我最初是通过扩展总向量(将每个元素重复 50 次)、使用 combn() 获取 50 个元素的所有组合然后过滤它们的总和来做到这一点的。然而,对于较大的值,这被证明是非常低效的,并且由于数据量太大而失败。有没有更快、更少数据量的方法来做到这一点?
【问题讨论】:
-
你应该向数学家询问除蛮力之外的算法。
-
您实际上是在尝试找到两个线性丢番图方程组的正解(一个方程涉及
totalResult,一个涉及totalNumber)。 Ehrhart polynomials 与简单地计算解决方案的数量相关,但可能还有另一种方法。
标签: r