【问题标题】:Python set types to vectors without repetitionsPython将类型设置为向量而不重复
【发布时间】:2019-08-24 15:54:52
【问题描述】:

我有 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]

最好的方法是什么?

谢谢!

【问题讨论】:

    标签: python list vector collections itertools


    【解决方案1】:

    nk 的倍数时,此代码将生成满足约束的向量列表:

    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
    

    我尝试使用 kn 的其他值,但发生了同样的事情:我们可以实现在每个索引处具有不同的类型,但不可能在每个向量中具有相同数量的每种类型。原因是对于给定的索引,类型都是不同的(并且有k 类型)。但是由于所有向量都需要包含相同数量的每种类型,因此所有向量必须在某处具有所有 k 元素的副本。如果我们决定重复一种类型,那么我们将不得不重复所有类型,因此n 必然是k 的倍数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      相关资源
      最近更新 更多