我有k个向量和k个类型,其中每个向量的长度都为n。 n> k。
我需要将类型放入向量中,以便对于每个索引,我应该为每个向量使用不同的类型。向量之间的类型总数应相等。”
例如,如果类型为
[“ H”,“ M”,“ L”](k = 3,n = 6)
这是有效的:
v1 = ["H", "H","M","M","L","L"] , v2 = ["L", "L","H","H","M","M"], v3 = ["M", "M","L","L","H","H"]
但这是无效的:
v1 = ["H", "H","M","M","L","L"] , v2 = ["L", "H","L","H","M","M"], v3 = ["M", "M","L","L","H","H"]
因为
v1 [1] == v2 [1]
这样做的最佳方法是什么?
谢谢!
答案 0 :(得分:0)
当n
是k
的倍数时,此代码将生成满足约束的向量列表:
t = ["A", "B", "C", "D"]
n = 8
k = len(t)
vectors = [[t[(j+i)%k] for j in range(0,n)] for i in range(0,k)]
for v in vectors:
print(v)
当n
不是k
的倍数时,该问题没有解决方案。例如,对于[“ A”,“ B”](k = 2,n = 3),无法创建两个向量,以使每个索引包含不同的类型并且包含相同数量的每种类型。这是满足第一个约束的所有可能向量对,但是,没有一个满足第二个约束:
AAA AAB ABA ABB BAA BAB BBA BBB
BBB BBA BAB BAA ABB ABA AAB AAA
我尝试了k
和n
的其他值,并且发生了相同的事情:我们可以在每个索引处实现不同的类型,但是不可能在每个索引中拥有相同数量的每种类型向量。原因是对于给定的索引,类型都不同(并且有k
个类型)。但是,由于所有向量都必须包含相同数量的每种类型,因此所有向量都必须在某处具有所有k
元素的副本。而且,如果我们决定重复一种类型,那么我们将不得不重复所有类型,因此n
必然是k
的倍数。