Algorithm 子集与集合覆盖
我们有很多锁,要打开这些锁,我们需要一组人来打开那把锁。考虑到我们拥有的人数和需要打开的锁的数量,我们需要一个关于如何在可用人员之间分配钥匙的规范,以便打开该锁所需的任何人数的人都可以打开该锁,但任何少于所需人数的组都不能打开该锁 人数将在1-9之间,打开锁所需的人数将在0-9之间 考虑下面的例子 可用人数=2人 所需数量=1 答案:{{0},{0} 他们中的任何一个都可以打开它,所以他们都有相同的钥匙 可用人数=5人 所需数量=3 答案:{0,1,2,3,4,5},{0,1,2,6,7,8},{0,3,4,6,7,9},{1,3,5,6,8,9},{2,4,5,7,8,9} 有人能帮我解决这个问题吗 谢谢设n为总人数,m为打开所有锁所需的最小人数 然后,有两个要求:Algorithm 子集与集合覆盖,algorithm,permutation,combinatorics,Algorithm,Permutation,Combinatorics,我们有很多锁,要打开这些锁,我们需要一组人来打开那把锁。考虑到我们拥有的人数和需要打开的锁的数量,我们需要一个关于如何在可用人员之间分配钥匙的规范,以便打开该锁所需的任何人数的人都可以打开该锁,但任何少于所需人数的组都不能打开该锁 人数将在1-9之间,打开锁所需的人数将在0-9之间 考虑下面的例子 可用人数=2人 所需数量=1 答案:{{0},{0} 他们中的任何一个都可以打开它,所以他们都有相同的钥匙 可用人数=5人 所需数量=3 答案:{0,1,2,3,4,5},{0,1,2,6,7,8},
- 对于每一把锁,任何一组m个人必须至少有一个人拥有该锁的钥匙。换句话说,没有给定密钥的人的集合必须少于m人。因此,每个密钥必须至少分配到n个−m+1人
- 每套m−1个人,必须至少有一把他们都没有钥匙的锁。换句话说,如果你把这个转过来看看“其他人”集合,它有n个−m+1人,你可以说每一组n−m+1人,必须至少有一把钥匙仅由该组人员持有
所以你只需要找到n的所有集合−m+1人(这在O(2n)时间内是微不足道的,在O(C(n,n)时间内不是很难做到)−m+1)次)。对于每个集合,创建一个密钥并将其分发给该集合中的人员。您能解释一下您所说的所有n-m+1人集合的部分吗。你这是什么意思?@SiddharthShah:例如,如果人是{Alice,Bob,Carol},那么“所有两个人的集合”将是{{Alice,Bob},{Alice,Carol},{Bob,Carol}。非常感谢,还有一个疑问。你能给这个陈述举个例子吗?“对于每个集合,创建一个键并将其分发给该集合中的人”。@SiddharthShah:那么,如果一个集合是{Alice,Bob},那么你可以创建一个分配给{Alice,Bob}的键#0。这里的键是从1到9的数字,所以我应该将什么数字分发给组中的成员?