Torna indietro   Hardware Upgrade Forum > Software > Programmazione

La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025
La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025
Siamo andati a Londra per partecipare a Current 2025, la conferenza annuale di Confluent. Il tema al centro dell'evento era l'elaborazione dei dati in tempo reale resa possibile da Apache Kafka, una piattaforma open source pensata proprio per questo. Si è parlato di come stia cambiando la gestione dei dati in tempo reale, del perché sia importante e di quali siano le prospettive per il futuro
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni
A Madrid SAP rilancia sulla visione di un ecosistema integrato dove app, dati e AI generano un circolo virtuoso capace di affrontare l’incertezza globale. Joule diventa l’interfaccia universale del business, anche oltre il perimetro SAP
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero
Una delle realtà a maggiore crescita nel mondo dell'elettronica di consumo, Hisense Group, affonda le sue radici nella storica città portuale di Qingdao, famosa per la sua birra. Ed è proprio qui il centro nevralgico dell'espansione mondiale dell'azienda, che sta investendo massicciamente in infrastrutture e ricerca per consolidare ulteriormente la propria leadership tecnologica.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-11-2008, 07:43   #1
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 08:29   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
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.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 08:37   #3
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 08:42   #4
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 08:50   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 08:55   #6
cionci
Senior Member
 
L'Avatar di cionci
 
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
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 09:07   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Peccato sempre non riuscire ad inserire un metro di misura sulla bellezza, sulla possibilita' di errori, sulla compattezza, etc.
Difficile misurare la bellezza. Per la compattezza qualcosa si può fare, ma dipende sempre troppo dal linguaggio usato, senza contare che compattezza e leggibilità, oltre un certo limite, non vanno quasi mai di pari passo
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 11:06   #8
marco.r
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 . Ovviamente programmi piu' veloci permetteranno di trovare una soluzione in tempo piu' breve ma si eviteranno confronti tra i tempi di esecuzione alla terza cifra decimale
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
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 12:03   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da marco.r Guarda i messaggi
3 - Proporre una contest dove le soluzioni si "scontrano" (ad esempio come player di qualche giochino)
Questa può essere una strada praticabile, ma bisogna scegliere il giochino giusto. Qualche tempo fa un nostro professore ha organizzato una sessione di "giochi di programmazione" includendo nel programma anche lo scontro di C-Robots. Io l'ho provato un po', ma non mi ci sentivo a mio agio (bisogna programmarli in un C castrato, parecchio castrato... a questo punto era meglio un linguaggio di scripting).
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 13:17   #10
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Questa può essere una strada praticabile, ma bisogna scegliere il giochino giusto. Qualche tempo fa un nostro professore ha organizzato una sessione di "giochi di programmazione" includendo nel programma anche lo scontro di C-Robots. Io l'ho provato un po', ma non mi ci sentivo a mio agio (bisogna programmarli in un C castrato, parecchio castrato... a questo punto era meglio un linguaggio di scripting).
Una cosa che si puo' fare e' quella di definire una semplice interfaccia testuale tra l'arbitro e il programmino. A quel punto con qualsiasi linguaggio che permetta l'IO da console sei a posto. c'e' un po' di overhead dovuto al parsing delll'input e la generazione dell'output ma visto che lo devono fare tutti non dovrebbe costituire un problema. E' una soluzione che ho visto adottare in diverse competizioni di questo tipo.
__________________
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
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 13:55   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da marco.r Guarda i messaggi
In alcuni casi potrebbe pure non essere praticabile perche' molto innaturale.
Appunto ho scritto nei limiti del linguaggio adottato.
Quote:
Originariamente inviato da marco.r Guarda i messaggi
In altri casi potrebbe non essere ovvia (es: in C++ qual e' la scelta naive per gli array ? puntatori? vector<> ? con [] o con .at ?).
Dove c'è da fare una scelta di implementazione della soluzione, direi di scegliere sempre la scelta più performante.

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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 15:35   #12
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
...
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)
Mi pare una buona idea. Riporto le convenzioni di codifica elencate nel libro citato:

