|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
[Contest] Proposta per i nuovi contest
Visto che ne avete parlato, faccio qui la mia proposta per il contest.
L'idea è quella di rendere il più possibile indipendente il contest dal linguaggio e di poter giudicare l'algoritmo migliore e non il programma più veloce. Come fare ? L'unica soluzione che mi viene in mente è quella di proporre una soluzione di riferimento in pseudo-linguaggio data da chi propone il contest. Ovviamente questa sarà la soluzione più immediata, ma anche computazionalmente meno efficiente (ed esempio la forza bruta). Per ogni linguaggio che partecipa al contest, il primo utente che lo usa deve proporre una soluzione che rispecchia fedelmente quella in pseudo-linguaggio, con tanto di struttura e nomi corrispondenti. Chi crea il contest si occuperà di raccogliere queste soluzioni nel primo post. Queste saranno le soluzioni di riferimento sulle quali il contest si dovrà basare e sulle quali verranno prese le misure di prestazioni delle soluzioni ottimizzate. Posto 1 il valore della soluzione di riferimento si dovrà ottenere il coefficiente relativo alla soluzione ottimizzata in questo modo: X = TempoEsecuzioneSoluzioneOttimizzata / TempoEsecuzioneSoluzioneRiferimento Edit: avevo invertito i valori ![]() Vince il contest chi ottiene il coefficiente migliore rispetto alla soluzione di riferimento nel proprio linguaggio. Ultima modifica di cionci : 27-11-2008 alle 09:11. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non ho capito una cosa: se chi propone il Contest, è lo stesso utente che scrive la soluzione di riferimento in pseudocodice, e gli altri partecipanti, la prima volta che partecipano con un linguaggio X che non era ancora stato adoperato nel Contest, si devono limitare a implementare la soluzione descritta dallo pseudocodice in un linguaggio a loro scelta, allora per formulare una nuova soluzione, diversa da quella di riferimento, bisogna utilizzare un linguaggio che è già stato usato almeno una volta nel contest e si può presentare subito la sua implementazione in quel linguaggio X senza prima stendere lo pseudocodice che la descrive?
(scusa il periodo lungo) @EDIT: Altra cosa... La sintassi dello pseudocodice è a scelta dell'utente che propone il contest (e in caso gli altri partecipanti ne vogliano fare uso devono cercare di aderire alle convenzioni usate dal proponente del contest) oppure si fa tutti riferimento sempre e comunque ad uno "standard" noto? (ad esempio lo pseudocodice usato nel testo "Introduzione agli algoritmi e strutture dati" di Cormen, Leiserson, Rivest e Stein)
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 27-11-2008 alle 08:34. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora spiego meglio:
- chi scrive lo pseudocodice per la soluzione di riferimento è chi crea il contest - un utente vuole partecipare al contest: ---- deve presentare la soluzione di riferimento scritta nel linguaggio scelto se ancora non esiste una soluzione di riferimento in quel linguaggio ---- se esiste una soluzione di riferimento scritta in quel linguaggio allora può passare direttamente a scrivere la sua soluzione ottimizzata L'implementazione della soluzione di riferimento deve essere identica in tutto e per tutto alla soluzione di riferimento scritta in pseudocodice, sia nei nomi delle variabili sia nella struttura, ovviamente nei limiti imposti dal linguaggio. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allo scrivere la soluzione ottimizzata in pseudo codice non ci avevo pensato. Potrebbe essere una possibilità, magari lasciata a chi ha implementato gli algoritmi più performanti.
Riguardo alla scelta dello pseudocodice io lascerei piena libertà, anche se non segue uno standard è uguale, l'importante è che definisca bene le strutture dati, il loro dimensionamento e la struttura del codice. Anche una descrizione algoritmica in italiano con le varie righe numerate va benissimo. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Per me si puo' fare.
Peccato sempre non riuscire ad inserire un metro di misura sulla bellezza, sulla possibilita' di errori, sulla compattezza, etc. Comunque e' un primo passo, magari ci verra' in mente altro.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ah altra cosa: bisogna sempre inserire un test che verifichi che sia mantenuta la correttezza anche con dati di test più piccoli.
Ad esempio: in quello dell'altra volta del lotto alcune soluzioni (pure la mia) non funzionavano ricercando il singolo estratto. Manteniamo nei test di varie dimensioni anche la verifica del funzionamento dei subset più piccoli ![]() |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
La vedo difficile. Diversi linguaggi si comporteranno in modo differente rispetto alla soluzione naive, per cui non e' detto che il rapporto con questa sia indicativo. In alcuni casi potrebbe pure non essere praticabile perche' molto innaturale. In altri casi potrebbe non essere ovvia (es: in C++ qual e' la scelta naive per gli array ? puntatori? vector<> ? con [] o con .at ?).
Premesso che per il momento non ho comunque tempo per partecipare, secondo me ci sono tre modi corretti per procedere. 1 - Come si e' fatto finora, pero' con maggior rigore, ovvero con delle regole ben definite (come e' fatto l'input come e' fatto l'output etc.), con un insieme di test chiaro e non variabile, e che chi propone il contest fornisca un metodo per validare il risultato. 2 - Confronto sull'output generato e basta. Ad esempio vedere chi trova la piu' lunga sottosequenza palindroma di cifre nella rappresentazione decimale del pi greco ![]() 3 - Proporre una contest dove le soluzioni si "scontrano" (ad esempio come player di qualche giochino)
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#11 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Quote:
Sia chiaro che non è semplice confrontare linguaggi diversi, però già l'ordine di grandezza del fattore relativo alla soluzione più performante è indicativo. Possiamo stabilire che a parità di ordine di grandezza le soluzioni siano considerate equivalenti. |
||
![]() |
![]() |
![]() |
#12 | ||
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Quote:
Codice:
INSERTION-SORT(A) 1 for j ← 2 to lunghezza[A] 2 do chiave ← A[j] 3 // Inserisce A[j] nella sequenza ordinata A[1 . . j − 1]. 4 i ← j − 1 5 while i > 0 and A[i] > chiave 6 do A[i + 1] ← A[i] 7 i ← i − 1 8 A[i + 1] ← chiave |
||
![]() |
![]() |
![]() |
#13 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Per la bellezza si potrebbe organizzare una sfilata in passerella in un Grand Hotel. Ogni programmatore sfila mentre il proprio codice viene mostrato su un grande schermo. Alla fine, chi perde, dovrà sfilare con indosso il sambenito. ![]() |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#15 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Praticamente è simile al tuo.
Si prendono due tempi. Un tempo T1 con dimensione dell'input D1. Il secondo tempo, T2, viene preso raddoppiando la dimensione dell'input: D2 = D1 * 2. Dividendo T2 per T1, si dovrebbe ottenere una misura approssimativa della complessità dell'algoritmo, a prescindere da quale linguaggio venga utilizzato. Per esempio, se raddoppiando l'input raddoppia anche il tempo di esecuzione, l'algoritmo dovrebbe avere complessità lineare. Se, invece, il tempo quadruplica, la complessità dovrebbe essere quadratica. Se ho detto minchiate(ché non m'intendo di matematica), ditelo ![]() ![]() |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ni, dipende da molti fattori, come uso della memoria (se swappa è chiaro che rallenta non proporzionalmente), oppure un algoritmo può rendere meglio su pochi dati e rendere peggio su molti (o anche l'inverso).
Imho anche per questo sarebbe meglio definire una serie di data set iniziale e non cambiarli mai ![]() |
![]() |
![]() |
![]() |
#17 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Col tuo metodo verrebbe misurato il tasso di incremento/decremento rispetto all'algoritmo di partenza(ferma restando la quantità in input). Giusto? ![]() ![]() |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
ovviamente se ho capito bene la versione in pseudocodice dovrebbe essere molto generica, "banale" passatemi il termine
__________________
Khelidan |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
L'unica cosa che mi ha sempre dato fastidio della notazione usata sul cormen sono le freccine che non sono mai riuscito a fare con la tastiera. Non potremmo usare dei semplici "="?
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:48.