La scrittura del codice è ancora considerata una rappresentazione algoritmica? [chiuso]

StackOverflow https://stackoverflow.com/questions/263834

  •  06-07-2019
  •  | 
  •  

Domanda

Ho appena perso il 50% della mia risposta in un test perché ho scritto il codice invece di un algoritmo sul mio medio termine, portandomi da una A a una C. La scrittura del codice è ancora considerata una rappresentazione algoritmica?

Wikipedia: Algorithm Representation (poiché lo stile di programmazione è praticamente basato sul consenso)

EDIT: Ok, quindi vorrei chiarire alcuni punti:

  1. Il test ha richiesto lo pseudo-codice, che non abbiamo mai veramente "definito" in classe; abbiamo appena scritto l'inglese per i nostri algoritmi.

  2. È una classe Java e ha scritto l'intera soluzione in un metodo Java, insieme ai commenti. Tutto questo è stato scritto a mano e ha impiegato più tempo a scrivere rispetto allo pseudo-codice. Ho pensato che sarebbe stato più chiaro.

  3. Normalmente non farei un problema su tali cose, ma è la differenza tra una A e una C e ho una borsa di studio a cavallo dei miei esami.

  4. Infine, sto pubblicando questo post per due motivi:

    4.1 Voglio mostrare cosa pensa la moderna comunità di programmatori sullo pseudo-codice e sulla rappresentazione algoritmica.

    4.2 Voglio sapere cosa è accettabile nel "mondo reale"; Sto programmando da un po 'di tempo, ma voglio essere in grado di contribuire presto a progetti open-source e non voglio fare passi avanti. (Anche se sono abbastanza sicuro che questo argomento abbia poche possibilità di emergere nel mondo reale).

Ancora una volta, grazie per qualsiasi aiuto / consiglio.

È stato utile?

Soluzione

Potresti voler fare un esempio. Se il tuo codice si concentra troppo su specifiche del linguaggio che non fanno parte dell'algoritmo, allora Comprensibilmente, si potrebbe dire che non hai misurato un algoritmo con l'algoritmo, risultando in un risultato errato.

Sento il ragionamento, il punto fondamentale dell'apprendimento è mostrarti capire il concetto, non piegarti e spuntare tutte le caselle giuste.

È possibile insegnare a un computer a passare l'università, ma non è ancora possibile insegnare a un computer a pensare da solo e applicare la conoscenza.

Mangia e rigurgita la mentalità è il motivo per cui non mi sono mai laureato.


Rispetto al tuo recente commento, è importante capire che lo pseudocodice non è definito. Ci sono generalmente termini riutilizzati in esso, ma non è un linguaggio rigoroso come non lo è l'inglese (altrimenti sarebbe essere un linguaggio di programmazione, che potrebbe essere analizzato ed eseguito alla lettera)

La importanza dello pseudocodice è quella di dare corpo alla logica parte del sistema e non doversi preoccupare eccessivamente della sintassi oltre "ha senso"

Spesso questo può rendere lo pseudocodice sia terse che più comprensibili.

Anche lo pseudocodice non si basa sul fatto che il lettore abbia una comprensione della "sintassi magica" nella lingua per elaborarla, tutto ciò che devono capire sono i termini usati.

Se dovessi dare alla persona media un algoritmo in perl, per esempio, la maggior parte delle persone morirebbe solo per l'orrore perché non vedono oltre i massetti del rumore della linea.

While:

