确定是不是可以通过组合单个分数来确定某个分数
Posted
技术标签:
【中文标题】确定是不是可以通过组合单个分数来确定某个分数【英文标题】:Determine if a certain score is possible from combining individual scores确定是否可以通过组合单个分数来确定某个分数 【发布时间】:2022-01-23 12:13:02 【问题描述】:假设我想达到某个总分S
,并且有一些单独的“罐子”,我可以从中获得某些个人分数,存储为正整数列表。我想知道在最多n_i
尝试从锅i
之后是否有可能获得所需的分数。分数累积。
例如
我正在尝试准确获得S=10
积分
锅1是[1,2]
,锅2是[4,5,6]
如果n_1=0
、n_2=1
那就不可能了
如果n_1=1
、n_2=1
那就不可能了
如果n_1=0
, n_2=2
则有可能 (6
+ 4
)
如果n_1=2
, n_2=1
则有可能 (6
+ 2
+ 2
)
我正在尝试用 python 编写代码来解决这个问题。
我想我会首先找到所有获得分数的组合S
,其长度小于或等于n_i
s 的总和;例如对于S=10, n_1=1, n_2=1
,我会找到[(10), (9,1), (8,2), (7,3), (6,4), (5,5)]
(我目前不确定是否还需要(4,6)
等),然后遍历它们。那么,问题 1:我怎样才能轻松获得这些数据? 或许来自itertools
的东西?
然后,如果对每个罐子的尝试次数没有限制,我会简单地检查组合的每个元素是否在任何罐子中;如果是,那么有可能打破循环,如果不是,则继续下一个组合;如果你尝试了每一种组合,但都没有奏效,那是不可能的。
复杂性来自于限制每个底池的尝试次数; 问题 2:我该如何修改上述方法来解决这个问题?
最后,问题 3:我可以采取不同的方法来解决这个问题吗?
【问题讨论】:
【参考方案1】:关于问题1,是的,你应该看看itertools.product()
。
这使您可以根据需要完全组合两个列表。
这个函数还带有一个repeat
参数,如果我理解正确的话,你可以解决问题2。
最后,文档提供了一个不使用 itertools 生成笛卡尔积的替代版本,因此他们为您解决了问题 3。
【讨论】:
以上是关于确定是不是可以通过组合单个分数来确定某个分数的主要内容,如果未能解决你的问题,请参考以下文章
GridSearchCV 是不是存储所有参数组合的所有分数?