У меня есть последовательность чисел:
[12,10,6,4,2]
Каждое из этих чисел может быть положительным или отрицательным.
Это говорит нам о том, что есть 2 ^ 5 = 32 возможных способов, которыми мы можем расположить знаки + или - для любой данной последовательности из 5 чисел.
Как мне сгенерировать все возможные последовательности + или - для сохранения порядок этих чисел в порядке?
КОД:
combs = itertools.permutations('+++++-----', 5)
combs = list(combs)
values = [12,10,6,4,2]
broadcasted = [tuple(zip(i,values)) for i in combs]
test = set()
for item in broadcasted:
test.add(item)
print(len(test))
print(test)
ВЫХОД:
32
{(('+', 12), ('+', 10), ('-', 6), ('+', 4), ('+', 2)),
(('+', 12), ('+', 10), ('+', 6), ('-', 4), ('+', 2)),
(('+', 12), ('+', 10), ('+', 6), ('+', 4), ('+', 2)),
(('+', 12), ('+', 10), ('-', 6), ('-', 4), ('+', 2)),
(('-', 12), ('+', 10), ('+', 6), ('+', 4), ('-', 2)),
(('-', 12), ('+', 10), ('-', 6), ('-', 4), ('-', 2)),
(('+', 12), ('+', 10), ('+', 6), ('-', 4), ('-', 2)),
(('+', 12), ('+', 10), ('-', 6), ('+', 4), ('-', 2)),
(('-', 12), ('+', 10), ('+', 6), ('-', 4), ('-', 2)),
(('-', 12), ('+', 10), ('-', 6), ('+', 4), ('-', 2)),
(('+', 12), ('-', 10), ('+', 6), ('-', 4), ('+', 2)),
(('-', 12), ('+', 10), ('+', 6), ('-', 4), ('+', 2)),
(('-', 12), ('+', 10), ('-', 6), ('+', 4), ('+', 2)),
(('-', 12), ('-', 10), ('+', 6), ('+', 4), ('-', 2)),
(('-', 12), ('-', 10), ('-', 6), ('-', 4), ('-', 2)),
(('+', 12), ('-', 10), ('+', 6), ('+', 4), ('-', 2)),
(('-', 12), ('-', 10), ('+', 6), ('-', 4), ('+', 2)),
(('-', 12), ('-', 10), ('-', 6), ('+', 4), ('+', 2)),
(('-', 12), ('-', 10), ('+', 6), ('+', 4), ('+', 2)),
(('-', 12), ('-', 10), ('-', 6), ('-', 4), ('+', 2)),
(('+', 12), ('-', 10), ('-', 6), ('+', 4), ('-', 2)),
(('+', 12), ('-', 10), ('+', 6), ('-', 4), ('-', 2)),
(('-', 12), ('-', 10), ('+', 6), ('-', 4), ('-', 2)),
(('-', 12), ('-', 10), ('-', 6), ('+', 4), ('-', 2)),
(('+', 12), ('+', 10), ('+', 6), ('+', 4), ('-', 2)),
(('+', 12), ('+', 10), ('-', 6), ('-', 4), ('-', 2)),
(('-', 12), ('+', 10), ('+', 6), ('+', 4), ('+', 2)),
(('-', 12), ('+', 10), ('-', 6), ('-', 4), ('+', 2)),
(('+', 12), ('-', 10), ('+', 6), ('+', 4), ('+', 2)),
(('+', 12), ('-', 10), ('-', 6), ('-', 4), ('+', 2)),
(('+', 12), ('-', 10), ('-', 6), ('+', 4), ('+', 2)),
(('+', 12), ('-', 10), ('-', 6), ('-', 4), ('-', 2))}
Пока он работает, чтобы взять последовательность всех опций (то есть 5 ' «+» и «5»), переставьте их в последовательности по 5, передайте их до заданных цифр и сведите в набор, это слишком вычислительно для последовательности из 10, что потребует от нас создания более 3 миллионов перестановки. Как я могу сделать это быстрее?