Python 门限方案分散算法
我正在处理一个(k,n)阈值挑战,该挑战涉及将编号的密钥分配给一组n个人,这样k个人的任何子集(而不是k-1)都将拥有打开锁所需的密钥,同时使用支持方案所需的最少密钥数 我需要编写一个分散算法,它接受(k,n)并以n行矩阵的形式返回方案,每行包含一组编号的键,这些键与任何其他k-1集组合将具有所需的键集合。允许多组密钥之间存在冗余 病例为k=1和k=n: 如果k=1,则每个n必须具有所有必需的密钥,支持此方案的密钥最少为1。例如: 如果k=1,n=2,则方案为: 如果k=n则每个n必须具有不同的密钥,支持此方案的密钥最少为n。例如: 如果k=4,n=4,则方案为: 更有趣的情况是1Python 门限方案分散算法,python,algorithm,cryptography,linear-algebra,Python,Algorithm,Cryptography,Linear Algebra,我正在处理一个(k,n)阈值挑战,该挑战涉及将编号的密钥分配给一组n个人,这样k个人的任何子集(而不是k-1)都将拥有打开锁所需的密钥,同时使用支持方案所需的最少密钥数 我需要编写一个分散算法,它接受(k,n)并以n行矩阵的形式返回方案,每行包含一组编号的键,这些键与任何其他k-1集组合将具有所需的键集合。允许多组密钥之间存在冗余 病例为k=1和k=n: 如果k=1,则每个n必须具有所有必需的密钥,支持此方案的密钥最少为1。例如: 如果k=1,n=2,则方案为: 如果k=n则每个n必须具有不同的
import itertools
def scheme(n, k):
keys = [[] for i in range(n)]
for j, comb in enumerate(itertools.combinations(range(n), n-(k-1))):
for i in comb:
keys[i].append(j)
return keys
你知道是否允许交叉发布到不同的stack exchange站点吗?因为这已经被标记了,我相信这个问题是面向编码的。哇!这似乎提供了正确的解决方案,没有我上面描述的任何复杂性
[[0], [1], [2], [3]]
[[0, 1], [0, 2], [1, 2]]
[[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]]
import itertools
def scheme(n, k):
keys = [[] for i in range(n)]
for j, comb in enumerate(itertools.combinations(range(n), n-(k-1))):
for i in comb:
keys[i].append(j)
return keys