HW2 - Come migliorare tempi di esecuzione, anche di poco?

alessiodellasanta (11830 points)
7 13 34
asked Oct 25, 2020 in HW2 obbligatorio by alessiodellasanta (11,830 points)
Buonasera ragazzi, il mio programma, quando testato, fallisce gli ultimi due test da 1M ita e eng di 0.006s (testlib.TimeoutError: Timeout! (0.506 > 0.5) )
Avete per caso qualsiasi consiglio per ottimizzare, anche di pochissimo, i tempi di esecuzione?
253 views

2 Answers

Best answer
9
9Andrea9 (12340 points)
10 31 56
answered Oct 25, 2020 by 9Andrea9 (12,340 points)
selected Oct 25, 2020 by alessiodellasanta
Carissimo le consiglio di semplificare il programma in più funzioni, prova ad utilizzare un dizionario per il conteggio delle lettere.
alessiodellasanta (11830 points)
7 13 34
commented Oct 25, 2020 by alessiodellasanta (11,830 points)
grazie mille anche a te andrea, sempre sul pezzo
Loriv3 (7970 points)
8 20 84
answered Oct 25, 2020 by Loriv3 (7,970 points)

Ciao anche io ho problemi con i tempi di esecuzione ma riesco a passare tutto, il mio consiglio è provare ad utilizzare più funzioni possibili se utilizzi gli stessi comandi usa benissimo una funzione così eviti di ripetere le stesse cose più volte. Non so cosa usi per contare il punteggio ma preferisci l'utilizzo del dizionario dato che gli altri controlli richiedono numerosi if. 

Altro hack, vedi se il programma riesce ad eseguirlo con più tempo; il codice del test è modificabile da spyder cambiando i valori di self.timer e self.timeout se cambiando di poco questi valori riesci a passare il test il tuo codice si trova sulla buona strada.

RICORDA CHE I 0.006s NON SONO IL TEMPO CHE CI IMPIEGA VERAMENTE IL PROGRAMMA MA SONO DEI SECONDI AGGIUNTI DAL TESTER E INDICANO QUANTO IL TESTER HA IMPIEGATO A CHIUDERE IL PROGRAMMA

alessiodellasanta (11830 points)
7 13 34
commented Oct 25, 2020 by alessiodellasanta (11,830 points)
Il problema penso proprio sia questa questione dei tanti if.

Al momento per il controllo del punteggio utilizzo una lista che contiene 7 tuple, ed ogni tupla è associata ad un punteggio... ossia, se la lettera "A" si trova nella tupla 0 della lista, aggiunge 1 al risultato. Altrimenti, controlla la tupla 1, 2, 3 etc.

Non ho ancora abbastanza condifenza con i dizionari, tempo permettendo li imparo e creo un controllo che li utilizzi. Grazie mille :)
cini.1933403 (660 points)
2 7 12
commented Oct 25, 2020 by cini.1933403 (660 points)
edited Oct 25, 2020 by cini.1933403
L'utilizzo delle tuple non sembra adatto per il nostro scopo, è anche lungo scriverle il che rende il tutto molto noioso. Per come le hai usate penso sia addirittura equivalente una sola variabile contenenti le lettere che hai messo nella tupla (moltiplicato per ogni tupla ovviamente), risparmiandoti di scrivere un mare di virgole e spazi.
Le tuple sono strutture dati molto veloci, ma dovresti tirarci fuori dei dati per sfruttarle al meglio, al momento ti ci affacci e ci guardi dentro quindi non le stai realmente usando.

Per i dizionari, l'ultima lezione del Prof.Sterbini spiega ben oltre quello che può servirci per risolvere l'hw, ti consiglio di andare a vedere almeno la sessione iPython.

****non so perchè ma non posso fare reply alla risposta e prendere eventuali like... vabè spero di esserti di aiuto
g
giacomo_venturini (6680 points)
2 5 39
commented Oct 25, 2020 by giacomo_venturini (6,680 points)
Prova a rivedere anche come hai impostato i cicli, scorrere 200 elementi per vedere se corrispondono a 10 è ovviamente più dispendioso che fare il contrario
alessiodellasanta (11830 points)
7 13 34
commented Oct 25, 2020 by alessiodellasanta (11,830 points)
Grazie mille ragazzi ! :)