dubbio sull HWopz

nick98 (700 points)
3 11 14
asked Oct 19, 2020 in HW1 opzionale by nick98 (700 points)
edited Oct 19, 2020 by nick98
ciao a tutti,

ho un dubbio sull' HW, lavorandoci notavo che fallivo sempre il test con 20k 1 allora ho inserito un controllo per vedere se tutti gli elementi della lista fossero uguali in modo da velocizzare l' algoritmo, ora passo tutti i test non so però se questo è considerato un metodo "etico" ed accettabile oppure devo trovare un algoritmo migliore in generale.

voi  avete risolto diversamente?
336 views

8 Answers

automatedsensei (310 points)
0 0 3
answered Oct 19, 2020 by automatedsensei (310 points)
Buongiorno. Tecnicamente penso che utilizzare questo metodo sia considerato barare, mi spiego meglio: scrivendo il codice tu non dovresti essere al corrente delle diverse tipologie di test cui il tuo algoritmo viene sottoposto, quindi effettuare controlli su test specifici implica il fatto che tu conosca suddetti test.

Buona giornata :)

S.B
lwcs (1380 points)
4 15 26
commented Oct 19, 2020 by lwcs (1,380 points)
Non credo voglia dire barare se noi ipotizziamo un caso in cui nella stringa è presente solo un tipo di carattere numerico ripetuto piu volte diviso dalla virgola.Chiaramente per far si che il programma funzioni,e credo che il professore accetti e che non voglia dire un 'barare' quindi,il codice per quel rispettivo caso deve funzionare con qualsiasi tipo di carattere numerico e non solo con gli '1'.Nel senso che se io leggendo il test vedo che la stringa è composta da 20000 '1' : mettere ad esempio un

if sum(lista_di_1) == 20000:

    risultato = calcolo per il risultato

return risultato

potrebbe sembrare un 'barare' in questo modo,ma oltretutto se al posto degli '1' ci metti dei '2' il codice nemmeno funzionerebbe più.Ricapitolando credo non sia un 'barare' ottimizzare un codice ipotizzando che la stringa sia composta solo da un tipo di elemento numerico,l'importante è andare incontro alla vastità di elementi differenti che si potrebbero presentare come unico elemento della stringa (virgola apparte).
C
ColellaV (1040 points)
2 3 9
answered Oct 19, 2020 by ColellaV (1,040 points)
Considera anche che gli homework con voto verranno testati anche con dei test segreti che solo il professore conosce proprio per evitare di ottimizzare il codice per test specifici
Marco Freddi (1420 points)
1 2 16
answered Oct 19, 2020 by Marco Freddi (1,420 points)
Cerca di ottimizzarlo per essere abbastanza veloce da eseguire quel test, senza controllo specifico, dato che quel test è un esempio di un caso lungo, dati i 20.000 uno.
Immagina di scambiarne uno con un 2, i tempi risalirebbero drasticamente solo con una lieve variazione, perciò non concentrarti su casi specifici, pensa a tutte le possibilità.
giordano_sannino (13650 points)
7 16 81
answered Oct 19, 2020 by giordano_sannino (13,650 points)

Non penso! Quel test penso sia fatto per testare il programma nel caso dove le iterazioni che deve fare siano molte(perchè arrivando al subtotal di 1000 con tutti 1 ci mette molto, ugualmente poi partendo dalla posizione 2 e cosi via).

Tu così stai lavorando sull'input specifico e quindi penso non valga, e inoltre non funzionerebbe per altri input! ti spiego il perchè:

Se la lista fosse [2,1,1,1,1....] il tuo controllo non funzionerebbe, ma il programma fallirebbe lo stesso il test perchè restano comunque tantissime iterazioni da fare, uguale se il 2 si trovasse in seconda posizione.

I
IvanSpaccatrosi (240 points)
0 0 2
answered Oct 19, 2020 by IvanSpaccatrosi (240 points)
Secondo me è una cosa ottima da fare dato che si sta solo considerando un'eventuale opzione di input. è un controllo che andrebbe fatto anche senza conoscere gli input dato che è possibile succeda e permette appunto di velocizzare l'esecuzione.
SimoneBd96 (2430 points)
5 11 33
answered Oct 19, 2020 by SimoneBd96 (2,430 points)
Io ti consiglio di provare prima a capire bene (ma molto bene) il problema, e poi trovare una soluzione, la soluzione deve essere una soluzione "generica" nel senso che deve essere scollegata dallo specifico input, deve funzionare comunque, in modo tale che non ti devi preoccupare di quest'ultimo. Ovviamente devi pensare a dei casi che possono mettere in crisi la tua soluzione, e cercare di fare dei controlli, ma questo lavoro deve essere limitato!

Buon lavoro! :)
angelo.spognardi (4120 points)
31 49 79
commented Oct 19, 2020 by angelo.spognardi (4,120 points)
Mi permetto di inserire un commento: trovare una ottimizzazione nel modo di risolvere sfruttando una particolare caratteristica del problema va benissimo a patto che sia una ottimizzazione GENERALE che viene applicata a tutte le possibili istanze del problema che hanno quella caratteristica. Quindi: la tua soluzione va bene se la applichi sistematicamente a tutti gli input che ricevi.
Loriv3 (7960 points)
8 20 84
answered Oct 20, 2020 by Loriv3 (7,960 points)
Sinceramente non è eticamente scorretto dato che se questa tua soluzione vada bene per tutti i casi in cui gli elementi sono identici penso sia un'ottima soluzione dato che sono casi che possono accadere e vanno valutati e risolverli così va assolutamente bene. Di sicuro esiste qualcosa di più veloce ma finché è corretto va benissimo così
l
luca.ronca (600 points)
0 0 5
answered Oct 21, 2020 by luca.ronca (600 points)
Sicuramente è un approccio, c'è da dire però che era stato detto che l'algoritmo deve essere ignaro del tipo di input che viene passato, probabilmente quindi c'è modo per ottimizzarlo anche senza fare controlli su come è strutturato l'input.