Я использую две цифры в целых числах для представления одного элемента. То есть 3345512
представляет четыре элемента: [3,34,55,12]
. Затем я неоднократно добавляю одно к целому, чтобы получить другую последовательность элементов. При создании таких последовательностей я получаю перестановки одной и той же последовательности, то есть 3341255 = [3,34,12,55]
, что в моем случае эквивалентно числу 3345512 = [3,34,55,12]
. Поэтому я хотел бы избежать перестановок последовательности, с которой я уже сталкивался. Я не хочу хранить цифры по мере их роста (10^30
и более). Я попытался использовать фильтр цветения, но он не смог обработать количество элементов. Существует ли тривиальное решение для генерации последовательностей без перестановок?Создать последовательность без перестановок
[EDIT] Вот крошечный скрипт python, который должен работать. Ради лучшей понятности я использую одну цифру с if s[idx] == 9:
вместо if s[idx] == 99:
Если у вас есть более простое решение, я буду принимать его в качестве ответа.
import time
s = [1]
while True:
idx = 0
while not idx+1 == len(s) and not s[idx] < s[idx+1]:
s[idx] = 1
idx += 1
if s[idx] == 9:
s[idx] = 1
s.append(1)
else:
s[idx] += 1
print repr(s)
time.sleep(0.7)
Если вы хотите избежать повторения последовательностей, которые являются перестановками друг друга, выберите только одну из перестановок в качестве репрезентативных, например. перестановка, где элементы образуют неубывающую последовательность. – chill
Идея Chill хорошая, если вы начинаете считать от 0. В противном случае вы можете пропустить некоторые последовательности. Например, если вы начинаете считать с «5050», вы пропустите «5149», хотя вы никогда не столкнулись с «4951» в первую очередь. – Kevin
Вы хотите [комбинации] (http://en.wikipedia.org/wiki/Combinations), а не перестановки. –