Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-05-2003, 10:30   #1
janjan
Junior Member
 
Iscritto dal: May 2003
Messaggi: 11
Permutazioni e Assembler

Non sono riuscito a creare un programma in assembler in grado di scrivere su vettore le permutazioni dei primi "n" num. naturali, n<6.
Qualcuno può essermi d'aiuto??? Ho in mente solo versioni ricorsive ma in assembler la ricorsione non è facilissima... va bene anke solo l'algoritmo in C, grazie in anticipo a tutti coloro che collaboreranno!!!!!

Jan
janjan è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2003, 13:19   #2
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
io c'avrei questo algoritmino cosiddetto di g: :

Codice:
 v(1, 1) = 1: iMax = 1
 For n = 2 To NN
  For i = 1 To iMax
   v(i, n) = n
  Next i
  For k = n - 1 To 1 Step -1
   For i = 1 To iMax
    ix = i + (n - k) * iMax
    For j = 1 To k - 1
     v(ix, j) = v(i, j)
    Next j
    v(ix, k) = n
    For j = k To n - 1
     v(ix, j + 1) = v(i, j)
    Next j
   Next i
  Next k
  iMax = iMax * n
 Next n
molto semplice, anzi molto semplificabile con i potenti shortcut dell'assembler.

interessa ?

a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2003, 13:33   #3
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
sono 19 righe ma per amore di sintesi (ma anche per semplificare la trasposizione tal quale in assembler) si possono ridurre a ... 8-9
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2003, 15:18   #4
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
Il problema mi ha interessato, ed ho buttato giù dal nulla questo algoritmino, che sembra funzionare... credo.

Codice:
#define N 4     // Numero di numeri
#define M 24    // Numero permutazioni

int main(int argc, char* argv[])
{
   int mm,nn,pp;

   int num[N];  // Array dei numeri
   int appo;

   // Inizializzazione array
   for (nn=0;nn<N;nn++) num[nn] = nn;
   // Scrittura della prima permutazione
   for (nn=0;nn<N;nn++) printf("%d",num[nn]);
   printf("\n");

   // Ciclo sulle altre permutazioni
   for (mm=1;mm<M;mm++)
   {
      pp = M;
      for (nn=N;nn>0;nn--)
      {
         pp = pp / nn;
         if ((mm%pp)==0)
         {
            appo = num[nn-2];
            num[nn-2] = num[nn-1];
            num[nn-1] = appo;
            nn = 0;
         }
      }
      // Scrittura permutazione risultante
      for (nn=0;nn<N;nn++) printf("%d",num[nn]);
      printf("\n");
   }

   getch();

	return 0;
}
Ricordavo di aver letto da qualche parte che si potevano enumerare tutte le permutazioni ogni volta scambiando tra di loro due elementi. Senza ripetizioni.

Dovevo solo trovare la legge che definiva la sequenza degli scambi. Con un modo spudoratamente empirico (osservando un paio di casi), ho buttato giù l'accozzaglia di codice sopra riportata.
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2003, 16:52   #5
verloc
Senior Member
 
L'Avatar di verloc
 
Iscritto dal: Jan 2000
Messaggi: 551
Hai verificato che il numero di permutazioni sia esatto?

N!


L'algoritmo è quello del contachilometri.

Cerca con il motore,mi pare abbiamo trattato già l'argomento.
verloc è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2003, 17:26   #6
janjan
Junior Member
 
Iscritto dal: May 2003
Messaggi: 11
Grazie mille per le risposte!!!!

Adesso ci ragiono un po' sopra e spero di riuscire a capirle...
Ciao!!! Jan
janjan è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 05:41   #7
verloc
Senior Member
 
L'Avatar di verloc
 
Iscritto dal: Jan 2000
Messaggi: 551
Il "Cazziatino dell'amico"

Quote:
Originally posted by "a2000"

io c'avrei questo algoritmino cosiddetto di g: :

Codice:
 v(1, 1) = 1: iMax = 1
 For n = 2 To NN
  For i = 1 To iMax
   v(i, n) = n
  Next i
  For k = n - 1 To 1 Step -1
   For i = 1 To iMax
    ix = i + (n - k) * iMax
    For j = 1 To k - 1
     v(ix, j) = v(i, j)
    Next j
    v(ix, k) = n
    For j = k To n - 1
     v(ix, j + 1) = v(i, j)
    Next j
   Next i
  Next k
  iMax = iMax * n
 Next n
molto semplice, anzi molto semplificabile con i potenti shortcut dell'assembler.

