Fail _foto_10___6_ter___40__17871_

plm (18850 points)
7 15 118
asked Nov 29, 2019 in HW1 opzionale by plm (18,850 points)
edited Nov 29, 2019 by plm
Ho un dubbio su questo esercizio specifico, consegnando l'homework mi aspettavo di passare tutti i test come sul mio pc, però mi va in timeout, nonostante abbia un tempo di esecuzione di 800ms sul mio pc abbastanza vecchiotto e 600ms su quello più recente. La mia domanda è: come faccio a migliorare ulteriormente il tempo? Scorro l'immagine una volta sola e faccio solo due controlli per ricavarmi il quadrato, ovvero prendo tutti i segmenti verticali e orizzonati del vertice in alto a sinistra e la stessa cosa per il vertice in basso a destra(ovviamente invertito). Non saprei come fare meglio onestamente, mi sembra proprio il numero minimo di operazioni che io possa fare. L'unica cosa che non capisco è perchè venga conteggiato nell'esercizio il tempo del load, visto che apparentemente influisce non poco in termini di tempo per essere effettuato (Solo per questo esercizio ci mette in media 300 ms e non è ottimizabile).

EDIT: effettivamente non è un problema del load visto che alla fine il test risulterebbe più basso senza contare il load stesso, per cui probabilmente "dovrei prendermela" con la VM che è più lenta di un pc del 2014 :(
446 views

4 Answers

Best answer
a
andreaamici (1740 points)
9 12 21
answered Nov 29, 2019 by andreaamici (1,740 points)
selected Nov 29, 2019 by plm
Esattamente lo stesso problema mio,sui miei computer li passo tutti i test,poi alla consegna questo test non passa...effettivamente anche io stavo vedendo che il tempo del load influisce e non poco sul tempo finale,sinceramente non so più come renderlo ancora più efficiente
plm (18850 points)
7 15 118
commented Nov 29, 2019 by plm (18,850 points)
Secondo me non ha senso proprio che il load influisca sul tempo.. è una libreria data dal prof. senza la quale noi non potremmo svolgere l'esercizio.

E' come se chiedessi a Valentino Rossi di farmi il giro veloce al Mugello e contassi il tempo del giro più il tempo che ci ha messo a mettersi la tuta e a scaldare la moto....
edoardottt (8210 points)
1 3 37
commented Nov 29, 2019 by edoardottt (8,210 points)
Anche io sono d'accordo..ma sarebbe la stessa cosa senza...se il load impiega 300ms e lo si togliesse nel conteggio dei test, i test dovrebbero essere svolti in 700ms e non 1s.
plm (18850 points)
7 15 118
commented Nov 29, 2019 by plm (18,850 points)
Comunque sul pc io passerei i test in 500ms senza contare il load e comunque non li passa, probabilmente il vero problema è la VM lol
edoardottt (8210 points)
1 3 37
answered Nov 29, 2019 by edoardottt (8,210 points)

Il tempo impiegato dal load é messo in conto nei test.
QUI e QUI trovi dei consigli utili ;)

plm (18850 points)
7 15 118
commented Nov 29, 2019 by plm (18,850 points)
Nel senso che se il load ci mette 40 secondi e la mia funzione 1 ms non vengono conteggiati i 40 secondi ?
edoardottt (8210 points)
1 3 37
commented Nov 29, 2019 by edoardottt (8,210 points)
No. Nel senso che il load sulla VM impiega x. Il tuo algoritmo impiega y. Il timeout del test é 1. Il tuo y deve essere minore di 1 - x. Anche togliendo il load nel conteggio del time-out, si abbasserebbe il tempo di timeout, quindi il tuo y comunque dovrebbe essere minore di 1 - x. Spero di essermi spiegato :)
Lorenzo Cristini (10830 points)
0 0 27
answered Nov 29, 2019 by Lorenzo Cristini (10,830 points)
Probabilmente lo hai fatto, ma hai provato a ciclare fino a quando sei sicuro che il pixel verde non avrà abbastanza spazio per essere un vertice di un quadrato di lunghezza lato*k? Questo potrebbe velocizzarti di un pó le cose
J
Jan Rogala (7260 points)
3 4 37
answered Nov 29, 2019 by Jan Rogala (7,260 points)
Molte volte non e' il fatto di fare meno operazioni possibili che ti fa andare piu veloce il codice, ma come te le gestisci, per dirti io scorro due volte l'immagine, una volta per trovarmi la griglia e tutti i dati che mi servono(come il primo pixel, la distanza da un pixel verde e un'altro ecc.), e un'altra volta dove mi scorro parte dell'immagine che corrisponde alla griglia. Devi cercare di far fare al tuo codice meno passaggi possibili, ma cio non coincide col fare meno controlli