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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Miglioramento delle tempistiche

a
antonio_varlese (370 points)
2 4 7
in HW2 obbligatorio by (370 points)
Ho concluso oramai da ore l'hw2, nella prima stesura passavo 14 test su 16, dunque mettendomici ho riscritto un paio di volte il codice ed ottimizzato fin dove potevo, arrivando a passare 16 test su 16 nelle tempistiche previste.... sul mio pc.
Il tanto odiato test_1_esempio5 nul mio pc impiega tra i 1.47 e 1.49 secondi (facendo una stima), ma sulla vm non riesce ad avere un tempo decente. Non saprei più come ottimizzare il codice personalmente e so benissimo di non poterlo inviare dunque l'aiuto sarà limitato. Chi ha dei consigli sono ben accetti, molte cose le ho già attuate, ma chissà che altri non trovino utile questo post.
1.3k views
closed

3 Answers

Best answer
E
Edward (25950 points)
4 4 172
by (26.0k points)
selected by
Molti di noi passano tutti i test sul nostro pc, ma sulla vm vanno un po' più lenti. Ma i professori hanno fissato il timeout in base alle tempistiche della vm. Se hai ottimizzato al massimo il codice, allora è probabilmente l'approccio che è da cambiare.

Una cosa sicuramente utile è cercare un modo per ridurre il numero di scambi che vengono fatti, e cercare di ridurre il numero di accessi effettuati a dizionari o liste (che di per se non hanno un grande costo, ma ripetuto per oltre un milione di volte si fa sentire).

Io come ha detto @gian- avevo usato un dizionario per matchare i piloti, e rendendolo il più efficiente possibile ero riuscito ad avere sui 1.48s per il test 5 (sulla vm). Quindi teoricamente è possibile usare quell'approccio, ma devi ridurre al minimo il numero di scambi che fai.
A
Adriano (940 points)
7 16 23
by (940 points)
Mi trovo nella stessa situazione: 1,47s per il test 5, ottimizzando più che potevo quell'algoritmo. Alla fine hai cambiato completamente algoritmo o sei riuscito ad ottimizzare ancora?
E
Edward (25950 points)
4 4 172
by (26.0k points)
Ho cambiato algoritmo
plm (18850 points)
13 15 118
by (18.9k points)
Immagino che tu abbia già usato i dizionari? Nel caso tu non l'abbia fatto te lo consiglio vivamente
a
antonio_varlese (370 points)
2 4 7
by (370 points)
Penso che fare questi tempi senza i dizionari sia impossibile
gian- (1170 points)
1 7 17
by (1.2k points)
Io in locale passo tutti i test per 2 secondi, su q2a il 5 non me lo passa.

Comunque l’idea è quella di creare un dizionario che matcha ogni pilota con quello dietro e con quello davanti, e conviene usare una lista per farlo.

Il problema è che quando c’è un sorpasso in quanto bisogna fare almeno 4 modifiche al dizionario.. il che rallenta di molto a quanto pare
a
antonio_varlese (370 points)
2 4 7
by (370 points)
Il mio algoritmo si basa sullo stesso identico concetto
Non metto in mezzo la questione dell'ordinamento finale perchè in quel test vanno ordinati solo 10 elementi dunque il tempo è insignificante (a meno che ovviamente non si scrivano cose senza senso)
gian- (1170 points)
1 7 17
by (1.2k points)
Si sta tutto nei sorpassi, almeno per me
a
antonio_varlese (370 points)
2 4 7
by (370 points)
Ho usato il codice che sta nei test per capire quanti eventi ci fossero tra sorpassi e ritiri e sono più di 1 milione
LucianoBlasetti (800 points)
2 2 6
by (800 points)

Sul mio PC termino tutti i test in meno di un secondo. Il tempo di esecuzione della funzione per test_1_esempio5 è di appena 650 millisecondi. Tanto per darvi un'idea, la parte di creazione delle liste per il test in questione ci impiega circa 300ms (quindi fuori dall'algoritmo).

Sulla VM lo stesso test sfora il secondo e mezzo...

Ho qualche dubbio circa le performance della VM...forse è sovraccarica.

andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
No, hai un PC figo