interessa ?


Capisco la fretta e il poco tempo a disposizione,ma dovresti scrivere gli snippets con una maggiore leggibilità.
Ne converrai che adoperare una quindicina di lettere dell'alfabeto per identificare indici e vettori non aiuta molto se ci devi mettere 2 ore per capire il senso delle istruzioni.
Tieni inoltre conto che non tutti capiscono la sintassi del basic.
Noi tutti ti ringraziamo per quello che dai al forum (sono serio) ma ti prego,scrivi meglio (il naming delle variabili per esempio) e commenta.


Cmq si,a me imteressa ! (magari con qualche link ai migliori algoritmi per il calcolo combinatorio).

per Lombard: credo che quello di a2000 sia il tipo di alg. giusto
perchè non contiene neanche un IF.
Mi sto convincendo che l'algoritmo che preveda solo istruzioni di swapping
sia una leggenda(anch'io pensavo esistesse...ma chissà...)


PS Mi pare proprio che si chiami di Penetrazione giusto?
verloc è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 06:40   #8
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
Re: Il "Cazziatino dell'amico"

Quote:
Originally posted by "verloc"


per Lombard: credo che quello di a2000 sia il tipo di alg. giusto
perchè non contiene neanche un IF.
Mi sto convincendo che l'algoritmo che preveda solo istruzioni di swapping
sia una leggenda(anch'io pensavo esistesse...ma chissà...)
Il codice che ho buttato giù contiene un'IF e due divisioni, ma per il resto fa solamente swap tra due numeri, uno ed un solo swap ad ogni permutazione (l'IF e le divisioni servono per capire qualìè lo swap giusto).
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 07:19   #9
verloc
Senior Member
 
L'Avatar di verloc
 
Iscritto dal: Jan 2000
Messaggi: 551
Re: Il "Cazziatino dell'amico"

Quote:
Originally posted by "lombardp"



Il codice che ho buttato giù contiene un'IF e due divisioni, ma per il resto fa solamente swap tra due numeri, uno ed un solo swap ad ogni permutazione (l'IF e le divisioni servono per capire qualìè lo swap giusto).
cmq non sono stato chiaro
non intendevo assolutamente criticare il tuo codice...(me ne guardo bene )
anzi ritengo sia eccellente(non l'ho detto).
verloc è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 13:15   #10
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
Quote:
Originally posted by "lombardp"

Il problema mi ha interessato, ed ho buttato giù dal nulla questo algoritmino, che sembra funzionare... credo.
....
ci siamo "annusati" e riconosciuti ... credo ig:
(anche se non ti sei ancora iscritto alla setta dei testimoni di nabla)
e per questo ti dico che è bellino però ...
... però, se non ho tradotto male dall'ostroCoto, ci deve essere un errore che porta alla ripetizione di alcune permutazioni (e all'assenza di altre) già con 4 elementi.

appena mi è passata l'inca++atura e le code polemiche della riunione di stamattina ti mando il file.

a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 13:33   #11
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
Quote:
Originally posted by "verloc"



Capisco la fretta e il poco tempo a disposizione,ma dovresti scrivere gli snippets con una maggiore leggibiltà.
Ne converrai che adoperare una quindicina di lettere dell'alfabeto per identificare indici e vettori non aiuta molto se ci devi mettere 2 ore per capire il senso delle istruzioni.
Tieni inoltre conto che non tutti capiscono la sintassi del basic.
Noi tutti ti ringraziamo per quello che dai al forum (sono serio) ma ti prego,scrivi meglio (il naming delle variabili per esempio) e commenta.


Cmq si,a me imteressa ! (magari con qualche link ai migliori algoritmi per il calcolo combinatorio).

