Python устанавливает типы для векторов без повторений - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть 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]

Какой лучший способ сделать это?

Спасибо!

1 Ответ

0 голосов
/ 05 апреля 2019

Когда 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.

...