Puoi usare il modo in cui la formula di ricorrenza seguente viene derivata per trovare la tua codifica:
Ciò è dimostrato considerando quanti altri elementi ci sono nella parte che contiene l'elemento . Se ce ne sono , allora abbiamo scelte per loro e scelte per partizionare il resto.Bn + 1= ∑k = 0n( nK) BK.
n + 1n−k(nn−k)=(nk)Bk
Usando questo, possiamo dare un algoritmo ricorsivo per convertire qualsiasi partizione di in un numero nell'intervallo . Presumo che tu abbia già un modo di convertire un sottoinsieme di dimensioni di in un numero nell'intervallo (un tale algoritmo può essere ideato allo stesso modo usando la ricorrenza di Pascal ).n+10,…,Bn+1−1k{1,…,n}0,…,(nk)−1(nk)=(n−1k)+(n−1k−1)
Supponiamo che la parte contenente contenga altri elementi. Trova il loro codice . Calcola una partizione di "comprimendo" tutti gli elementi rimanenti in quell'intervallo. Calcola ricorsivamente il suo codice . Il nuovo codice èn+1kC1{1,…,n−k}C2C=∑l=0n−k−1(nl)Bl+C1Bn−k+C2.
Nell'altra direzione, dato un codice , trova il unico tale che
e definisci
Dal momento che , può essere scritto come , dove . Ora codifica gli elementi nella parte contenente e codifica una partizione diCk∑l=0n−k−1(nl)Bl≤C<∑l=0n−k(nl)Bl,
C′=C−∑l=0n−k−1(nl)Bl.
0≤C′<(nk)Bn−kC1Bn−k+C20≤C2<Bn−kC1n+1C2{1,…,n−k}n+1, che può essere decodificato in modo ricorsivo. Per completare la decodifica, è necessario "decomprimere" quest'ultima partizione in modo che contenga tutto l'elemento che non appare nella parte contenente .n+1
Ecco come utilizzare la stessa tecnica per codificare un sottoinsieme di di dimensione , ricorsivamente. Se il codice è , quindi supponiamo che . Se allora lascia che sia un codice di , come sottoinsieme della dimensione di ; il codice di è . Se allora lascia che sia un codice di , come un sottoinsieme di dimensioni di ; il codice diS{1,…,n}kk=00k>0n∈SC1S∖{n}k−1{1,…,n−1}SC1n∉SC1Sk{1,…,n−1}SC 1 +è .C1+ ( n - 1k - 1)
Per decodificare un codice , ci sono due casi. Se quindi decodifica un sottoinsieme di di dimensioni cui codice è e genera . Altrimenti, decodifica un sottoinsieme di di dimensione cui codice è e .CC< ( n - 1k - 1)S'{ 1 , ... , n - 1 }k - 1CS'∪ { n }S'{ 1 , ... , n - 1 }KC- ( n - 1k - 1)S'