sub foo { 
   my @args = @_ ; 
   my( $a, $b )=(@args[0],@args[1]); 
   for( @{ $a } ){
       $b .= 

Potresti voler fare un esempio. Se il tuo codice si concentra troppo su specifiche del linguaggio che non fanno parte dell'algoritmo, allora Comprensibilmente, si potrebbe dire che non hai misurato un algoritmo con l'algoritmo, risultando in un risultato errato.

Sento il ragionamento, il punto fondamentale dell'apprendimento è mostrarti capire il concetto, non piegarti e spuntare tutte le caselle giuste.

È possibile insegnare a un computer a passare l'università, ma non è ancora possibile insegnare a un computer a pensare da solo e applicare la conoscenza.

Mangia e rigurgita la mentalità è il motivo per cui non mi sono mai laureato.


Rispetto al tuo recente commento, è importante capire che lo pseudocodice non è definito. Ci sono generalmente termini riutilizzati in esso, ma non è un linguaggio rigoroso come non lo è l'inglese (altrimenti sarebbe essere un linguaggio di programmazione, che potrebbe essere analizzato ed eseguito alla lettera)

La importanza dello pseudocodice è quella di dare corpo alla logica parte del sistema e non doversi preoccupare eccessivamente della sintassi oltre "ha senso"

Spesso questo può rendere lo pseudocodice sia terse che più comprensibili.

Anche lo pseudocodice non si basa sul fatto che il lettore abbia una comprensione della "sintassi magica" nella lingua per elaborarla, tutto ciò che devono capire sono i termini usati.

Se dovessi dare alla persona media un algoritmo in perl, per esempio, la maggior parte delle persone morirebbe solo per l'orrore perché non vedono oltre i massetti del rumore della linea.

While:

| there is a subroute foo which can take a list of strings, and a default string, 
\-  which then iterates all items in  that list, 
| \-  and for each item in that list 
|     1. appends the contents of that item to the end of the default string
|     2. removes all instances of the string "id" in that item
| 
 \ and returns a list, which contains 
    1. the concatentated default string 
    2. the modified input list 

può dare un senso coerente a qualcuno esperto in perl, al lettore di codice medio tutto ciò che ottengono è un "ciò che diavolo hai appena detto" risposta. Documentarlo non aiuta molto.

<*>

All'improvviso diventa meno ambiguo e una maggiore percentuale di persone può capirlo.

Quindi probabilmente metà dell'esercizio con la scrittura dell'algoritmo è un esercizio di "Non solo devi dimostrare di capirlo, ma devi anche dimostrare che puoi spiegare il tuo ragionamento ad altri che non sanno nulla del problema" , che è un'abilità vitale di cui hai bisogno. Se non riesci a comunicare ciò che hai fatto, nessuno può usarlo.

c'è anche questo brutto piccolo problema con il codice, che non esiste in un algoritmo, e cioè che il codice può apparire giusto, ma potrebbe non fare ciò che pensi lo fa, e se non lo fa bene, e non ti rendi conto, le persone che leggono il reverse engineering del codice lo sporcano e copiano un algoritmo rotto . non bene. l'algoritmo in forma umana traduce meglio "questo è quello che voglio che faccia"

; s/id//g; } return [$b,$a]; }

può dare un senso coerente a qualcuno esperto in perl, al lettore di codice medio tutto ciò che ottengono è un "ciò che diavolo hai appena detto" risposta. Documentarlo non aiuta molto.

<*>

All'improvviso diventa meno ambiguo e una maggiore percentuale di persone può capirlo.

Quindi probabilmente metà dell'esercizio con la scrittura dell'algoritmo è un esercizio di "Non solo devi dimostrare di capirlo, ma devi anche dimostrare che puoi spiegare il tuo ragionamento ad altri che non sanno nulla del problema" , che è un'abilità vitale di cui hai bisogno. Se non riesci a comunicare ciò che hai fatto, nessuno può usarlo.

c'è anche questo brutto piccolo problema con il codice, che non esiste in un algoritmo, e cioè che il codice può apparire giusto, ma potrebbe non fare ciò che pensi lo fa, e se non lo fa bene, e non ti rendi conto, le persone che leggono il reverse engineering del codice lo sporcano e copiano un algoritmo rotto . non bene. l'algoritmo in forma umana traduce meglio "questo è quello che voglio che faccia"

Altri suggerimenti

In questo caso, devi rimandare al professore.

Devi fornire ulteriori informazioni. Ti è stato chiesto un algoritmo, ma hai fornito il codice. Hai commentato il codice? Quanto? (Mi piacerebbe vedere la domanda e la tua risposta, ma forse questo richiede troppo).

Quindi risponderò in base alla mia esperienza. Se sto chiedendo un algoritmo, allora voglio qualcosa che spieghi, in inglese decente, come risolvere il problema e / o soddisfare i requisiti della domanda. Anche i diagrammi sono buoni (a volte migliori). Paragrafo, forma del punto, qualunque cosa - deve solo essere chiaro, conciso e corretto.

Se mi fornisci il codice che fa quanto sopra, quindi il massimo dei voti. Tuttavia, se fornisci un codice che è "lingua" pura " e piuttosto criptico, quindi i segni andranno persi - più o meno a seconda di quanto sia effettivamente criptico il codice. Anche con il codice, mi piacerebbe vedere anche un diagramma, solo per mostrare la completa comprensione dei concetti.

Una delle cose più difficili che devo affrontare quando insegno a programmare è indurre gli studenti a scrivere DI PIÙ, non di meno. A volte ho dovuto ricordare loro che un compito (o un esame) non è una voce nel "concorso di codice più offuscato". ; -)

Saluti,

-R

Come selezionatore di un corso di algoritmi avanzati, vorrei sempre decollare punti se esiste semplicemente una soluzione codificata.

Alcune cose semplicemente non possono essere espresse in modo eloquente nel codice come in inglese. Lo pseudo-codice è un tentativo di liberarsi dalla sintassi del compilatore rigorosa e consentire una certa espressività. È un passo nella giusta direzione di comprensibilità, ma non sempre abbastanza.

Soprattutto in una classe di algoritmi, è sempre importante fornire una prova di correttezza (sia per induzione, contraddizione, ecc.), sia una notazione a grande O per la complessità spaziale e temporale dell'algoritmo .

Tutto quello che so è che non dovresti scrivere alcun codice fino a quando non hai un algoritmo.

Il problema con l'uso del codice anziché dello pseudocodice è che, in teoria, si potrebbe presumere che si tratti di codice, non di pseudocodice. Comunque, l'insegnante ti classifica per la tua risposta, non per la tua conoscenza - faresti meglio a rispondere a ciò che ti è stato chiesto, nei termini che l'insegnante preferisce. Sì, lo sappiamo tutti, lo sai meglio. Ma non è mai un brutto esercizio cercare di ragionare sulla strada di un'altra persona, lo sai. E almeno nel mio paese l'insegnante ha il diritto di valutarti liberamente, quindi ... va d'accordo con lui!

Parla con il tuo professore e chiedigli perché hai sbagliato la domanda. Chiedigli quale sarebbe la risposta giusta e quale sia la differenza fondamentale tra i due.

Potrebbe essere che l'algoritmo che hai scritto non fosse corretto?

Il codice è un algoritmo scritto in modo che una macchina possa eseguirlo. Non c'è nulla in quella definizione che dice che non è anche scritto per essere compreso da un essere umano. Scrivere in Java ha oscurato il tuo algoritmo? Ciò determinerebbe se sono d'accordo con il tuo insegnante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top