Ciao a tutti, lavorando al HW3opt ho un importante problema di efficienza. Con la profilazione, ho notato che è un problema legato alla lentezza nel percorrere la sequenza per individuare le sottosequenze di lunghezza compresa tra a e b.
Con la mia poca esperienza, non vedo altro modo per fare ciò se non usare un ciclo for e un ciclo while annidato che mi diano gli indici con cui, grazie allo slicing, seleziono le sottosequenze di lunghezza valida e le uso come chiavi di un dizionario contatore (spero di essermi spiegato).
La mia domanda è proprio questa: già in altre occasioni ho notato che cicli annidati aumentano considerevolmente il costo computazionale, ma quando bisogna scandagliare un alto numero di sottosequenze di una sequenza (che sia lista o stringa ecc.) non vedo altro modo che ricorrere ai cicli per individuare gli indici (ho avuto un problema simile con HW1opt); c'è un modo per sostiuire in modo più efficiente i doppi cicli? Oppure il problema è lavorare con lo slicing? O ancora, esistono delle modalità più snelle di manipolazione delle sequenze che non conosco? Filter può essere di aiuto?
Con la mia poca esperienza, non vedo altro modo per fare ciò se non usare un ciclo for e un ciclo while annidato che mi diano gli indici con cui, grazie allo slicing, seleziono le sottosequenze di lunghezza valida e le uso come chiavi di un dizionario contatore (spero di essermi spiegato).
La mia domanda è proprio questa: già in altre occasioni ho notato che cicli annidati aumentano considerevolmente il costo computazionale, ma quando bisogna scandagliare un alto numero di sottosequenze di una sequenza (che sia lista o stringa ecc.) non vedo altro modo che ricorrere ai cicli per individuare gli indici (ho avuto un problema simile con HW1opt); c'è un modo per sostiuire in modo più efficiente i doppi cicli? Oppure il problema è lavorare con lo slicing? O ancora, esistono delle modalità più snelle di manipolazione delle sequenze che non conosco? Filter può essere di aiuto?