Sto testando l'output di una simulazione per vedere se entra in un ciclo ad un certo punto, quindi ho bisogno di sapere se l'output si ripete. Ad esempio, potrebbero esserci 400 cifre, seguite da un ciclo di 400000 cifre. L'output consiste solo di cifre da 0-9. Ho la seguente funzione di espressione regolare che sto usando per abbinare ripetizioni in una sola lunga serie:Come si può parallelizzare una ricerca regolare di una stringa lunga?
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)))
Questa funzione funziona fantasticamente, ma ci vuole troppo tempo. Il mio test più recente è stato di 4 milioni di cifre e sono state necessarie 4,5 ore di ricerca. Non ha trovato ripetizioni, quindi ora ho bisogno di aumentare lo spazio di ricerca. Il codice riguarda solo se stesso con sottosequenze che si ripetono più di 4 volte perché sto considerando 5 ripetizioni per dare un set che può essere controllato manualmente: la simulazione genererà sottosequenze che si ripeteranno centinaia di volte. Sono in esecuzione su una macchina a quattro core e le cifre da controllare vengono generate in tempo reale. Come posso aumentare la velocità della ricerca?
Questa domanda riguarda le stringhe interamente ripetute, ad esempio "123451234512345". Ho bisogno di sapere se la stringa alla fine si ripete, qualcosa come "00706857383123451234512345". Le soluzioni in questa domanda non catturano questo caso. – interplex
Esiste qualche tipo di motivo attorno alle porzioni ripetitive? È sempre tra underscore, o sempre ripetuto fino alla fine della stringa, quel genere di cose? – TigerhawkT3
Ripete sempre fino alla fine della stringa, ma forse non completamente. Qualcosa come "8576463812345123451234512345123" è completamente possibile. – interplex