per Lombard: credo che quello di a2000 sia il tipo di alg. giusto
perchè non contiene neanche un IF.
Mi sto convincendo che l'algoritmo che preveda solo istruzioni di swapping
sia una leggenda(anch'io pensavo esistesse...ma chissà...)

PS Mi pare proprio che si chiami di Penetrazione giusto?[/size]
Fratello lo sai che ti amo.
e ho capito che ti sei un po' inC++ per il 3D negletto delle comparazioni.

Hai ragione l'algoritmo l'ho buttato giù così di "getto".
Hai ragione le regole di naming sono forse, sorprendentemente, la cosa più fondamentale della programmazione e azzardo che siano all'origine della programmazione ad oggetti.
Comunque in Fortran l'uso consolidato è di tipo algebrico e quindi con nomi di pochi caratteri ....
L'agoritmo di penetrazione è questo:


12 penetra il 2 in tutte le permutazioni a 1 elemento (1)
21

123 penetra il 3 in tutte le permutazioni a 2 elementi
213
132
231
312
321

1234 penetra il 4 in tutte le permutazioni a 3 elementi
2134
1324
2314
3124
3214

1243
2143
1342
2341
3142
3241

1423
2413
1432
2431
3412
3421

4123
4213
4132
4231
4312
4321

....


... ne riparliamo.





P.S.
questi vogliono fare R&D come si fa lobbing in parlamento ...
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 13:42   #12
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
Quote:
Originally posted by "a2000"


... però, se non ho tradotto male dall'ostroCoto, ci deve essere un errore che porta alla ripetizione di alcune permutazioni (e all'assenza di altre) già con 4 elementi.

Guardando meglio... è vero!!!

Quando ho un po' di tempo lo riguardo.


<...dopo un po' di riflessione...>


VERLOC : Mi sa che hai ragione, non mi riesce trovare una sequenza sistematica di permutazioni. Il mio programmino non sembra avere speranze di funzionare.
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 14:02   #13
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
sì ... sì ....

ma l'iscrizione agli ADORATORI DEL (detto anche Mont Venus) ???? g:
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 14:06   #14
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
[quote="a2000"]sì ... sì ....

ma l'iscrizione agli ADORATORI DEL (detto anche Mont Venus) ???? ig:[/quot]

Il link al modulo di iscrizione in PDF? ...
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 14:15   #15
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
in P vuoi dir ...
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 15:23   #16
verloc
Senior Member
 
L'Avatar di verloc
 
Iscritto dal: Jan 2000
Messaggi: 551
TA DAAAAAAAA! [/siz]




Codice:
#include <stdlib.h>
#include <stdio.h>


template<class T>
inline void SWAP(T &a, T &b)
{T dum=a; a=b; b=dum;}
  
  
void generate(int N,char *v)
{  
   int c;
   
  if (N == 1)  {printf("%s\n",v); return; }
  for (c = 1; c <=N; c++)
  {
    generate(N-1,v);
    SWAP(N % 2 ? v[0] :v[c-1],v[N-1] );
        
  }
  
}    

void main()
{
    
    
    char aElements[]={'a','b','c','d','\0'};
    generate(4,aElements);
    
getchar();
}

....BUGIA

credevate che l'avessi fatto io?


Ho fatto una "leggerissima trasposizione" dell'algoritmo di Heap
spiegato da un certo...Robert Sedgewick.

Quella sopra è la versione ricorsiva.
Per quella iterativa e per la trattazione sintetica del problema
http://www.cs.princeton.edu/~rs/talks/perms.pdf

Sono sotto tesi quindi l'altra versione fatela voi.
Sarebbe utile farne una funzione un po più generica (template etc)
Adesso sfogatevi con i benchmark (sarebbe interessante un confronto con il codice di a2000)che io ogni tanto vi vengo a guardare.
verloc è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2003, 19:49   #17
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
bravo, così si fa:

1) definizione del problema (janjan)
2) soluzione personale del problema (a2000, lombardp)
3) soluzioni al problema dello "stato dell'arte" (verloc)
4) nuova soluzione personale (al solito ahimè: ottimizzazione di una soluzione dello "stato dell'arte") (?)

prova-studia-riprova è l'unica permutazione giusta !

non vanno bene invece:

studia-prova-riprova (somaro)
prova-riprova-studia (dilettante)
studia-riprova-prova (secchione svogliato)
riprova-prova-studia (svogliato)
riprova-studia-prova (bravo ma non si applica)
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2003, 09:13   #18
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:
Originally posted by "verloc"

TA DAAAAAAAA! [/siz]
Non vale...farlo ricorsivo era troppo facile... Poi mi pare che fosse stato richiesto esplicitamente non ricorsivo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2003, 15:43   #19
verloc
Senior Member
 
L'Avatar di verloc
 
Iscritto dal: Jan 2000
Messaggi: 551
Scherzavo...Cionci.
In realtà non ho fatto nulla,ho solo dato una aggiustatina(quasi un copia incolla).
Sul pdf c'è tutto,anche quella iterativa,basta cambiare davvero poco.
verloc è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2003, 17:02   #20
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
verloc, dopo l'11 settembre non è più obbligatorio essere sempre concilianti.

<---------
a2000 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
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: 22:06.


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