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.

ottimizzazzione esercizio

L
LucaMattei (840 points)
5 22 27
in Es2 by (840 points)
cercherò di non entrare troppo nel dettaglio con il codice, comunque riesco a superare tutti i test tranne l'ultimo (per timeout), ovviamente è il piu difficile essendo tutti numeri pari. Qualche consiglio su come migliorare il programma? il mio problema principale penso sia nel sort della lista ottenuta, per contare gli spazzi uso lo split della stringa e faccio il len come primo valore della tupla dell'ordinamento, ma per la seconda uso una funzione di appoggio dove faccio un for sullo split della stringa e trasformo tutto in numeri, pensate sia migliorabile?

altri consigli generici, magari usare dizionari (ho provato ma utilizzarli nella ricorsione mi sembra difficile)

grazie mille :)
510 views

2 Answers

_andrea_ (45670 points)
13 42 297
by (45.7k points)
Sicuro sia quella la parte che richiede più tempo? Anche io non superavo l'ultimo test ma la parte lunga era quella in cui generavo le foglie, per l'ordinamento ci metteva praticamente nulla
L
LucaMattei (840 points)
5 22 27
by (840 points)
sono abbanstanza sicuro sinceramente ma provo a controllare anche il resto anche se non mi sembra si possa ottimizzare, piu che altro invece che creare l'insieme (che poi andrà trasformato in lista) volevo provare a creare un dizionario che ha come chiave il valore in stringa e come valori i due richiesti dall'ordinamento, cosi sarebbe facile ordinare, ma creare un dizionario ricorsivamente mi tornava difficile
_andrea_ (45670 points)
13 42 297
by (45.7k points)
Metti un print dopo la riga in cui crei l'albero e un print dopo l'ordinamento. Vedi quale ci mette di più. Sicuramente è l'albero
v
val9 (9770 points)
6 30 53
by (9.8k points)
Avevo anch'io questo problema. La parte in cui il programma risultava più lento era quella in cui facevo lo split e convertivo tutto in numeri per ogni chiamata. Anziché passare una stringa alla funzione ricorsiva, prova a passarle direttamente la lista di interi.
_andrea_ (45670 points)
13 42 297
by (45.7k points)
Lui dice proprio alla fine, quando deve ordinare la lista risultato
L
LucaMattei (840 points)
5 22 27
by (840 points)
non era quella la mia domanda ma posso provare, magari anche quello rallenta thx :D
v
val9 (9770 points)
6 30 53
by (9.8k points)
Non credo un sort finale possa influire tantissimo...a meno che non usi altre operazioni pesanti all'interno.
L
LucaMattei (840 points)
5 22 27
by (840 points)
l'ho scritto nel post uso come primo elemento di sort uno split(non credo sia tanto costoso) e come secondo una funzione di appoggio spiegata sopra, per quello temevo che il sort mi costasse molto
_andrea_ (45670 points)
13 42 297
by (45.7k points)
fai come ti ho detto nella mia risposta: metti due print, uno subito dopo aver creato le foglie, e uno subito dopo aver ordinato. avvia i test e vedi quale dei due ci mette di più a essere stampato. quello allora sta dopo la parte più lenta