Errore timeout sul test da 1 mln di elementi

P
Pierfederici_ (280 points)
3 6 7
asked Oct 30, 2020 in HW2 obbligatorio by Pierfederici_ (280 points)
Per chi è riuscito a passare tutti i test chiedo quale accorgimento particolare ha avuto per non andare in timeout negli ultimi 2 test. Partendo dal presupposto che con un solo for mi analizzo tutte le liste quindi ho complessità O(n) il mio programma impiega 7 millesimi in più del dovuto D:
173 views

3 Answers

AdSum (16290 points)
9 20 134
answered Oct 30, 2020 by AdSum (16,290 points)
Il programma non impiega 7 ms in più, per vedere il tempo effettivo devi calcolarlo o attivando la modalità debug del test.py o con la libreria time.

Inoltre i cicli non sono l'unica cosa che appesantiscono il programma, anche la chiamata di funzioni, assegnazioni e calcoli vari influiscono, ad esempio la mia prima bozza utilizzava 2 o 3 cicli (non ricordo bene) e passava tranquillamente tutti i test. Il mio consiglio è di controllare quali blocchi di istruzioni ti stanno assorbendo la maggior parte del tempo e snellirli il più possibile rimuovendo le parti superflue e/o semplificabili
Romitoskj (8620 points)
4 7 40
answered Oct 30, 2020 by Romitoskj (8,620 points)
Avevo il tuo stesso problema, quello che ho fatto è stato utilizzare il line profiler per trovare l'istruzione più onerosa in termini di tempi d'esecuzione e cercare di sostituirla con istruzioni più semplici. Nel mio caso eliminavo ogni volta la parola giocata dalla lista, che, pur non essendo un operazione  molto dispendiosa, quando veniva svolta molte volte nei test più grandi impiegava molto tempo.

Nota: se il timeout viene superato l'esecuzione viene interrotta, quindi i 7 ms di troppo non sono il tempo effettivo in cui la tua funzione viene completata ma il tempo in cui viene interrotta.
F
Figara93 (560 points)
1 2 7
answered Oct 31, 2020 by Figara93 (560 points)
dipende da come hai impostato l' algoritmo... potresti provare ad usare qualche variabile(dove possibile) per non dover far eseguire un qualcosa che non è soggetto a modifiche più volte all' interno del tuo codice.