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.

Problema con il tempo di output

G
Giacomozm (1440 points)
19 59 68
in Es1 by (1.4k points)
Su liste brevi e medie il codice che ho scritto non da alcun tipo di problema, ma quando deve affrontare liste come la terza del grader formata da tutti numeri grandi impiega molto tempo. Non so se sia un problema della macchina. Qualcuno ha questo problema?
376 views
closed

3 Answers

Best answer
Auron (15880 points)
50 126 194
by (15.9k points)
selected by
Probabilmente hai impostato un ciclo che si ripete n volte che controlla se n sia divisibile per l'indice del ciclo... Ora, per numeri medi e piccoli, la macchina ti sostiene (in maniera più o meno accettabile)... Ma tu immagina, per i numeri grandi, di essere nell'ordine di 50/60 miliardi... Ecco, adesso immagina che tu stai chiedendo computer di gestire un ciclo che viene ripetuto 60 miliardi di volte per il numero 6437635961, più 50 miliardi di volte per il numero 5311430407... e così via... Puoi capire da te che se la macchina potesse parlare ti direbbe "Amico mio, io te lo faccio questo conto, ma mi prendo il tempo che mi serve"... che non è poco... L'unica cosa da fare è prevedere dei controlli aggiuntivi che ti permettano di ridurre il numero di cicli e/o di numeri da controllare, in modo da abbassare drasticamente il tempo di esecuzione...

Consiglio: Una delle possibilità è quella di poter dimezzare il tempo di esecuzione per ben due volte, con due controlli diversi (puoi trovare più informazioni su un altro mio post in questo forum... e già il fatto di "dimezzare" dovrebbe farti avere qualche idea)...

Ma questo è solo uno dei controlli, io ne ho implementati anche altri... fai delle prove, divertiti a sperimentare e vedrai che scoprirai nuovi modi di vincere sulla macchina ;)
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)

Ciao Giacomozm!

Si è normalissimo, come già precisato in un precedente post la macchina utilizza per ogni cosa il metodo della forza bruta per effettuare i calcoli, ciò gli permette di effettuare calcoli molto complessi in tempi brevissimi. Tuttavia concorderai con me che dandogli numeri esponenzialmente troppo grandi, metterai in difficoltà la macchina stessa. Voglio precisare non c'è nulla di sbagliato nel tuo codice, solo impiega troppo tempo ;)

Prova a pensare a una o più tecniche per ridurgli i calcoli!

Buon code!

Leonardo Emili

P.s. ora ti linko la discussione precedente così che tu possa capire istantaneamente il problema!

.

Come promesso, ecco a te la discussione riguardo quest'argomento! :D

http://q2a.di.uniroma1.it/526/tempo-di-esecuzione-maggiore-ai-30-secondi

francesco.dev (33560 points)
21 51 129
by (33.6k points)
Ciao!

Come ti consiglia Auron, devi per forza di cosa elaborare una soluzione diversa da quella ovvia di controllare tutti i numeri fino a raggiungere n!

Quindi, come già ho consigliato in un altro quesito, bisogna pensare principalmente al problema matematico e solo alla fine scrivere codice per creare una soluzione logica!

- Francesco Pio Scognamiglio
Auron (15880 points)
50 126 194
by (15.9k points)
Aggiornaci sul tuo successo :D