partizioni di un intero - seminari di analisi matematica

PARTIZIONI DI UN INTERO
relazione per il laboratorio di combinatorica
Daniele P. Morelli
283938
:: Introduzione ::
Definiamo partizione di un numero intero positivo n una scomposizione (indipendente
dall'ordine) in cui si può esprimere n come somma di interi positivi.
Per poter visualizzare una singola partizione di un certo numero in modo immediato, si
possono utilizzare i diagrammi di Ferrers, ossia raffigurazioni del tipo seguente
OOOO
OOO
O
L'esempio riportato corrisponde alla partizione 8=4+3+1
Ancora a titolo d'esempio, possiamo vedere che le possibili partizioni di 4 sono:
4=1+1+1+1
4=2+1+1
4=2+2
4=3+1
4=4
Indicato con p(n) il numero di partizioni di n, abbiamo qui che p(4)=5. La seguente
sequenza (avendo convenzionalmente posto p(0)=1) è data dai primi valori di p(n) per n che
va da 0 a 15:
1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56, 77, 101, 135, 176....
Studieremo dunque tale funzione e, nel farlo, richiameremo anche diverse sue applicazioni e
proprietà, nonchè alcuni risultati ottenuti da vari matematici nel corso della storia.
La questione di trovare il numero di partizioni di un insieme di oggetti può essere intesa in
vari modi. A seconda che si decida di considerare distinguibili gli oggetti e/o le parti in cui
si raggruppano tali oggetti, si ottengono problemi diversi.
Più in generale il problema può essere quella di partizionare, ad esempio:
A - n oggetti indistinguibili in parti indistinguibili;
B - n oggetti distinguibili in parti indistinguibili;
C - n oggetti indistinguibili in parti distinguibili;
D - n oggetti distinguibili in parti distinguibili;
E - n oggetti distinguibili in un numero fissato m di parti indistinguibili;
etc...
Se gli elementi sono distinguibili, parleremo di partizioni “etichettate” (inglese labeled).
In questo scritto ci occuperemo principalmente del problema A. I problemi B ed E sono
notevoli in quanto danno origine a sequenze “celebri” di numeri interi (interi di Bell e di
Stirling).
:: Come calcolare p(n) ::
Esistono vari algoritmi per calcolare la funzione p(n). Interessante dal punto di vista
combinatorico è l'utilizzo di una funzione ausiliaria p'(n,r), che conta il numero di partizioni
di n in cui l'addendo maggiore vale r.[1] Possiamo osservare, dal confronto con l'esempio
visto in precedenza, che:
p ' 4,1=1
p ' 4,2=2
Si noti anche che
p ' 4,3=1
p '  4,4=1
p 4 = 5 = 1211 = p ' 4,1 p ' 4,2 p ' 4,3 p ' 4,4
Costruiamo ora una sorta di funzione ricorsiva che restituisca il valore p(n) per ogni n. Per
convenzione, poniamo p'(n,0)=1, e teniamo inoltre conto che risulta p'(n,1)=1 (quest'ultima
uguaglianza individua infatti l'unica partizione di n come somma di n addendi unitari).
Vogliamo dunque calcolare il generico valore p'(n,r) dove 0≤r ≤n .
Teniamo inizialmente conto del fatto che, per definizione della funzione p'(n,r), esiste
almeno un addendo di valore r: rimane dunque da calcolare solo la rimanente parte (n-r),
tenendo però presente che non dovranno essere considerate le partizioni di n-r con addendi
maggiori di r.
Questo ci consente di ricondurre il calcolo di p'(n,r) al calcolo dei vari p'(n-r,k) nei quali si
abbia 0≤k ≤r .
Le formule cercate sono dunque
n
p n=∑r−1 p ' n , r 
r
p ' n , r =∑k−1 p ' n−r , k 
La prima formula indica semplicemente che p(n) è data come sommatoria delle varie p'(n,r),
come già spiegato. La seconda definisce ricorsivamente il valore della funzione ausiliaria p'
seguendo il ragionamento testé descritto.
:: Proprietà della funzione p(n) ::
Per meglio visualizzare il comportamento della funzione p', possiamo mostrare in un grafico
discreto i valori che essa assume al variare dei due argomenti:
Sull'asse orizzontale scorre n, su quello verticale r. Una casella vuota è da considerarsi di
valore nullo. Stando alla definizione ricorsiva da noi trovata, per calcolare p(n) è sufficiente
sommare i valori dell'n-esima colonna. Il valore nelle coordinate (n,r) si calcola sommando
gli elementi nella (n-r)-esima colonna, aventi ordinata minore o uguale a r.
Questo triangolo, ad un esame approfondito, è molto interessante: le varie righe, considerate
partendo da quella più in basso (e lette da sinistra) cominciano da punti diversi, ma
convergono all'aumentare di r. La prima riga è una sequenza infinita di uno (per
definizione). La seconda linea è la sequenza dei naturali dove ogni termine appare due volte
di fila. Appare sempre più evidente una convergenza delle linee verso la forma 1, 2, 3, 5, 7,
11... ossia verso la successione stessa delle partizioni! E' anche possibile vedere che la stessa
convergenza si riscontra leggendo le linee dall'alto verso il basso. Possiamo quindi intuire
che per ogni n esiste un m0 tale che, per ogni m maggiore di m0, valgono le due relazioni
A:
p n= p ' nm , n
B:
p n= p ' m , m−n
La dimostrazione della prima proprietà è abbastanza immediata: basta tenere a mente la
definizione di p'(n+m,n): il calcolo del valore della 'casella' di coordinate (n+m,n) andrà a
sommare i valori della colonna ennesima di ordinata minore di m. Ma se m>n, in tale
somma finiranno tutti i valori positivi (gli zeri essendo ininfluenti). La tesi è dunque
dimostrata trovando esplicitamente m0 = n .
Per brevità ometteremo la verifica della proprietà 'simmetrica' B.
Considerando gli elementi posti sulla 'bisettrice' di questo triangolo, vediamo che anche
questi coincidono con i termini della successione di partizione. Questa proprietà (che si
ricava immediatamente dalla dimostrazione della prima relazione ponendo m=n+1) si
traduce nella formula
C:
pn = p ' 2n1, n
:: Applicazioni ::
Ricorderemo solo alcune tra le applicazioni in cui si rende necessaria la funzione
precedentemente introdotta.
Teoria dei gruppi:
Un risultato fondamentale in teoria dei gruppi riguarda l'enumerazione dei diversi gruppi
abeliani. Partendo dal noto teorema secondo cui il prodotto diretto di due gruppi ciclici di
ordine h e k è isomorfo al gruppo ciclico di ordine hּk se e solo se h e k sono primi tra loro,
e ricordando che ogni gruppo abeliano è isomorfo ad un prodotto diretto di gruppi ciclici, si
giunge abbastanza agilmente ad una comoda formula per l'enumerazione delle classi di
isomorfismo di gruppi abeliani di ordine n.
Si consideri la fattorizzazione n = a1b1 a2b2 .... asbs , dove i vari ai sono primi distinti. Allora
il numero di gruppi abeliani non isomorfi di ordine n è dato dal prodotto delle partizioni
degli esponenti bi.
Ad esempio, 432=24ּ33 , e risulta p(4)ּp(3) = 5ּ3 = 15, dunque ci sono 15 gruppi abeliani
non isomorfi di ordine 432.
Non è invece nota alcuna regola efficiente per trovare il numero delle classi di isomorfismo
dei gruppi (non necessariamente abeliani) di un certo ordine.
Analisi Matematica:
Una notevole formula, trovata da Francesco Faà di Bruno, descrive lo sviluppo dell'n-esima
derivata di una composizione di funzioni.
Per semplicità limitiamoci ad esaminare il caso per n=4.
(f(g(x))'''' =
+
+
+
+
f''''(g(x)) g'(x)4
6 f'''(g(x)) g''(x) g'(x)2
3 f''(g(x)) g''(x)2
4 f''(g(x)) g'''(x) g'(x)
f'(g(x)) g''''(x)
Prendiamo in esame i fattori all'esterno della funzione f:
g'(x)4 corrisponde alla partizione 1+1+1+1, g''(x) g'(x)2 alla partizione 2+1+1, eccetera.
I coefficienti numerici sono invece collegati al numero di possibili “etichettature” delle
relative partizioni: ad esempio il coefficiente 6 che compare nel secondo addendo è
collegato al fatto che vi sono 6 possibili partizioni “etichettate” di un insieme {a,b,c,d} di 4
elementi aventi la forma (2+1+1):
{a,b} {c} {d}
{a,d} {b} {c}
{b,d} {a} {c}
{a,c} {b} {d}
{b,c} {a} {d}
{c,d} {a} {b}
Teoria dei numeri:
Si deve a Leonard Euler (Eulero) il sorprendente risultato:
p n= p n−1 pn−2 p n−5 – p n−7....
Oppure, più formalmente:
p n=∑ −1i−1 p n−qi 
dove la sommatoria scorre su tutti i valori interi di i (anche negativi) e dove qi indica
l'i-esimo numero pentagonale generalizzato. Si ponga p(0)=1 e p(n)=0 per n negativo.
I numeri pentagonali sono interi positivi rappresentabili in forma pentagonale. La formula
generica è n= ½ k (3k-1) per valori positivi di k. Ammettendo anche valori di k negativi si
ottengono i numeri pentagonali generalizzati.
Il teorema di Eulero nella sua forma più nota prova che (quando si ha convergenza)
1−x 1−x 2 1−x 3 ....=1− x−x 2 x 5x 7− x12....
dove gli esponenti nel membro a destra dell'uguale sono numeri pentagonali generalizzati, e
dove i segni si alternano - - + + - - + + etc.
A partire da questo risultato è possibile provare la formula di Eulero per la funzione di
partizione sopra riportata.
Effettivamente, si può dare una interpretazione combinatorica al teorema di Eulero in
termini di partizioni di un certo intero, prendendo in esame la differenza tra il numero di
partizioni aventi pari parti distinte, e il numero di partizioni aventi dispari parti distinte.
Volendo fare un esempio, il coefficiente di x5 è +1, poiché vi sono due modi di partizionare
5 in un numero pari di parti distinte (5=1+4 e 5=2+3) e un solo modo per partizionare 5 in
un numero dispari di parti distinte (5=5).
Visto tale sorprendente risultato, soffermiamoci su un veloce e intuitivo approfondimento:
esiste un modo per calcolare questa differenza?
Poiché vogliamo considerare solo partizioni composte da parti distinte, possiamo introdurre
una operazione 1-aria su tali particolari partizioni.
L'operazione consiste nello spostare l'ultima “diagonale” del diagramma di Ferrers in una
nuova riga, come nell'esempio seguente:
OOOOOOO
OOOOOO
OOOO
OOO
diventa
OOOOOO
OOOOO
OOOO
OOO
OO
Nel caso più comune, compiendo l'operazione inversa (spostando l'ultima riga in una nuova
diagonale), si torna al punto di partenza. Questa operazione cambia la parità della
partizione. Sia a il numero di elementi della diagonale, e b il numero di elementi nell'ultima
riga.
Poiché il risultato di Eulero prende in considerazione solo la differenza tra numero di
partizioni (in parti distinte) pari e dispari, le coppie di partizioni riconducibili l'una all'altra
attraverso l'operazione descritta possono essere eliminate dal conteggio.
Rimane da considerare solo l'insieme delle particolari partizioni “patologiche” sulle quali
tale operazione non può essere compiuta. Questo caso si presenta se solo se:
a=b, e vi è un elemento in comune tra la diagonale e l'ultima riga.
OOOOO
OOOO
OOO
b=a+1, e vi è un elemento in comune tra la diagonale e l'ultima riga.
OOOOOO
OOOOO
OOOO
In entrambi i casi, il grafico di Ferrers è composto da righe ognuna delle quali è di
lunghezza minore di uno rispetto alla precedente. Inoltre, compiere l'operazione di scambio
porta a risultati non accettabili (le parti cessano di essere distinte, oppure la parità non
cambia).
Si dimostra che gli unici interi per i quali esiste una partizione “patologica” del tipo
descritto (e qui sopra esemplificato) sono i numeri pentagonali generalizzati. Osservando
questi diagrammi di Ferrers, possiamo in effetti trovare uno dei due seguenti risultati, a
seconda del caso.
n=bb1b2..... 2b−1
n=bb1b2..... 2b−2
In entrambi i risultati, la somma a destra dell'uguale può essere portata ad assumere le
sembianze della succitata formula per i numeri triangolari generalizzati.
:: Funzione Generatrice per p(n) ::
Possiamo definire intuitivamente una funzione generatrice di una certa successione infinita
di numeri come una funzione sviluppabile in un “polinomio” di grado infinito.
In altre parole, la sequenza di numeri che interessa può essere codificata in termini di una
serie formale di potenze, i cui coefficienti corrispondono ai singoli elementi della
successione.
La funzione generatrice della sequenza p(n) è il reciproco della funzione di Eulero:
∞
∞
1
∑n=0 p n x n=∏k=0 1−x k
Il secondo membro è sviluppabile nel seguente prodotto:
1x x 2x 3....1x 2x 4 x 6...1x 3x 6 x 8.......
Sebbene questo sia un prodotto contenente infiniti fattori (ognuno contenente infiniti
addendi), è possibile ricavarne una serie di potenze calcolando il coefficiente del termine
ennesimo xn , grazie al fatto che da un certo punto in poi vi sono solo fattori unitari che
possono essere ignorati. Questi coefficienti risultano proprio essere i valori di p(n).
Ad esempio, il coefficiente di x4 è 5: infatti vi sono cinque modi di ottenere x4 ”scegliendo”
un addendo per ogni fattore:
x4ּ1ּ1ּ1ּ1ּ......
xּ1ּx3ּ1ּ1ּ......
x2ּx2ּ1ּ1ּ1ּ......
1ּx4ּ1ּ1ּ1ּ1ּ.....
1ּ1ּ1ּx4ּ1ּ1ּ1......
:: Algoritmo per il calcolo di p(n) ::
Il seguente programma (scritto in C++) mette in pratica il metodo utilizzato all'inizio di
questa relazione per il calcolo di p(n).[2]
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
double min (double n, double r)
{
if (n>=r) return r;
else return n;
}
double partmax (double n, double r)
{
if (r>n) {cout << "error: the upper limit can't be greater than n"; return 0;}
double sol,i;
sol=0;
if (r==n)
{
return 1;
}
if (r==1)
{
return 1;
}
for(i=1; i<=min(n-r,r); i++)
{
sol = sol + partmax(n-r,i)
}
return sol;
}
;
int main()
{
double r;
double n;
double sol;
double temp;
cout << "insert your number"; cout << endl;
cin >> n;
sol=0;
for(r=1; r<=n; r++)
{
temp=partmax(n,r);
cout << "p'("; cout << n; cout << ","; cout << r; cout << ") = ";
cout << temp;
cout << endl;
sol+=temp;
}
cout << endl;
cout << "p("; cout << n; cout << ") = ";
cout << sol;
cout << endl;
system("PAUSE");
return 0;
}
:: Note ::
[1] – E' possibile interpretare il problema in maniere diverse, ad esempio considerando una differente funzione
intermedia p''(n,r), dove le singole parti sono maggiori o uguali a r.. L'articolo sulle partizioni della sezione
inglese di Wikipedia utilizza questo approccio alternativo.
[2] – Questo algoritmo non costruisce alcuna matrice di valori di p'(n,r): questo significa che per calcolare la
funzione partizione di un certo numero, il programma calcola ogni volta tutti i valori necessari di p(n,r). E'
possibile (e molto consigliabile, soprattutto se si desidera modificare il programma in modo da fargli calcolare
tutti i valori di p(n) per n da 1 a un valore M precedente fissato) implementare una procedura che 'prenda nota', in
una matrice, dei valori di p'(n,r) nel momento in cui vengono calcolati: in questo modo è possibile far riferimento
direttamente alla matrice nel caso un certo valore di p'(n,r) sia già stato trovato in precedenza.