Моя цель — подсчитать перестановки последовательности с определенными свойствами. Сначала я генерирую все перестановки, а затем проверяю, удовлетворяются ли свойства. Как я могу улучшить свой код, чтобы иметь возможность перечислять больше перестановок? Насколько большим может быть n? Я добрался до n=11. Могу ли я дойти до 15? до 20?
Следует ли мне рассмотреть возможность использования массивов numpy? Стоит ли мне подумать об использовании генератора? Должен ли я сохранять перестановки в базе данных?
Элементами списка являются целые числа, где список размера n хранит все целые числа от 1 до n.
from itertools import permutations
def is_valid(seq):
"""check that the sequence satisfies certain properties"""
n = len(seq)
d = {
k: {
abs(seq-seq[j])
for i in range(1, k)
for j in range(0,k-1)
}
for k in range(2, n)
}
for i in range(2, n):
if seq not in d:
return False
return True
# enumerate perms
def enumerate_perms(n):
lst = list(range(1,n-1))
perms = [p for perm in permutations(lst) for p in [(n,*perm,n-1)] if is_valid(p)]
return perms
enumerate_perms(3)
# [(3, 1, 2)]
len(enumerate_perms(11))
# 598
Подробнее здесь: https://stackoverflow.com/questions/793 ... properties
Эффективно подсчитывать списки с определенными свойствами ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение