|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
|
giochino: Tecniche inplace di swap
A lezione di Algoritmi e strutture dati ,il professore ci ha dato alcuni giorni fa un giochino interessante da risolvere,su come copiare il valore di due variabili con la "tecnica inplace" ovverosia senza l'utilizzo di variabili temporanee.
Io l ho risolto in questa maniera ma serebbe divertente trovare altre idee,magari anke piu funzionali: void swap (int& a, int& b) { // A B a = b + a; // (a+b) b b = a - b; // (a+b) (a+b)-b a = a - b; // (a+b)-a a // RISULTATO B A }; chi ne trova altri...? Ultima modifica di 3nigma666 : 28-02-2005 alle 02:25. |
|
|
|
|
|
#2 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Vediamo: il tuo algoritmo si basa sul fatto che tra gli interi si può fare la somma.
Ora, la somma è una permutazione parametrizzata in ciascuno dei suoi argomenti: ossia, per ogni valore fissato di a, la funzione che manda b in a+b è invertibile, e per ogni valore fissato di b, la funzione che manda a in a+b è invertibile. Perciò: supponiamo di avere delle variabili a, b di un tipo T, e una mappa f : TxT --> T per la quale esistono una g tale che g(x,f(x,t))=t e f(x,g(x,t))=t per ogni x fissato, e una h tale che h(f(t,x),x)=t ed f(h(t,x),x)=t per ogni x fissato. Vogliamo trasformare la coppia (a,b) nella coppia (b,a). PASSO 1: scriviamo f(b,a) in a. Otteniamo la coppia (f(b,a),b). PASSO 2: scriviamo g(b,a) in b. Otteniamo la coppia (f(b,a),g(b,f(b,a)))=(f(b,a),a). PASSO 3: scriviamo h(a,b) in a. Otteniamo la coppia (h(f(b,a),a),a)=(b,a). Questo generalizza il tuo algoritmo, perché nel tuo caso f(a,b)=a+b, g(a,b)=b-a, h(a,b)=a-b. Il problema è che, per risparmiare una variabile, si usano tre funzioni, e queste richiedono sicuramente più spazio in memoria!
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Io conoscevo questo:
Codice:
int a = 1; int b = 9; a ^= b ^= a ^= b; |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2004
Città: Napoli
Messaggi: 2029
|
edit
|
|
|
|
|
|
#5 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Quote:
Infatti l'OR esclusivo bit-a-bit è una permutazione parametrizzata involutoria, cioè applicata due volte dà l'identità. Tra l'altro è velocissimo.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2004
Messaggi: 1578
|
Quote:
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2004
Città: Acireale
Messaggi: 447
|
esiste anche come istruzione in assembler....se non sbaglio
dovrebbe essere XCHG registro,registro
__________________
Ho concluso acquisti e/o vendite con : SHIVA>>LuR<<, TheGaiden, ArvMau |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
|
grandissimi ragazzi..sto forum è megagalattico
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:20.



















