Я тестирую результат моделирования, чтобы увидеть, входит ли он в цикл в какой-то момент, поэтому мне нужно знать, будет ли результат повторяться. Например, может быть 400 цифр, за которыми следует цикл 400 000 цифр. Выход состоит только из цифр от 0 до 9. У меня есть следующая функция регулярного выражения, которую я использую для соответствия повторений в одной длинной строке:
def repetitions(s):
r = re.compile(r"(.+?)\1+")
for match in r.finditer(s):
if len(match.group(1)) > 1 and len(match.group(0))/len(match.group(1)) > 4:
yield (match.group(1), len(match.group(0))/len(match.group(1)))
Эта функция работает фантастически, но она занимает слишком много времени. Мой последний тест составлял 4 миллиона цифр, и для поиска потребовалось 4,5 часа. Он не нашел повторений, поэтому мне теперь нужно увеличить пространство поиска. Код относится только к подпоследовательности, которые повторяются более чем в 4 раза, потому что я рассматриваю 5 повторений, чтобы дать набор, который можно проверить вручную: симуляция будет генерировать подпоследовательности, которые будут повторяться сотни раз. Я работаю на четырехъядерном компьютере, и цифры, которые нужно проверить, генерируются в реальном времени. Как увеличить скорость поиска?