Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

come trovare il modulo

Light (5130 points)
55 181 229
in HW4 obbligatorio by (5.1k points)
nella mia idea io ho provato, a partire dalla prosodia, a iterare sia a destra che a sinistra contemporaneamente, ma a destra normalizzo sempre e questo mi fa fallire dei test perchè si ferma prima dato che trova sottosequenze uguali..allora ho provato con gli slice partendo solo da sinistra e incrementando le due lista di uno a uno e normalizzando quella a destra(che farlo ogni volta ci mette tanto tempo)... ma anche qua mi da problemi... come posso fare? mi sento davvero bloccato
781 views

4 Answers

AdSum (16290 points)
9 20 134
by (16.3k points)

Non ti incartare con ragionamenti troppo complessi. Come risolveresti il problema tu? Tu sai riconoscere una ripetizione e trovarne il modulo, devi solo riapplicare la stessa logica che tu utilizzi.

EDIT:

Rileggendo con attenzione ho notato una cosa:

ma a destra normalizzo sempre e questo mi fa fallire dei test perchè si ferma prima dato che trova sottosequenze uguali

Cosa intendi per normalizzare?

Light (5130 points)
55 181 229
by (5.1k points)
normalizzare nel senso che sottraggo ad una lista tipo [9,10,11] il numero 9 a tutti e diventa [0,1,2], eh ma davvero non so come fare per il ragionamento; non riesco a trovare un modo semplice
s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)

stai sbagliando il modo di normalizzare credo, dai un occhio a normalizzare sequenza e descrizione normalizzazione sotto prosedie

AdSum (16290 points)
9 20 134
by (16.3k points)

anche io facevo il tuo stesso errore, non hai bisogno di normalizzare

Light (5130 points)
55 181 229
by (5.1k points)

e come faccio a distinguere tra 2 sottosequenze con numeri diversi senza normalizzare?crying mi sembra impossibile

Light (5130 points)
55 181 229
by (5.1k points)
quindi posso dividere la lista della prosodia prima a metà, poi 1/3 e cosi via?
s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)
puoi normalizzare nel senso che ho inteso, o controllare che ogni numero nella sequenza non sia presente ad un indice minore. Vedi tu quello che ti conviene

Non devi dividere a metà, ma in tante parti quante sono lunghezza(prosodia)//modulo!
AdSum (16290 points)
9 20 134
by (16.3k points)

Puoi anche normalizzare, ma ti rallenta tutto e ti crea un sacco di problemi. Devi solo cercare le corrispondenze biunivoche.
Le uniche fonti che posso darti per comprendere bene il tutto sono:

Il post precedentemente condiviso.

Questo post (leggi tutto fino al commento del prof che all'inizio,aimè, stavo dando consigli errati che non avevo compreso niente neanche io

Se trovo altri post utili edito e li aggiungo! Fammi sapere

s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)
Una domanda, solo perché non vorrei che uscissero info sbagliate, qual è il motivo per cui rallenterebbe tutto?
AdSum (16290 points)
9 20 134
by (16.3k points)
Normalizzare ha un costo, le operazioni matematiche e le assegnazioni richiedono tempo, non vengono fatte istantaneamente, e sui testi più corposi (come gli ultimi test) si fa sentire.
s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)
Ok, farò un ragionamento su quello che dici, ti ringrazio in anticipo per lo spunto di riflessione!
Light (5130 points)
55 181 229
by (5.1k points)
perchè usando sempre map e partendo dall'inizio facevo questa operazione un grandissimo numero di volte
Light (5130 points)
55 181 229
by (5.1k points)
oook adesso ho capito cosa vuol dire corrispondenza biunivoca grazie mille! ora il mio dubbio è come lavorare su questa lista ahhaahhah
AdSum (16290 points)
9 20 134
by (16.3k points)
Mettendoci le mani ti renderai conto che è più semplice di quel che sembra, buon lavoro!
Light (5130 points)
55 181 229
by (5.1k points)
ci sto quasi perchè mi sembra che va bene il controllo biunivoco perchè passa test ma il problema è che devo trovare la frequenza piu piccola...io divido sempre in due ma cosi non va perchè mi prende i multipli certe volte tipo mi prende 90 invece di 15...come faccio ad iniziare dalla piu grande divisione per farmi prendere le porzioni piu piccole??
s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)
Ma perché scorri contemporaneamente da destra e sinistra?Sei sicuro di guadagnarne in efficienza?
Light (5130 points)
55 181 229
by (5.1k points)
no perchè se è un ciclo che si ripete sicuro sta alla fine o all'inizio, ma non è cosi ahahah
cesare.giusti (360 points)
0 0 3
by (360 points)

Ciao, io personalmente ho avuto l'illuminazione leggendo proprio la definizione di corrispondenza biunivoca, che insiste molto sul concetto degli insiemi, che si può sfruttare bene in Python. 

s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)
Ciao, forse mi sfugge qualcosa, ma lavorando con gli insiemi non perdi l'ordine degli elementi, che potrebbe essere importante?

ad esempio a livello di insiemi set(0,1,1,2,3) == set(0,0,1,2,3) ma ovviamente le due sequenza non sono equivalenti
cesare.giusti (360 points)
0 0 3
by (360 points)
Sì, quello che dici tu è vero, però l'intuizione è questa:

partendo proprio dal tuo esempio, sequenza A = [0,1,1,2,3] e sequenza B = [0,0,1,2,3]

ricaviamo tre insiemi: insieme(A), insieme(B) e l'insieme formato dalle coppie di elementi di A e B che hanno lo stesso indice

per l'esempio considerato, l'ultimo insieme conterrà un elemento in più rispetto agli insiemi A e B, il che ci fa capire che non c'è corrispondenza biunivoca.

Se provi a visualizzare gli output delle operazioni descritte direttamente in Spyder dovrebbe essere più facile capire che cosa intendo
s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)
Grazie, mi hai dato modo di pensare in modo alternativo, ho implementato quello che dicie devo dire che, nonostante mi sarei aspettato performances migliori, sembrano essere equivalenti. Grazie comunque!
g
gpdatu (1110 points)
0 0 9
by (1.1k points)
edited by

Il commento che mi ha fatto capire come trovare il modulo è quello di 1937764 su questo post

In sostanza, nella prima sottosequenza "base" di lunghezza N devi trovare le posizioni delle rime. Se le rimanenti sottosequenze di lunghezza N della prosodia hanno rime nelle stesse posizioni, vuol dire che il periodo è N.