Domanda:
Devo citare algoritmi CS comuni?
0xfede7c8
2019-08-12 19:10:14 UTC
view on stackexchange narkive permalink

Sto lavorando alla mia tesi finale per un corso di CS e desidero utilizzare un algoritmo di ordinamento comune ( quicksort per i curiosi). Devo includere un riferimento a questo algoritmo (citazione o citazione)? O è così comune che non ne ho bisogno? Tieni presente che è stato pubblicato per la prima volta nel 1961 ed è estremamente utilizzato e conosciuto da quasi tutti nel mondo CS.

Dipende davvero da te (e forse dal tuo consulente).In ogni caso, inseguire il riferimento per il quicksort, e anche una parte della bibliografia piuttosto voluminosa sulla sua analisi, non è molto lavoro, e una manciata di riferimenti difficilmente porterà a superare il numero massimo di pagine ...
Cosa significa "usare" in questo contesto?Stai scrivendo un programma o semplicemente descrivendo l'algoritmo stesso?
Ha importanza quale particolare algoritmo viene utilizzato o il punto importante è il fatto che i dati vengano ordinati in qualche modo?
Se hai bisogno di citare una cosa specifica (ad esempio un lemma usato nella dimostrazione originale di correttezza / complessità per esempio), allora ** sicuramente ** citalo non importa quanto sia noto.Se stai semplicemente definendo un nuovo algoritmo e un passaggio è "ordina questo array usando quicksort" allora una citazione potrebbe non essere necessaria (infatti a questo punto potresti considerare di dire qualcosa come "ordina l'array usando qualsiasi O (n logn)algoritmo "se non si hanno requisiti più specifici sull'algoritmo di ordinamento).
@Abigail dipende se finisci per fare riferimento a 200 algoritmi o meno
Qualunque cosa tu decida, assicurati di citare questo articolo di stackexchange per giustificazione;)
Se stai facendo i compiti al college, l'unica vera risposta è chiedere al tuo istruttore: questo non è un vero documento accademico, quindi le regole per la valutazione dipendono da loro.
Basta citare un libro classico sugli algoritmi che spiega quicksort (quasi tutti i libri contengono una sezione sugli algoritmi di ordinamento)
Sette risposte:
user2768
2019-08-12 19:33:19 UTC
view on stackexchange narkive permalink

Devo citare algoritmi CS comuni?

No .

Il fatto che sia stato pubblicato per la prima volta [nel] 1961 non è pertinente, non è necessario citarlo perché è [ampiamente] usato e [ben ] conosciuto da quasi tutti nel mondo CS .

Detto questo, sebbene una citazione non sia necessaria, puoi fornirne una a tua discrezione. Tale citazione è probabilmente più importante per una tesi finale che per una pubblicazione accademica, poiché può essere considerato importante per gli studenti dimostrare di poter citare.

Oltre a citare la fonte originale, potresti citare i tuoi libri di testo preferiti sull'argomento (piuttosto che citare l'intero volume, fai riferimento a una sezione particolare, ad esempio \ cite [Capitolo 4.3 ] {Textbook} in LaTeX).

