Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Peer Assessment (Argomenti ancora non affrontati)

M
MatteoB (1690 points)
10 16 21
in HW2 obbligatorio by (1.7k points)
Come faccio a valutare un algoritmo che è stato svolto con degli argomenti da me ancora non affrontati?

Non voglio penalizzare nessuno anche perchè magari l'algoritmo che ho davanti supera tutti i test tranquillamente
626 views

5 Answers

AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)
Giustissima osservazione, ci avevo pensato anch'io (anche se non mi è capitato di non conoscere gli argomenti) e penso che sia un problema. Uno dei tanti di questo PA
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)

In teoria un algoritmo dovrebbe poter essere decontestualizzato rispetto al linguaggio di programmazione con cui viene implementato (in questo caso Python). Quello che intendo dire è che in teoria la descrizione che viene consegnata non dovrebbe poter contenere "argomenti non ancora affrontati" proprio perché non ha lo scopo di descrivere il codice ma solo l'idea - algoritmica - che c'è dietro, al di là degli argomenti o delle nozioni che bisogna conoscere per poterlo implementare praticamente.

Se la descrizione che hai ricevuto è effettivamente troppo tecnica ti consiglierei di suggerire di migliorarla (in vista dei prossimi HW) per poterla rendere comprensibile anche senza conoscere i tecnicismi del linguaggio.

fc-dev (16450 points)
16 20 34
by (16.5k points)
Beh, un esempio banale di argomento non ancora affrontato è quello di utilizzare la OOP per risolvere l'HW2, in quel caso chi non conosce l'OOP non capirà un granché dell'algoritmo nonostante possa essere scritto in modo super-chiaro e basilare.
AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)
Un altro esempio è descrivere una struttura che è una mappa. È un concetto non immediato per uno che non l'ha già visto (nella lezione dei dizionari)
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
Anche con il concetto di classi e oggetti il discorso non cambia, non dovresti dire "creo un oggetto" o "applico una funzione" ma solo una descrizione dei passaggi che effettui per risolvere il problema, che poi sia implementata in Python o ci si metta uno a svolgere le operazioni su carta una alla volta dovrebbe poter essere applicabile
fc-dev (16450 points)
16 20 34
by (16.5k points)
@AndreaGasparini Non proprio, ad esempio se uno dice "creo un dizionario di piloti in cui ogni pilota contiene il suo precedente e il suo successivo nella lista originale" dopo aver contestualizzato che i piloti sono oggetti ha senso, prima... meh.
Alla fine l'algoritmo è dipendente dalla struttura dati utilizzata.
Ad esempio l'algoritmo base con liste sarebbe un algoritmo completamente diverso in C proprio a livello di operazioni da fare a fronte del fatto che gli array in C sono strutturalmente diversi dalle liste in python.
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
Io sto parlando della definizione di Algoritmo, che è semplicemente una serie di passaggi da effettuare indipendentemente dal fatto che tu utilizzi Python o C per realizzarne un'implementazione. Proprio per quello che dici tu devi generalizzare il procedimento e non vincolarti ai costrutti del linguaggio, così che anche se si cambia tecnologia (che sia passare da Python a C o allo svolgimento manuale di ogni passaggio) l'algoritmo resti applicabile.
fc-dev (16450 points)
16 20 34
by (16.5k points)
Anche se la definizione di algoritmo astrae dalla struttura dati questo non è sempre possibile.

Ad esempio in questo preciso esercizio nel caso delle liste visto che siamo in Python possiamo dire "rimuovo l'elemento alla posizione n dalla lista", ma in C "rimuovo l'elemento alla posizione N dalla lista" non ha alcun significato, non puoi "rimuovere un elemento dalla lista".

Puoi shiftare tutti gli elementi con indice maggiore di N indietro di 1 e diminuire di 1 la variabile con cui ti segni la dimensione dell'array per fare i cicli.

Vuoi dire che se stai descrivendo un algoritmo generalizzato puoi dire che stai cancellando l'elemento anche in C?

Oh certo, puoi dirlo, ma a questo punto se ometti parti essenziali dell'algoritmo perché dai per scontato che l'implementazione di quelle parti non sia rilevante...
Cosa ti impedisce di descrivere un programma fatto con i dizionari con la stessa descrizione di un programma fatto con le liste?
In fondo in entrambi cancelli l'elemento e in entrambi sposti l'elemento, il come non è importante secondo il tuo ragionamento.

Se astrai completamente dal tipo di dato l'algoritmo diventa talmente astratto da perdere di significato.

L'intero algoritmo sarebbe questo:
"Per ogni evento se è un eliminazione elimino il pilota specificato, se è un un sorpasso lo faccio sorpassare dal pilota successivo."
E
Edward (25950 points)
4 4 172
by (26.0k points)
Vorrei far notare che dare 0 stelle a tutto perchè non si conosce l'argomento, non equivale a non dare voto.

Equivale appunto a dare 0 come voto, che fa media.
T
Trasciatti (1400 points)
13 20 34
by (1.4k points)
Penso che dipenda. Un algoritmo spiegato in modo chiaro ti dovrebbe far capire l'idea che qualcuno ha avuto, piuttosto che quali strutture dati / algoritmi già conosciuti ha usato per ottimizzare una determinata cosa. In generale gli Homework non hanno bisogno di chissà quale conoscenza, e gli argomenti vanno di pari passo col corso, quindi chi sa già argomenti più avanzati non è che abbia un grande vantaggio, anzi da quel che ho notato vengono proposti problemi dei quali si sa che non c'è una vera ed unica soluzione migliore
plm (18850 points)
13 15 118
by (18.9k points)
Io punterei sull'essere onesto e basta, Scrivi che non sai come comportarti visto che l'algoritmo è stato sviluppato con conoscenze che ancora non hai acquisito.