Quote:
Convenzioni di pseudocodifica
Adotteremo le seguenti convenzioni nelle nostre pseudocodifiche.
1. L’indentazione (rientro verso destra delle righe) serve a indicare la struttura a blocchi dello pseudocodice. Per esempio, il corpo del ciclo for, che inizia nella riga 1, `e formato dalla righe 2–8 e il corpo del ciclo while, che inizia nella riga 5, contiene le righe 6–7, ma non la riga 8. Il nostro stile di indentazione si applica anche alle istruzioni if-then-else. Utilizzando l’indentazione, anziché gli indicatori convenzionali della struttura a blocchi, come le istruzioni begin e end, si riduce molto la confusione, preservando o perfino migliorando la chiarezza(nei linguaggi di programmazione reali, in generale, non è consigliabile utilizzare soltanto l’indentazione per indicare la struttura a blocchi, in quanto i livelli di indentazione sono difficili da determinare quando il codice è distribuito su più pagine).

2. I costrutti iterativi while, for e repeat e i costrutti condizionali if, then ed else hanno interpretazioni simili a quelle del Pascal. C'è tuttavia una piccola differenza nei cicli for: nel Pascal il valore del contatore del ciclo è indefinito dopo la conclusione del ciclo, mentre in questo libro il contatore del ciclo mantiene il suo valore dopo la fine del ciclo. Quindi, immediatamente dopo un ciclo for, il valore del contatore del ciclo è quello che ha appena superato il limite del ciclo for. Abbiamo utilizzato questa proprietà nella nostra analisi della correttezza di insertion sort. La prima istruzione del ciclo for (riga 1) è for j ← 2 to lunghezza[A]; quindi, alla fine di questo ciclo, j = lunghezza[A] + 1 (che equivale a j = n +1, in quanto n = lunghezza[A]).

3. Il simbolo “//” indica che il resto della riga è un commento.

4. Un’assegnazione multipla della forma i ← j ← e assegna a entrambe le variabili i e j il valore dell’espressione e; deve essere considerata equivalente all’assegnazione j ← e seguita dall’assegnazione i ← j.

5. Le variabili (come i, j e chiave) sono locali a una determinata procedura. Non dovremmo utilizzare variabili globali senza un’esplicita indicazione.

6. Per identificare un elemento di un array, specifichiamo il nome dell’array seguito dall’indice dell’elemento fra parentesi quadre. Per esempio, A[i] indica l’elemento i-esimo dell’array A. La notazione “. .” `e utilizzata per indicare un intervallo di valori all’interno di un array. Quindi, A[1 . . j] indica il sottoarray di A che `e composto da j elementi: A[1],A[2], . . . ,A[j].

7. I dati composti sono tipicamente organizzati in oggetti, che sono formati da attributi o campi. Un particolare campo è identificato utilizzando il nome del campo seguito dal nome del suo oggetto fra parentesi quadre. Per esempio, noi trattiamo un array come un oggetto con l’attributo lunghezza che indica il numero di elementi contenuti nell’array. Per specificare il numero di elementi di un array A, scriviamo lunghezza[A]. Anche se utilizziamo le parentesi quadre sia per gli indici degli array sia per gli attributi degli oggetti, di solito, è chiaro dal contesto a cosa intendiamo riferirci.
Una variabile che rappresenta un array o un oggetto è trattata come un puntatore ai dati che costituiscono l’array o l’oggetto. Per tutti i campi f di un oggetto x, l’assegnazione y ← x implica che f[y] = f[x]. Inoltre, se poi impostiamo f[x] ← 3, allora non soltanto sarà f[x] = 3, ma anche f[y] = 3. In altre parole, x e y puntano allo stesso oggetto dopo l’assegnazione y ← x.
Un puntatore può non fare riferimento ad alcun oggetto; in questo caso daremo ad esso il valore speciale NIL.

8. I parametri vengono passati a una procedura per valore: la procedura chiamata riceve la sua copia dei parametri e, se viene assegnato un valore a un parametro, la modifica non viene vista dalla procedura chiamante. Quando viene passato un oggetto, viene copiato il puntatore ai dati che costituiscono l’oggetto, ma non vengono copiati i campi dell’oggetto. Per esempio, se x è un parametro di una procedura chiamata, l’assegnazione x ← y all’interno della procedura chiamata non è visibile alla procedura chiamante. L’assegnazione f[x] ← 3, invece, è visibile.

9. Gli operatori booleani “and” e “or” sono operatori cortocircuitati.
Questo significa che, quando valutiamo l’espressione “x and y”, prima dobbiamo valutare x. Se x è FALSE, allora l’intera espressione non può essere TRUE, quindi non occorre valutare y. Se, invece, x è TRUE, dobbiamo valutare y per determinare il valore dell’intera espressione. Analogamente, se abbiamo l’espressione “x or y”, valutiamo y soltanto se x è FALSE. Gli operatori di cortocircuito ci consentono di scrivere espressioni booleane come “x <> NIL and f[x] = y” senza preoccuparci di ciò che accade quando tentiamo di valutare f[x]quando x è NIL.
Esempio:

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
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 16:00   #13
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da cionci Guarda i messaggi
Difficile misurare la bellezza. Per la compattezza qualcosa si può fare, ma dipende sempre troppo dal linguaggio usato, senza contare che compattezza e leggibilità, oltre un certo limite, non vanno quasi mai di pari passo
E se utilizzassimo, come abbiamo fatto per il contest sul lotto, il criterio proposto da Repne?

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.

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 16:09   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
E se utilizzassimo, come abbiamo fatto per il contest sul lotto, il criterio proposto da Repne?
Cioè ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 16:34   #15
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da cionci Guarda i messaggi
Cioè ?
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

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 16:50   #16
cionci
Senior Member
 
L'Avatar di cionci
 
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 Inutile tirare fuori un data set più grande quando l'algoritmo è stato dimensionato su quello più piccolo. Anche perché un dato algoritmo potrebbe diventare inefficiente.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 17:03   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da cionci Guarda i messaggi
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 Inutile tirare fuori un data set più grande quando l'algoritmo è stato dimensionato su quello più piccolo. Anche perché un dato algoritmo potrebbe diventare inefficiente.
Aaaaahhhh ho capito(almeno credo).
Col tuo metodo verrebbe misurato il tasso di incremento/decremento rispetto all'algoritmo di partenza(ferma restando la quantità in input). Giusto?

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 17:11   #18
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
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
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 17:44   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da khelidan1980 Guarda i messaggi
ovviamente se ho capito bene la versione in pseudocodice dovrebbe essere molto generica, "banale" passatemi il termine
Certo, la soluzione più banale...se voglio fare un ordinamento diciamo il Bubble Sort.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-11-2008, 23:01   #20
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
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
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 "="?
VICIUS è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025 La rivoluzione dei dati in tempo reale è ...
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni SAP Sapphire 2025: con Joule l'intelligenza arti...
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero Dalle radio a transistor ai Micro LED: il viaggi...
Meglio un MacBook o un PC portatile con Windows, oggi? Scenari, dubbi e qualche certezza Meglio un MacBook o un PC portatile con Windows,...
realme GT7: un "flaghsip killer" concreto! La recensione realme GT7: un "flaghsip killer" concr...
Una domenica bestiale Amazon: LG OLED, s...
DJI Mini 4 Pro Fly More Combo: drone leg...
realme GT 7T: display da 6000 nit, poten...
Ancora qualche pezzo per il portatile Le...
TV OLED LG Serie C4 2024: immagini da ci...
Smartwatch Amazfit in sconto: Active 2 a...
Router e ripetitori AVM FRITZ! da 30€ su...
Adulting 101: i corsi per imparare come ...
Blue Origin ha lanciato con successo la ...
L'amministrazione Trump ha ritirato la c...
La NASA potrebbe chiudere le missioni OS...
Trump vieta anche la vendita di software...
Le migliori offerte del weekend Amazon: ...
Dreame L40 Ultra a 699€, prezzo shock: v...
AMD Radeon RX 9060 XT: fino al 31% pi&ug...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:48.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www1v