In particolare, potrebbe essere utile citare il capitolo pertinente di [* Introduzione agli algoritmi *] (https://en.wikipedia.org/wiki/Introduction_to_Algorithms) di CLRS.
Mi è stato detto che la citazione di un libro di testo è "poco professionale", che un articolo "professionale" dovrebbe sempre citare un articolo di ricerca o una monografia.Non sono sicuro di comprarlo, ma al momento ho dovuto cambiare la citazione.
@sds Eh.Penso che si dovrebbe guardare allo scopo della citazione.Non penso ci sia niente di sbagliato nel citare libri di testo di altri campi (ad esempio, sono un informatico e ho citato libri di testo di matematica), o dove hai bisogno di qualche oscuro dettaglio che viene presentato in uno (ho citato Knuth per unfatto specifico sulle prestazioni delle tabelle hash).Il problema nasce quando stai citando un libro di testo per qualcosa di comune conoscenza e, in questo caso, il problema è più che stai citando, piuttosto che che stai citando un libro di testo.
@sds Seguendo il commento precedente, _si dovrebbe guardare allo scopo della citazione_: Fonti oltre il manoscritto originale possono offrire ulteriori approfondimenti utili al lettore.Puoi anche scegliere di segnalare tali fonti, ad esempio "Knuth riassume l'argomento X e fornisce un'analisi dettagliata delle prestazioni".
@Basile Qual è lo scopo di una simile citazione?Voglio dire che ogni scienziato informatico che si rispetti avrà letto CLRS e ne avrà una copia a portata di mano, quindi che valore aggiunge alla carta?Se puoi indicare qualsiasi dettaglio specifico che sia importante, certo, ma solo un "hey ho usato quicksort e come tutti sanno che puoi cercarlo in quel libro" sembra inutile.
@sds Ho citato i libri di testo in un articolo e il giornale ha partecipato a una buona conferenza.Nessuno dei revisori ha detto nulla.Questo è solo un punto di dati, ma citare un libro di testo quando richiesto non è sicuramente poco professionale.
@Voo Se leggi tutta la mia risposta, spiego.È anche spiegato nei commenti sopra.
Sono d'accordo con la maggior parte del corpo del tuo testo, ma - stai arrivando a una conclusione sbagliata ...
@einpoklum Il tuo commento sembra utile, ma non è ... #reviewerTwo
@user2768: Vedi la mia risposta.
@user2768 Dici che non dovrebbe e poi fai marcia indietro con "puoi fornirne uno a tua discrezione" e dici che potresti includerlo in una tesi finale, perché dimostra che uno studente può citare.Ma da nessuna parte si nomina una vera buona ragione per cui migliorerebbe il documento effettivo per includere il riferimento, che è quello che mi chiedo.
@Voo Io dico _non devi_, non _non dovresti_;Non faccio marcia indietro.Io _ nomino un vero buon motivo [per citare] _ ad esempio _perché dimostra che uno studente può citare_.Non sono sicuro di cosa ti stai chiedendo;il tuo commento sembra rispondere alle tue preoccupazioni.(La mia risposta non spiega perché la citazione di libri di testo è utile, i commenti lo fanno ad esempio https://academia.stackexchange.com/questions/134582/do-i-have-to-cite-common-cs-algorithms/134585?noredirect=1 # comment358595_134585 e https://academia.stackexchange.com/questions/134582/do-i-have-to-cite-common-cs-algorithms/134585?noredirect=1#comment358598_134585.)
@Voo "Voglio dire che ogni scienziato informatico che si rispetti avrà letto CLRS e ne avrà una copia a portata di mano" Dovresti anche considerare studenti o neolaureati.Inoltre, non tutti sono americani o possono permettersi di acquistare costosi libri di testo stranieri.
BrianH
2019-08-12 19:47:20 UTC
view on stackexchange narkive permalink

Se l'uso specifico dell'algoritmo è importante per il lavoro, allora dovresti citare ciò che specificamente hai usato o implementato, e anche citare la più ampia / vecchia classe di algoritmi sarebbe strettamente facoltativo. Usando l'esempio del quicksort, ce ne sono molte dozzine di varietà che hanno la stessa idea generale ma hanno caratteristiche e prestazioni diverse. Se hai usato l'articolo del 1961 come riferimento per la tua implementazione, ovviamente lo citeresti. Se hai utilizzato la funzione di ordinamento Java o C ++ (che sono diverse e sono cambiate tra le versioni: mergesort, timsort, ibrido, ecc.), Lo diresti semplicemente e non avrai bisogno di cercare su cosa si basava.

D'altra parte, se l'ordinamento non è una parte importante del lavoro (importa solo che sia stato ordinato, non come l'hai ordinato), è comune e accettato non preoccuparsi di citare ogni minimo dettaglio come Questo. Nella maggior parte dei casi il modo in cui qualcosa è stato ordinato è così poco importante da non essere nemmeno menzionato nel testo, ma ovviamente se il tuo lavoro è sugli algoritmi di ordinamento (e in una tesi) dovresti essere più dettagliato e citare liberamente.

Poiché questo non è per una conferenza ma per una tesi, e possibilmente parte di un corso graduato, probabilmente dovresti citarlo comunque, possibilmente sia l'originale che qualsiasi altra fonte che hai effettivamente usato come riferimento (libro di testo, libreria di codici, qualunque cosa). Soprattutto a livello inferiore al dottorato, è molto più probabile che gli istruttori preferiscano un uso intensivo di citazioni e ho saputo che molti professori si lamentano per mancanza di citazioni di cose che non ci si preoccuperebbe di menzionare o citare in un articolo vero .

Ottima risposta anche.Ho capito che questo argomento riguarda molto il contesto, la natura e il pubblico della pubblicazione.
Questa è la migliore risposta che ho visto.Per quanto riguarda il secondo paragrafo, penso che omettere qualsiasi citazione quando ti interessa solo che qualcosa sia ordinato (o analoghi altri output) sia ragionevole in quanto è ovvio che l'ordinamento è possibile.Se non è ovvio che una particolare disposizione di cui hai bisogno può essere ottenuta da un input arbitrario, dovresti citare il risultato che ha dimostrato che è possibile.
Nota: l'implementazione di ordinamento standard di Java utilizzata dalla maggior parte dei suoi metodi di ordinamento è timsort a partire da Java 7. Prima di allora, era mergesort.
@VictorStafusa Ah, mergesort, la mia memoria mi è venuta meno, grazie per la correzione!
MSalters
2019-08-13 13:18:03 UTC
view on stackexchange narkive permalink

"Quicksort" oggi si riferisce raramente alla versione del 1961; l'algoritmo è stato migliorato da allora. Se hai intenzione di citare, dovresti ovviamente citare qualcosa che è rilevante per la tua tesi. Come altri hanno affermato, se hai solo bisogno di un algoritmo per sistemare le cose, non è necessario citarlo. Ma se la tua tesi dipendeva dai dettagli dell'ordinamento, allora diventa improvvisamente importante citare e citare correttamente.

WBT
2019-08-14 19:11:54 UTC
view on stackexchange narkive permalink

Prenderò quella che sembra essere una posizione sorprendentemente contrarian su questo:

Sì, devi citare l ' implementazione che hai utilizzato, in un documento scientifico .

È fin troppo comune che scienziati che lavorano altrove cercando di riprodurre i risultati non riescano a farlo e sprecano molto tempo cercando di assicurarsi che le loro impostazioni e passaggi siano esattamente gli stessi di quelli stanno cercando di replicare. Troppo spesso, il problema si riduce a un bug particolare in un pacchetto software che un laboratorio o l'altro sta utilizzando, o una scelta diversa in un dettaglio di implementazione che nessuno sapeva fosse importante. Citando l'implementazione specifica che hai utilizzato, compreso il numero di versione dei pacchetti ove disponibili, puoi eliminare una potenziale fonte di frustrazione (e / o false accuse di frode!), A un costo aggiuntivo relativamente basso durante la scrittura. (Nota che a volte, quell'altro "laboratorio" potrebbe essere un te del futuro!)

Se stai usando un'implementazione rapida trovata online, potrebbe essere richiesta la citazione dalla licenza sul sorgente. Ad esempio, potresti dire "Ho usato l'implementazione Java di Quicksort disponibile su https://en.wikibooks.org/w/index.php?title=Algorithm_Implementation/Sorting/Quicksort&oldid=3562350#Java "(notare l'uso del parametro" oldid "per collegarsi a una versione specifica; fare clic su Visualizza cronologia e quindi sulla data più recente per ottenerla nell'URL). Tale attribuzione è probabilmente richiesta dalla licenza; storia simile per quello che trovi su Stack Overflow.

Questo fornisce anche un mezzo di credito per coloro che potrebbero aver speso molto tempo (che avrebbero potuto spendere per qualcos'altro) scrivendo un pacchetto software utile per la comunità più ampia. L'aspetto del credito è probabilmente più importante per gli sviluppatori accademici rispetto a quelli commerciali. In questi casi, potrebbe esserci un documento che annuncia o descrive il pacchetto, che puoi e dovresti citare a questo scopo.

CodesInTheDark
2019-08-13 06:20:34 UTC
view on stackexchange narkive permalink

No, se l'algoritmo ha un nome noto, significa che si presume che tu non sia l'autore e che i lettori possono familiarizzare usando quel nome come riferimento. In modo simile quando scrivi un articolo di matematica, non devi creare un riferimento ogni volta che usi termini come base di Hamel, lagrangiana, distribuzione gaussiana, trasformata di Fourier, ecc., Perché è ben noto come QuickSort, TimSort , metodo simplex ... l'utilizzo di un nome specifico è un riferimento sufficiente per il lettore.

Ci stavo solo pensando l'altro giorno.Ciò che una persona considera "noto" o conoscenza comune, non è così per un'altra persona.QuickSort è un ottimo esempio.La maggior parte delle persone che hanno studiato informatica lo saprebbero.Tuttavia, la persona media per strada non lo farebbe.Ad esempio, la persona alla cassa del negozio di alimentari probabilmente non lo farebbe.Quindi quando si decide di citare qualcosa come riferimento, si riduce a se è considerato "conoscenza comune" dato l'argomento del lavoro?
"Ogni volta"?No, solo la prima volta.Certamente in una tesi.Vedi la mia risposta.
Il nome stesso non è un riferimento?Se dicessi Trasformata di Fourier tutti saprebbero che non ne ho un merito e il nome è un riferimento alla formula / lavoro che tutti possono scoprire facilmente (anche più che avere un collegamento a un documento del 1800)
@Celeritas "conoscenza comune" * all'interno del pubblico di destinazione del giornale *.Se un documento accademico è citato correttamente, o addirittura significativo, per la maggior parte del personale di cassa di un negozio di alimentari non è una domanda interessante.
einpoklum
2019-08-14 19:24:12 UTC
view on stackexchange narkive permalink

Devo citare algoritmi CS comuni?

In generale, e in una tesi, sì.

Perché?

  • Puoi considerarlo comune, altri no; non tutti sono nello stesso sottocampo di informatica.
  • Potresti usare una variante dell'algoritmo che è meno onnipresente; o un'implementazione specifica, come suggerisce @WBT.
  • Se stai usando termini dalla definizione o specifica dell'algoritmo, può essere utile per il lettore avere accesso a qualche libro di testo per riferimento / ispirazione / qualunque cosa.
  • In realtà, raramente è una cattiva idea trovare una scusa per fare riferimento a un bel libro di testo. Scegline uno buono!
  • È una tesi, non è come se tu fossi pressato per spazio o altro.
  • Meglio sbagliare dalla parte della cautela con le citazioni.

Specificamente per quicksort - mmm, forse no, non posso dirlo con certezza; dipende dalle specifiche.

Michael Kay
2019-08-15 14:51:09 UTC
view on stackexchange narkive permalink

Se i risultati dipendono da alcune proprietà dell'algoritmo quicksort, ad esempio dalle sue prestazioni tipiche o nel caso peggiore, allora dovresti citare un documento che dimostri che l'algoritmo ha quelle proprietà. Ad esempio, se hai scelto deliberatamente un algoritmo che funziona bene quando i dati sono già ordinati, potrebbe essere meglio citare un documento che confronta gli algoritmi di ordinamento e dimostra che Quicksort è una buona scelta in questo scenario. (Non ricordo se sia vero, è solo un esempio).

Se qualsiasi algoritmo di ordinamento funzionasse, allora non hai davvero bisogno di giustificare la tua scelta; in effetti, non hai davvero bisogno di dire quale algoritmo hai scelto.

Personalmente non penso che tu abbia bisogno di citare un articolo che spieghi cos'è QuickSort; è più pertinente citare qualcosa che spieghi perché è stata la scelta giusta per la tua particolare applicazione.

In caso di quicksort, tutto dipende da come viene scelto il perno.La maggior parte delle implementazioni che ho visto hanno alcuni casi patologici che lo rendono vulnerabile al comportamento O (n ^ 2).Un caso frequente di questi è quando l'elenco è già ordinato.Un caso semplice che sconfigge molte delle difese ingenue contro O (n ^ 2) è quando l'elenco consiste unicamente di un gruppo di ripetizioni di un singolo elemento.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...