Ottimizzare ese1

Sickboy (28240 points)
4 24 68
asked Oct 22, 2018 in Es1 by Sickboy (28,240 points)
Non saprei proprio come ottimizzare il mio codice per renderlo più veloce, per ora ho una decina di righe di codice e nel complesso 2 for e 1 if, solo che col timeout l'ultimo test non lo passa, qualche consiglio??
405 views

3 Answers

Best answer
u
ugo.monticone (1220 points)
0 3 13
answered Oct 22, 2018 by ugo.monticone (1,220 points)
selected Oct 22, 2018 by Sickboy
Avevo il tuo stesso problema. poi ho ragionato sull'ordine dei cicli della mia soluzione ed ho riscontrato che due cicli annidati (a indici x e y, per esempio) si traducono in x*y ripetizioni. Analizzando il problema da un altro punto di vista, ho capito che potevo ridurre il tutto a cicli di ordine 1, cioè non annidati e sono rientrato nei tempi stabiliti!
DRDLCN (8070 points)
3 67 104
commented Oct 22, 2018 by DRDLCN (8,070 points)
alessioclemente (19640 points)
1 66 153
commented Oct 22, 2018 by alessioclemente (19,640 points)
In pratica hai usato 2 cicli separati?
u
ugo.monticone (1220 points)
0 3 13
commented Oct 22, 2018 by ugo.monticone (1,220 points)
mi sono chiesto come potevo ottenere il risultato richiesto riducendo al minimo lo sforzo. mi sono accorto che, per fortuna, ci sono molti modi diversi di risolvere l'esercizio e tutti giusti. Questo è vero fino a quando non ti ritrovi a dover fare i conti col cronometro: allora mi sono detto:"come posso calcolare il numero di ammessi in base al voto?" Ho rigirato la domanda fino a farmela andare bene. se trovi i due cicli giusti, annidati o no, stanno nei tempi!!
DRDLCN (8070 points)
3 67 104
answered Oct 22, 2018 by DRDLCN (8,070 points)
I cicli for sono annidati?
Sickboy (28240 points)
4 24 68
commented Oct 22, 2018 by Sickboy (28,240 points)
In pratica si anche se quello più interno l ho messo in una funzione
Xriuk (13590 points)
0 24 116
commented Oct 22, 2018 by Xriuk (13,590 points)
Se sono annidati ci sono comunque parecchie iterazioni
Sickboy (28240 points)
4 24 68
commented Oct 22, 2018 by Sickboy (28,240 points)
Infatti chiedevo un consiglio per migliorare
Xriuk (13590 points)
0 24 116
answered Oct 22, 2018 by Xriuk (13,590 points)
Il numero delle righe non conta, quello che cambia da un algoritmo a un altro è la logica, se il tuo non passa il timeout vuol dire che stai facendo qualche operazione "pesante" o ripetitiva. Non sapendo il tuo codice, il mio consoglio è quello di controllare se richiami qualche funzione di troppo nei tuoi cicli oppure se puoi saltare qualche iterazione (ad esempio far avanzare un contatore in un determinato modo)
Sickboy (28240 points)
4 24 68
commented Oct 22, 2018 by Sickboy (28,240 points)
Non richiamo funzioni di troppo, e gli indici partono già da una posizione avanti
N
Nikolay (1250 points)
0 21 30
commented Oct 23, 2018 by Nikolay (1,250 points)
Sto facendo es1 del homework1. Per ora la mia funzione non passa nessun test. Per ora vorrei capire se sto procedendo nel modo giusto. Ho scaricato homework1.zip. Dopo ho installato i plugin necessari, dopo di che ho implementato la funzione es1(voti). Compilatore non passa nessun, il primo errore e' questo test_2_valori_soli_grandi_1__300__800_ (__main__.Test)
tuple() -> empty tuple ... FAIL. Prima domanda e' questa : devo cimplementare funzione es1(voti) che restituisce il numero degli studenti che abbiano preso un certo voto. Giusto?
Xriuk (13590 points)
0 24 116
commented Oct 23, 2018 by Xriuk (13,590 points)
Se hai un problema ti consiglio di fare una domanda separata.
Comunque no, la tua funzione deve restituire una lista e per ogni voto da 0 al voto massimo il numero di studenti con un voto maggiore o uguale al voto.
N
Nikolay (1250 points)
0 21 30
commented Oct 23, 2018 by Nikolay (1,250 points)
Grazie, Roman. In effetti ho sbagilato io a fare domanda, cioe la funzione deve restituire una lista che va da 0 al voto massimo(ad esempio da 0 a 5), e in ogni posizione(che rappresenta il voto) il numero degli studenti ammessi. Un esempio se ho una lista dei voti ls = [1,1,3,3,3,5,5,5,5] mi deve restituire studenti_ammessi = [0,2,0,3,0,4]. Giusto?
Xriuk (13590 points)
0 24 116
commented Oct 23, 2018 by Xriuk (13,590 points)
In questo caso ti dovrebbe restituire [9, 9, 7, 7, 4, 4] (i voti che non ci sono fra gli studenti vanno considerati comunque), e non assumere che la lista dei voti sia già ordinata in partenza
N
Nikolay (1250 points)
0 21 30
commented Oct 23, 2018 by Nikolay (1,250 points)
Grazie, Roman, sei stato molto di aiuto!
D
Deacoon (9100 points)
3 33 53
commented Dec 5, 2018 by Deacoon (9,100 points)
togli i for annidati
Sickboy (28240 points)
4 24 68
commented Dec 5, 2018 by Sickboy (28,240 points)
Che tempismo