Dismutazioni (o sconvolgimenti, o permutazioni complete) con Excel

posted Mar 22, 2011, 3:48 PM by r   [ updated Mar 24, 2011, 6:21 AM ]
[...]
In combinatoria vengono dette dismutazioni (o sconvolgimenti, o permutazioni complete in inglese d
erangement) le permutazioni di un insieme che non fissano alcun elemento, ovvero nessuno degli elementi dell'insieme iniziale compare nella sua posizione originaria.
[...] da Wikipedia


La posizione originaria degli elementi in genere viene ricondotta all'ordine naturale:
  • BADC è una dismutazione rispetto all'ordine naturale ABCD
  • 2341 è ancora una dismutazione rispetto all'ordine naturale 1234
Dopo aver scritto una funzione per sviluppare le disposizioni semplici (le permutazioni sono il caso particolare delle disposizioni con k=n), è stato semplice estendere la formula affinchè sviluppasse le dismutazioni.


Utilizzerò per comodità due nomi n relativo alla cella che contiene il numero di elementi dell'insieme e e disp_1 che restituisce una matrice contenente le disposizioni con ripetizione ed è così definito:

=1+RESTO(INT((RIF.RIGA(SCARTO($A$1;;;n^n))-1)/(n^(RIF.COLONNA(SCARTO($A$1;;;;n))-1)));n)

=1+MOD(INT((ROW(OFFSET($A$1,,,n^n))-1)/(n^(COLUMN(OFFSET($A$1,,,,n))-1))),n)

La formula matriciale per lo sviluppo delle dismutazioni, da confermare con Ctrl+Maiusc+Invio, da incollare in una cella qualsiasi va poi trascinata in basso è:

=PICCOLO(SE((SOSTITUISCI(MATR.PRODOTTO(10^(disp_1);RIF.RIGA(SCARTO($A$1;;;n))^0);0;"")=RIPETI(1;n))*(MATR.PRODOTTO(--(disp_1=RIF.COLONNA(SCARTO($A$1;;;n^n;n)));RIF.RIGA(SCARTO($A$1;;;n))^0)=0);MATR.PRODOTTO(disp_1;10^(n-RIF.RIGA(SCARTO
($A$1;;;n)))));RIF.RIGA(A1))


=SMALL(IF((SUBSTITUTE(MMULT(10^(disp_1),ROW(OFFSET($A$1,,,n))^0),0,"")=REPT(1,n))*(MMULT(--(disp_1=COLUMN(OFFSET($A$1,,,n^n,n))),ROW(OFFSET($A$1,,,n))^0)=0),
MMULT(disp_1,10^(n-ROW(OFFSET($A$1,,,n))))),ROW(A1))

In sostanza dopo il test che verifica se una disposizione con ripetizioni è anche una disposizione semplice:
(SOSTITUISCI(MATR.PRODOTTO(10^(disp_1);RIF.RIGA(SCARTO($A$1;;;n))^0);0;"")=RIPETI(1;n)) viene eseguito un test di verifica tra ogni elemento è la sua posizione nell'ordine naturale:
(MATR.PRODOTTO(--(disp_1=RIF.COLONNA(SCARTO($A$1;;;n^n;n)));RIF.RIGA(SCARTO($A$1;;;n))^0)=0)
si recupera quindi la disposizione che ha superato entrambi i test:
 MATR.PRODOTTO(disp_1;10^(n-RIF.RIGA(SCARTO($A$1;;;n)))))

Interessante è anche la formula che serve a contare le dismutazioni (subfattoriale di n e denotata con !n):
=ASS(FATTORIALE(n)*SOMMA((-1^RIF.RIGA(INDIRETTO("1:"&n+1)))/FATTORIALE(RIF.RIGA(INDIRETTO("1:"&n+1))-1)))

=ABS(FACT(n)*SUM((-1^ROW(INDIRECT("1:"&n+1)))/FACT(ROW(INDIRECT("1:"&n+1))-1)))

anche questa da confermare con Ctrl+Maiusc+Invio

Altri argomenti correlati:
Calcolo combinatorio con Excel
Calcolo Combinatorio con Excel - Il caso di Classe 2
Disposizioni semplici (senza ripetizioni) con Excel

Ĉ
r,
Mar 22, 2011, 5:03 PM
Comments