11.08.2013 Views

Lezioni di Algebra e Teoria dei Codici - Servizi interni

Lezioni di Algebra e Teoria dei Codici - Servizi interni

Lezioni di Algebra e Teoria dei Codici - Servizi interni

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Prof.ssa Carla Fiori<br />

<strong>Lezioni</strong> <strong>di</strong><br />

<strong>Algebra</strong> e <strong>Teoria</strong> <strong>dei</strong> Co<strong>di</strong>ci<br />

Università <strong>di</strong> Modena e Reggio Emilia<br />

Dipartimento <strong>di</strong> Scienze Fisiche, Informatiche, Matematiche<br />

Anno Accademico 2012-13


Questo documento è stato scritto in L ATEX utilizzando l’e<strong>di</strong>tor LYX. I <strong>di</strong>agrammi<br />

invece sono stati prodotti utilizzando XY-Pic.<br />

Quest’opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-<br />

Non commerciale-Non opere derivate 2.5 Italia. Per leggere una copia della licenza<br />

visita il sito web<br />

http://creativecommons.org/licenses/by-nc-nd/2.5/it/<br />

o spe<strong>di</strong>sci una lettera a Creative Commons, 171 Second Street, Suite 300, San<br />

Francisco, California, 94105, USA. Per ulteriori informazioni si prega <strong>di</strong> contattare<br />

Emanuele Bardelli, Marco Corghi e Dario Pran<strong>di</strong> agli in<strong>di</strong>rizzi , o .<br />

$\<br />

Alcuni <strong>di</strong>ritti riservati ○ BY: ○ =○ 2006-2007<br />

This work is licensed under the Creative Commons Attribution-Noncommercial-<br />

No Derivative Works 2.5 Italy License. To view a copy of this license, visit<br />

http://creativecommons.org/licenses/by-nc-nd/2.5/it/<br />

or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco,<br />

California, 94105, USA. For further information, please contact Emanuele Bardelli,<br />

Marco Corghi e Dario Pran<strong>di</strong> at these e-mail addresses , or .<br />

$\<br />

Some Rights Reserved ○ BY: ○ =○ 2006-2007


Prefazione<br />

Questi appunti raccolgono le lezioni del corso <strong>di</strong> <strong>Algebra</strong> e <strong>Teoria</strong> <strong>dei</strong> Co<strong>di</strong>ci,<br />

insegnamento fondamentale per la Laurea Magistrale in Matematica Computazionale<br />

e Modellistica, 6 cfu, 36 ore, anno accademico 2012-13. Il docente, prof.ssa<br />

Carla Fiori, rende reperibili questi appunti nella propria pagina web perchè siano<br />

a <strong>di</strong>sposizione <strong>di</strong> tutti gli studenti quale ausilio <strong>di</strong>dattico.<br />

i


In<strong>di</strong>ce<br />

Prefazione i<br />

Capitolo 1. Presentazione del corso 1<br />

1. Programma del corso 1<br />

2. Prerequisiti 1<br />

3. Testi <strong>di</strong> riferimento 2<br />

Capitolo 2. Generalità sui Co<strong>di</strong>ci 3<br />

1. Introduzione 3<br />

2. Trasmissione <strong>di</strong> un messaggio 4<br />

3. Problemi <strong>di</strong> trasmissione 5<br />

4. Canali <strong>di</strong> trasmissione. Canali simmetrici 7<br />

5. Esempi. Co<strong>di</strong>ci: Fiscale, ISBN, Morse, ASCII. 8<br />

Capitolo 3. Co<strong>di</strong>ci a Blocchi 13<br />

1. Definizioni 13<br />

2. Co<strong>di</strong>ci che rivelano e correggono errori. Distanza <strong>di</strong> Hamming. 14<br />

3. Efficienza e Rapporto <strong>di</strong> separazione 21<br />

4. Relazioni fra i parametri <strong>di</strong> un co<strong>di</strong>ce 22<br />

5. (n, k)-co<strong>di</strong>ci, co<strong>di</strong>ci MDS, co<strong>di</strong>ci equivalenti 27<br />

Capitolo 4. Co<strong>di</strong>ci Lineari 33<br />

1. Definizioni e prime proprietà 33<br />

2. Matrici generatrici 35<br />

3. Co<strong>di</strong>fica nei co<strong>di</strong>ci lineari 41<br />

4. Tabella standard e Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari 43<br />

5. Co<strong>di</strong>ce duale 45<br />

6. Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari per sindrome 51<br />

7. Riepilogo relativo alla co<strong>di</strong>fica e deco<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce lineare 56<br />

8. L’enumeratore <strong>dei</strong> pesi <strong>di</strong> un co<strong>di</strong>ce lineare 60<br />

Capitolo 5. Co<strong>di</strong>ci Ciclici 62<br />

1. Definizioni e proprietà 62<br />

2. Polinomio generatore e matrice generatrice 64<br />

3. Polinomio <strong>di</strong> controllo e matrice <strong>di</strong> controllo 71<br />

4. Schemi <strong>di</strong> co<strong>di</strong>fica 73<br />

ii


INDICE iii<br />

5. Deco<strong>di</strong>fica 77<br />

6. Co<strong>di</strong>ci BCH 79<br />

Capitolo 6. Co<strong>di</strong>ci <strong>di</strong> Hamming 85<br />

1. Definizioni e Proprietà 85<br />

2. Co<strong>di</strong>ci <strong>di</strong> Hamming binari 88<br />

Capitolo 7. Co<strong>di</strong>ci <strong>di</strong> Goppa 90<br />

Capitolo 8. Co<strong>di</strong>ci correttori e gruppi <strong>di</strong> permutazioni 91<br />

1. Gruppi come co<strong>di</strong>ci e <strong>di</strong>stanza <strong>di</strong> Hamming 91<br />

2. Gruppi strettamente k-transitivi 92<br />

3. Uncoverings 93<br />

4. Algoritmo <strong>di</strong> deco<strong>di</strong>fica per gruppi strettamente k-transitivi 94<br />

5. I gruppi <strong>di</strong> Mathieu M11 e M12 97<br />

6. Estensione a gruppi non strettamente k-transitivi 99<br />

7. Simboli ripetuti 101<br />

8. Ottimizzazione 103<br />

Capitolo 9. Elementi <strong>di</strong> Crittografia 107<br />

1. Introduzione 107<br />

2. Crittosistemi a chiave pubblica 109<br />

3. Vantaggi, svantaggi, applicazioni <strong>dei</strong> crittosistemi a chiave pubblica 110<br />

4. Il sistema RSA 111<br />

5. La firma elettronica, autenticazione con il sistema RSA 121<br />

6. Sicurezza del sistema RSA 122<br />

Capitolo 10. Gruppi e Insiemi <strong>di</strong> Permutazioni Equi<strong>di</strong>stanti 124


CAPITOLO 1<br />

Presentazione del corso<br />

1. Programma del corso<br />

(1) Co<strong>di</strong>ci a blocchi.<br />

(2) Co<strong>di</strong>ci lineari.<br />

(3) Co<strong>di</strong>ci ciclici.<br />

(4) Co<strong>di</strong>ci <strong>di</strong> Hamming.<br />

(5) Co<strong>di</strong>ci correttori e gruppi <strong>di</strong> permutazioni.<br />

(6) Elementi <strong>di</strong> Crittografia.<br />

(7) Gruppi e insiemi <strong>di</strong> permutazioni equi<strong>di</strong>stanti.<br />

Per contestualizzare maggiormente gli argomenti trattati nei punti (1) − (5),<br />

nelle parti (6) e (7) vengono presentati alcuni temi strettamente legati alla teoria<br />

<strong>dei</strong> co<strong>di</strong>ci quali la crittografia o, in ambito più strettamente algebrico, lo stu<strong>di</strong>o <strong>di</strong><br />

particolari insiemi finiti <strong>di</strong> permutazioni.<br />

2. Prerequisiti<br />

Si ritengono note le definizioni e le principali proprietà delle seguenti nozioni.<br />

• Numerazioni in basi <strong>di</strong>verse. Numerazione binaria.<br />

• Struttura Algebrica. Sottostruttura. Omomorfismo fra strutture algebriche.<br />

• Gruppo. Gruppi ciclici. Laterali <strong>di</strong> un sottogruppo.<br />

• Permutazioni e loro proprietà.<br />

• Anello. Ideali <strong>di</strong> un anello. Anello <strong>dei</strong> polinomi.<br />

• Corpo e campo. Caratteristica <strong>di</strong> un campo. Campi <strong>di</strong> Galois. Divisioni<br />

<strong>di</strong> polinomi su un campo K. Ampliamenti algebrici <strong>dei</strong> campi. Polinomi<br />

minimi.<br />

• Struttura algebrica delle classi resto modulo n.<br />

1


3. TESTI DI RIFERIMENTO 2<br />

3. Testi <strong>di</strong> riferimento<br />

Il materiale <strong>di</strong>dattico è fornito dal docente con appunti e articoli sugli argomenti<br />

trattati. Per i capitoli 2, 3, 4, 5, 6, 7, 9 si segnalano i seguenti testi <strong>di</strong> riferimento.<br />

(1) L. Berar<strong>di</strong>, <strong>Algebra</strong> e teoria <strong>dei</strong> co<strong>di</strong>ci correttori, Milano, F. Angeli, 1994.<br />

(2) M. W. Baldoni, C. Ciliberto, G. M. Piacentini Cattaneo, Aritmetica,<br />

Crittografia e Co<strong>di</strong>ci, Milano, Springer-Verlag, 2006.<br />

(3) L. Giuzzi, Co<strong>di</strong>ci Correttori, Milano, Springer, 2006.


CAPITOLO 2<br />

Generalità sui Co<strong>di</strong>ci<br />

1. Introduzione<br />

′′ Ti svegli una mattina, e nella semioscurità ve<strong>di</strong> una figura con uno strano<br />

cappello accucciata in un angolo della stanza. Dopo un po’ i tuoi occhi focalizzano<br />

e ti accorgi che in realtà sono i tuoi vestiti buttati su una se<strong>di</strong>a. Noti poi che la<br />

tua amata se n’è andata e trovi un biglietto sul cuscino che <strong>di</strong>ce ′′ I LOVE XOU ′′ .<br />

Quasi certamente questo ti rassicurerà, perchè presumerai che nel buio la Y sembri<br />

una X. Certo, non sei sicuro al 100%. Potrebbe anche essere che in realtà la X<br />

è una L e che sei stato abbandonato per il tuo caro amico(o almeno così credevi)<br />

Lou. ′′<br />

(Pretzel, 1992)<br />

Questo esempio racchiude l’essenza della teoria <strong>dei</strong> co<strong>di</strong>ci: trasmettendo messaggi<br />

c’è sempre una possibilità d’errore a cui ogni sistema <strong>di</strong> comunicazione deve<br />

far fronte, in modo da essere affidabile.<br />

I sistemi <strong>di</strong> comunicazione per trasferire messaggi sono molteplici: si può pensare<br />

ad una comunicazione via telegrafo o via telefono, ad un trasferimento <strong>di</strong> dati<br />

da un computer ad un altro, ad un messaggio inviato attraverso un cavo ottico o<br />

ad una antenna satellitare, ecc. ... .<br />

Qualunque sia il sistema <strong>di</strong> comunicazione utilizzato, uno <strong>dei</strong> problemi più<br />

frequenti è la presenza del rumore nel canale <strong>di</strong> comunicazione, ossia la presenza<br />

<strong>di</strong> un insieme <strong>di</strong> segnali <strong>di</strong> <strong>di</strong>sturbo e interferenze, estranei a quelli trasmessi.<br />

Questi <strong>di</strong>sturbi possono introdurre degli errori nelle informazioni trasmesse e ciò<br />

<strong>di</strong>venta particolarmente grave quando si tratta della trasmissione <strong>di</strong> informazioni<br />

cifrate.<br />

La teoria <strong>dei</strong> co<strong>di</strong>ci affronta questo tipo <strong>di</strong> problemi ed elabora tecniche volte ad<br />

identificare e a correggere gli eventuali errori commessi nel corso della trasmissione<br />

<strong>dei</strong> dati, oltre che a permettere <strong>di</strong> co<strong>di</strong>ficare e deco<strong>di</strong>ficare velocemente i dati che<br />

si vogliono inoltrare.<br />

3


2. TRASMISSIONE DI UN MESSAGGIO 4<br />

Queste tecniche richiedono però <strong>di</strong> trasmettere dati aggiuntivi (ridondanza)<br />

che se da un lato permettono <strong>di</strong> verificare se c’è stato un errore ed eventualmente<br />

correggerlo, dall’altro complicano ed appesantiscono le operazioni <strong>di</strong> trasmissione.<br />

Affinchè il sistema sia efficace è necessario trovare il giusto equilibrio tra la<br />

ridondanza e la correttezza dell’informazione.<br />

I co<strong>di</strong>ci correttori e rivelatori <strong>di</strong> errori sono importanti dal punto <strong>di</strong> vista pratico<br />

ma, al contempo, interessanti dal punto <strong>di</strong> vista teorico-matematico perchè senza<br />

la matematica non si possono costruire buoni co<strong>di</strong>ci.<br />

La branca della matematica su cui poggia la teoria <strong>dei</strong> co<strong>di</strong>ci è l’algebra e,<br />

in particolare, sono le strutture algebriche finite. Ad esempio, l’ambito in cui si<br />

sviluppa la teoria più interessante <strong>dei</strong> co<strong>di</strong>ci a blocchi è quello <strong>dei</strong> campi <strong>di</strong> Galois.<br />

Molti in<strong>di</strong>cano il 1948 l’anno <strong>di</strong> nascita della <strong>Teoria</strong> <strong>dei</strong> Co<strong>di</strong>ci perchè è l’anno<br />

della pubblicazione dell’articolo Mathematical theory of communication <strong>di</strong> C. E.<br />

Shannon in cui viene provata l’esistenza <strong>di</strong> co<strong>di</strong>ci capaci <strong>di</strong> correggere un buon<br />

numero <strong>di</strong> errori. Da questi inizi la teoria <strong>dei</strong> co<strong>di</strong>ci ha avuto un enorme sviluppo<br />

che dura tuttora (le pubblicazioni su questo argomento sono migliaia).<br />

In questo corso verranno esposti i fondamenti della teoria <strong>dei</strong> co<strong>di</strong>ci e, in particolare,<br />

saranno oggetto <strong>di</strong> stu<strong>di</strong>o alcune famiglie <strong>di</strong> co<strong>di</strong>ci a blocchi.<br />

Trasmettitore<br />

Ricevitore<br />

2. Trasmissione <strong>di</strong> un messaggio<br />

M x<br />

M<br />

Co<strong>di</strong>ficatore<br />

M x<br />

Deco<strong>di</strong>ficatore<br />

M x y<br />

Trasmettitore (o sorgente) = emette il messaggio M.<br />

y<br />

C<br />

A<br />

N<br />

A<br />

L<br />

E<br />

<strong>di</strong>sturbi<br />

Co<strong>di</strong>ficatore = traduce il messaggio in modo che possa attraversare il canale<br />

<strong>di</strong> comunicazione (<strong>di</strong> norma trasforma i messaggi in segnali elettrici): M → x.<br />

Canale = è il mezzo usato per far viaggiare i segnali.


3. PROBLEMI DI TRASMISSIONE 5<br />

Deco<strong>di</strong>ficatore = ritrasforma i segnali nel messaggio M e lo invia al ricevitore.<br />

Ricevitore = riceve il messaggio.<br />

Rumore = <strong>di</strong>sturbi <strong>di</strong> vario tipo.<br />

In questa operazione la prima necessità è quella <strong>di</strong> riconoscere se il messaggio<br />

ricevuto contiene errori e in tal caso correggerli.<br />

La scienza che si occupa <strong>dei</strong> meto<strong>di</strong> per cifrare un messaggio è la crittografia.<br />

La scienza che si occupa <strong>dei</strong> meto<strong>di</strong> per in<strong>di</strong>viduare e correggere gli errori immessi<br />

durante la trasmissione <strong>dei</strong> messaggi è la teoria <strong>dei</strong> co<strong>di</strong>ci.<br />

Pur essendo due ambiti strettamente connessi, in queste lezioni ci occuperemo <strong>di</strong><br />

teoria <strong>dei</strong> co<strong>di</strong>ci.<br />

3. Problemi <strong>di</strong> trasmissione<br />

Quando si trasmette un messaggio la prima necessità è quella <strong>di</strong> riconoscere se<br />

il messaggio ricevuto contiene errori e in tal caso correggerli.<br />

Per introdurre le varie problematiche che si debbono affrontare, iniziamo con<br />

due esempi.<br />

Esempio 2.3.1. Supponiamo si voglia trasmettere un messaggio in lingua italiana.<br />

Per co<strong>di</strong>ficare associamo ad ogni lettera dell’alfabeto italiano il suo numero<br />

d’or<strong>di</strong>ne scritto in forma binaria.<br />

a → 1 = 1 · 2 0 = 1<br />

b → 2 = 1 · 2 1 + 0 · 2 0 = 10<br />

c → 3 = 1 · 2 1 + 1 · 2 0 = 11<br />

...............<br />

z → 21 = 1 · 2 4 + 0 · 2 3 + 1 · 2 2 + 0 · 2 1 + 1 · 2 0 = 10101<br />

Nel canale viene immessa la sequenza binaria. Il deco<strong>di</strong>ficatore associa alla<br />

sequenza binaria la lettera dell’alfabeto italiano e la invia al ricevitore. E’ ovvio<br />

che co<strong>di</strong>ficatore e deco<strong>di</strong>ficatore devono conoscere ed utilizzare lo stesso metodo<br />

per co<strong>di</strong>ficare e deco<strong>di</strong>ficare. Trasmettere la lettera a significa<br />

Trasmettere la lettera z significa<br />

a → 1 → CANALE → 1 → a<br />

z → 10101 → CANALE → 10101 → ?<br />

Pur supponendo non vi siano stati errori durante la trasmissione, incontriamo<br />

il primo ostacolo: poichè le lettere dell’alfabeto sono rappresentate da blocchi (<strong>di</strong>


3. PROBLEMI DI TRASMISSIONE 6<br />

0 ed 1) <strong>di</strong> lunghezza <strong>di</strong>versa, se trasmettiamo la sequenza 10101, il deco<strong>di</strong>ficatore<br />

non sa se la sequenza è relativa ad una sola lettera o se sono state trasmesse più<br />

lettere in successione. Ad esempio:<br />

10101 → 10101 = z<br />

10101 → 10 10 1 = bba<br />

10101 → 10 101 = be<br />

Nasce dunque il problema della sud<strong>di</strong>visione delle sequenze ricevute.<br />

Per risolvere questo problema basta co<strong>di</strong>ficare tutte le lettere con sequenze<br />

aventi la stessa lunghezza. La minima lunghezza sarà quella necessaria per<br />

rappresentare la sequenza più lunga, nel nostro esempio la z. Per fare ciò è sufficiente,<br />

per esempio, aggiungere all’inizio <strong>di</strong> ogni sequenza tanti zeri quanti ne<br />

occorrono per arrivare alla lunghezza prestabilita (nel nostro esempio, scegliendo<br />

la minima, per arrivare ad avere cinque simboli). A questo punto stabiliamo che<br />

tutte le lettere dell’alfabeto saranno trasmesse con delle cinquine <strong>di</strong> simboli:<br />

a → 00001<br />

b → 00010<br />

c → 00011<br />

.........<br />

z → 10101<br />

ora per deco<strong>di</strong>ficare non ci sono più ambiguità.<br />

Esempio 2.3.2. Un collega in America lancia una moneta e, via posta elettronica,<br />

ci trasmette 0 se viene TESTA, ci trasmette 1 se viene CROCE. Nella<br />

trasmissione c’è però una probabilità p <strong>di</strong> errore, ovviamente 0 ≤ p ≤ 1. Supponiamo<br />

sia p = 0, 01; significa che presumiamo capiti una volta su 100 che venga<br />

trasmesso 1 invece <strong>di</strong> 0 o viceversa. Se noi riceviamo 0 non possiamo dunque<br />

essere sicuri che sia uscita TESTA. Per affrontare questa criticità, proviamo ad<br />

introdurre una ridondanza ossia ad introdurre degli elementi che ′′ appesantiscono ′′<br />

la trasmissione ma riducono la probabilità <strong>di</strong> errore.<br />

Chie<strong>di</strong>amo al collega in America <strong>di</strong> trasmettere 00 se esce TESTA e <strong>di</strong> trasmettere<br />

11 se esce CROCE. Supponiamo che esca TESTA.<br />

La probabilità <strong>di</strong> ricevere 11, ossia che nella trasmissione vengano effettuati due<br />

errori è p 2 = 0, 0001 e dunque, rispetto a prima, è molto ridotta. La probabilità <strong>di</strong><br />

ricevere 01 oppure 10, ossia che venga effettuato un solo errore, è 2 · 0, 99 · 0, 01 =<br />

0, 0198. La probabilità <strong>di</strong> ricevere 00, informazione corretta, è 0, 99·0, 99 = 0, 9801.<br />

Inoltre se riceviamo 01 oppure 10 siamo certi che vi è un errore <strong>di</strong> trasmissione e<br />

perciò possiamo richiedere al collega in America <strong>di</strong> riinviare il messaggio. Dunque<br />

solo in un caso su 10000 potremo essere tratti in errore.<br />

Se non ci sono problemi <strong>di</strong> tempo e <strong>di</strong> costi per l’utilizzo del canale <strong>di</strong> trasmissione,<br />

possiamo ancora migliorare la situazione fissando un intero positivo <strong>di</strong>spari


4. CANALI DI TRASMISSIONE. CANALI SIMMETRICI 7<br />

n e chiedendo <strong>di</strong> inviare una sequenza <strong>di</strong> n cifre 0 se esce TESTA e una sequenza<br />

<strong>di</strong> n cifre 1 se esce CROCE. Ciò aiuterà a deco<strong>di</strong>ficare TESTA se la sequenza <strong>di</strong><br />

arrivo contiene più cifre 0 che 1 e deco<strong>di</strong>fiare CROCE se contiene più cifre 1 che<br />

0, (Principio <strong>di</strong> massima Somiglianza).<br />

La probabilità <strong>di</strong> errore <strong>di</strong>venta<br />

Pn = <br />

0≤i


5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 8<br />

Nell’ambito <strong>dei</strong> canali <strong>di</strong> comunicazione senza memoria sono particolarmente<br />

importanti i canali simmetrici. Un canale <strong>di</strong> questo tipo è definito dalla proprietà<br />

che la probabilità p che una lettera ai in entrata sia trasformata in uscita<br />

in una lettera <strong>di</strong>versa aj non <strong>di</strong>pende da ai e aj ma è la stessa per tutte le coppie<br />

<strong>di</strong> lettere <strong>di</strong>stinte. Ciò significa che nella matrice del canale P risulta pij = p per<br />

ogni coppia (i, j), i = j. Il numero p si chiama probabilità <strong>di</strong> errore del canale.<br />

La matrice <strong>di</strong> un canale simmetrico rispetto ad un alfabeto A con q lettere è<br />

dunque del tipo<br />

P =<br />

⎛<br />

⎜<br />

⎝<br />

1 − (q − 1)p p · · · p<br />

p 1 − (q − 1)p · · · p<br />

.<br />

. . .<br />

p p · · · 1 − (q − 1)p<br />

In particolare sono molto usati i canali simmetrici binari denotati con BSC<br />

(Binary Symmetric Channel). In essi l’alfabeto <strong>di</strong>spone solo <strong>di</strong> due simboli, per<br />

esempio 0 ed 1; poichè ciascuna lettera in entrata ha la stessa probabilità p <strong>di</strong><br />

⎞<br />

⎟<br />

⎠ .<br />

essere trasformata nell’altra in uscita, la matrice del canale è data da<br />

P =<br />

1 − p p<br />

p 1 − p<br />

La matrice <strong>di</strong> un canale simmetrico binario viene schematizzata con la seguente<br />

figura<br />

1−P<br />

<br />

.<br />

0 <br />

<br />

<br />

<br />

0<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

P<br />

<br />

<br />

<br />

P<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

1<br />

<br />

1<br />

1−P<br />

5. Esempi. Co<strong>di</strong>ci: Fiscale, ISBN, Morse, ASCII.<br />

Riportiamo alcuni esempi <strong>di</strong> co<strong>di</strong>ci molto comuni i cui nomi sono certamente<br />

noti al lettore.<br />

Esempio 2.5.1. Il Co<strong>di</strong>ce Fiscale Italiano è un co<strong>di</strong>ce su un alfabeto <strong>di</strong> 36<br />

lettere (le 26 dell’alfabeto inglese e le cifre decimali da 0 a 9). Le sue parole servono<br />

a co<strong>di</strong>ficare qualunque persona o ente abbia rapporti con il sistema fiscale italiano.<br />

Nel caso <strong>di</strong> una persona fisica la parola corrispondente è composta da 16 lettere:<br />

le prime 6 si riferiscono a cognome e nome, il secondo gruppo <strong>di</strong> 5 in<strong>di</strong>vidua la<br />

data <strong>di</strong> nascita e il sesso, il successivo gruppo <strong>di</strong> 4 in<strong>di</strong>vidua la località italiana


5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 9<br />

o lo stato estero <strong>di</strong> nascita e l’ultima, che è <strong>di</strong> controllo, si calcola me<strong>di</strong>ante un<br />

opportuno algoritmo sulle prime 15.<br />

Precisamente:<br />

• Le prime tre lettere sono le prime tre consonanti del cognome.<br />

• Il secondo gruppo <strong>di</strong> tre lettere sono la prima, la terza e la quarta consonante<br />

del nome.<br />

• Seguono le ultime due cifre dell’anno <strong>di</strong> nascita.<br />

• La lettera seguente in<strong>di</strong>ca il mese <strong>di</strong> nascita secondo le corrispondenze<br />

Gennaio = A Maggio = E Settembre = P<br />

Febbraio = B Giugno = H Ottobre = R<br />

Marzo = C Luglio = L Novembre = S<br />

Aprile = D Agosto = M Dicembre = T<br />

• Le due cifre successive in<strong>di</strong>cano il giorno <strong>di</strong> nascita ed il sesso : per i<br />

soggetti <strong>di</strong> sesso maschile, il giorno <strong>di</strong> nascita rimane invariato (con i<br />

numeri da 1 a 31, facendo precedere dalla cifra 0 i giorni del mese da 1 a<br />

9). Per i soggetti <strong>di</strong> sesso femminile, il giorno <strong>di</strong> nascita viene aumentato<br />

<strong>di</strong> 40 (per cui i numeri che compaiono vanno da 41 a 71).<br />

• I quattro simboli successivi in<strong>di</strong>cano il comune italiano o lo stato estero<br />

<strong>di</strong> nascita.<br />

• Il se<strong>di</strong>cesimo carattere ha una funzione <strong>di</strong> controllo. Esso viene determinato<br />

nel seguente modo: a ciascuno <strong>dei</strong> primi quin<strong>di</strong>ci simboli viene<br />

assegnato un valore numerico; se un simbolo occupa una posizione <strong>di</strong> or<strong>di</strong>ne<br />

pari, ad esso si associa un numero secondo l’or<strong>di</strong>ne naturale (cioè<br />

alla lettera A o allo zero viene associato il valore zero; alla lettera B o<br />

al numero 1 viene associato il valore 1, e così via per tutte le lettere e i<br />

numeri); se invece un simbolo occupa una posizione <strong>di</strong> or<strong>di</strong>ne <strong>di</strong>spari, ad<br />

esso viene associato un valore numerico secondo la tabella sotto riportata.<br />

I valori numerici così determinati, vengono ad<strong>di</strong>zionati e la somma si<br />

<strong>di</strong>vide per il numero 26. Il carattere <strong>di</strong> controllo si ottiene convertendo<br />

tale cifra nel carattere corrispondente l’or<strong>di</strong>ne naturale.<br />

Tabella <strong>di</strong> conversione <strong>dei</strong> caratteri <strong>di</strong> or<strong>di</strong>ne <strong>di</strong>spari.<br />

A o zero = 1 | J o 9 = 21 | S = 12<br />

B o 1 = 0 | K = 2 | T = 14<br />

C o 2 = 5 | L = 4 | U = 16<br />

D o 3 = 7 | M = 18 | V = 10<br />

E o 4 = 9 | N = 20 | W = 22<br />

F o 5 = 13 | O = 11 | X = 25<br />

G o 6 = 15 | P = 3 | Y = 24<br />

H o 7 = 17 | Q = 6 | Z = 23<br />

I o 8 = 19 | R = 8 |


5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 10<br />

Esempio 2.5.2. Il co<strong>di</strong>ce ISBN ( International Standard Book Number) è un<br />

co<strong>di</strong>ce a blocchi C <strong>di</strong> lunghezza 10 sull’alfabeto <strong>di</strong> 11 lettere costituito dalle cifre<br />

decimali da 0 a 9 e dalla lettera X ed è usato per co<strong>di</strong>ficare i libri in commercio.<br />

Quasi ogni libro, infatti, che non sia troppo vecchio, presenta stampata sul retro<br />

della copertina una successione <strong>di</strong> <strong>di</strong>eci cifre, che è il suo ISBN e cioè la parola<br />

<strong>di</strong> C ad esso associata. Lo schema <strong>di</strong> co<strong>di</strong>fica, ad esempio, <strong>di</strong> un libro scritto in<br />

inglese è il seguente: la prima lettera a1 <strong>di</strong> una parola a è zero e corrisponde alla<br />

lingua inglese; le due lettere successive a2a3 in<strong>di</strong>viduano la casa e<strong>di</strong>trice; le sei<br />

lettere successive a4a5a6a7a8a9 in<strong>di</strong>cano un numero assegnato al libro dalla casa<br />

e<strong>di</strong>trice; l’ultima lettera a10 è <strong>di</strong> controllo ed è uguale al resto r della <strong>di</strong>visione per<br />

11 dell’intero<br />

a1 + 2a2 + 3a3 + 4a4 + 5a5 + 6a6 + 7a7 + 8a8 + 9a9<br />

se 0 ≤ r ≤ 9, è invece uguale ad X se risulta r = 10. Come si vede, l’ultima lettera<br />

<strong>di</strong> una parola del co<strong>di</strong>ce ISBN è l’unica che può assumere il valore X. Per esempio,<br />

il libro <strong>di</strong> E.F.Assmus e J.D.Key dal titolo Designs and Their Codes, pubblicato<br />

dalla Cambridge University Press, ha ISBN uguale a 0 − 521 − 41361 − 3. Ciò<br />

significa che la casa e<strong>di</strong>trice Cambridge University Press è co<strong>di</strong>ficata con ′′ 52 ′′ .<br />

Da notare che i trattini che separano alcuni gruppi <strong>di</strong> cifre dell’ISBN non hanno<br />

alcun significato al fine della co<strong>di</strong>fica. Per maggiori informazioni sul co<strong>di</strong>ce ISBN<br />

vedere il sito web: http://www.alice.it/bookshop/law.bks/co<strong>di</strong>inte.htm .<br />

Esempio 2.5.3. Il co<strong>di</strong>ce Morse è un co<strong>di</strong>ce a lunghezza variabile sull’alfabeto<br />

<strong>di</strong> tre lettere : punto, linea, spazio<br />

Γ = {•, −, spazio}<br />

Esso serve a co<strong>di</strong>ficare le lettere dell’alfabeto inglese ed è stato molto usato nel<br />

passato soprattutto per trasmettere messaggi con il telegrafo senza fili. Il co<strong>di</strong>ce,<br />

riportato in tabella, è stato costruito in modo che una sua parola è tanto più lunga<br />

quanto la lettera corrispondente è meno frequente nella lingua inglese.<br />

A • - B - • • • C - • - • D - ••<br />

E • F - •• - • G - - • H • • ••<br />

I •• J • - - - K - • - L • - ••<br />

M - - N - • O - - - P • - - •<br />

Q - - • - R • - • S • • • T -<br />

U •• - V • • • - W • - - X - •• -<br />

Y - • - - Z - - ••<br />

Si noti, per esempio, che nella lingua inglese la lettera E è più frequente della<br />

Z e quin<strong>di</strong> la parola del co<strong>di</strong>ce ′′ • ′′ corrispondente ad E è relativamente più corta<br />

<strong>di</strong> quella ′′ − − • • ′′ corrispondente a Z. Questo semplice accorgimento si presta<br />

chiaramente a rendere più veloce la co<strong>di</strong>fica, la trasmissione e la deco<strong>di</strong>fica <strong>dei</strong>


5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 11<br />

messaggi. Lo spazio che figura fra le lettere <strong>di</strong> Γ non è mai utilizzato per la<br />

co<strong>di</strong>fica <strong>di</strong> una singola lettera ma è essenziale per <strong>di</strong>videre tra loro le parole del<br />

co<strong>di</strong>ce presenti in un messaggio co<strong>di</strong>ficato. Più precisamente, quando si co<strong>di</strong>fica<br />

una frase, bisogna inserire esattamente uno spazio tra due lettere dell’alfabeto<br />

co<strong>di</strong>ficato ed almeno due spazi fra due parole. Per esempio, se usiamo il simbolo<br />

@ per in<strong>di</strong>care uno spazio, l’espressione<br />

si co<strong>di</strong>fica con<br />

CODICE MORSE<br />

− • − • @ − − − @ − • • @ • •@ − • − •@ • @@ − −@ − − − @ • − • @ • • • @•<br />

Osserviamo che il co<strong>di</strong>ce Morse non <strong>di</strong>stingue le lettere minuscole dalle maiuscole.<br />

Il co<strong>di</strong>ce Morse è un co<strong>di</strong>ce introdotto per la trasmissione <strong>di</strong> testo su linee telegrafiche<br />

e queste trasmettono solo un tipo <strong>di</strong> segnale: presenza o assenza <strong>di</strong> corrente.<br />

Se si rappresenta con il simbolo ′′ 1 ′′ la presenza <strong>di</strong> corrente e con il simbolo ′′ 0 ′′<br />

l’assenza, vigono le seguenti regole <strong>di</strong> modulazione:<br />

(1) Il punto ′′ • ′′ corrisponde all’unità fondamentale <strong>di</strong> tempo <strong>di</strong> trasmissione<br />

e viene in<strong>di</strong>cato con ′′ 1 ′′ .<br />

(2) La linea ′′ − ′′ corrisponde ad un segnale continuato <strong>di</strong> durata tripla rispetto<br />

quello del punto e dunque corrisponde ad inviare la sequenza 111.<br />

(3) Facendo corrispondere il simbolo 0 alla pausa della durata <strong>di</strong> un punto,<br />

in ogni lettera i singoli simboli <strong>di</strong> punto e linea sono separati da 0, in ogni<br />

parola le singole lettere sono fra loro separate da 000 e due parole sono<br />

fra loro separate da 0000000.<br />

Esempio 2.5.4. L’American Standard Code for Information Interchange, noto<br />

come Co<strong>di</strong>ce ASCII, dal 1968 è il co<strong>di</strong>ce standard per i computer. E’ un co<strong>di</strong>ce<br />

a blocchi sull’alfabeto F = {0, 1} formato da tutte le parole <strong>di</strong> lunghezza sette e,<br />

quin<strong>di</strong>, contiene esattamente 2 7 = 128 parole. Esso è stato costruito per co<strong>di</strong>ficare<br />

le lettere dell’alfabeto inglese maiuscole e minuscole, le cifre decimali da 0 a 9 e una<br />

serie <strong>di</strong> altri simboli e istruzioni allo scopo <strong>di</strong> permettere all’architettura interna<br />

<strong>di</strong> un computer <strong>di</strong> operare solo con i simboli 0 ed 1. Al co<strong>di</strong>ce standard iniziale<br />

a 7 bit sono seguite estensioni a 8 bit con lo scopo <strong>di</strong> raddoppiare il numero <strong>di</strong><br />

caratteri rappresentabili. ASCII esteso (8 bit) ha 256 configurazioni: le prime 128<br />

(da 00000000 a 01111111) sono associate ai caratteri dell’ASCII standard, le altre<br />

128 (da 10000000 a 11111111) sono associate a lettere accentate, a caratteri grafici,<br />

a simboli matematici e scientifici, eccetera.<br />

Nella Tabella 1 si riporta, secondo il co<strong>di</strong>ce ASCII, la traduzione in numeri<br />

<strong>dei</strong> simboli più comunemente usati durante la scrittura <strong>di</strong> un testo. Si parte da 32<br />

perchè gli interi minori <strong>di</strong> 32 e il 127 sono caratteri <strong>di</strong> controllo; il 32 corrisponde<br />

al carattere <strong>di</strong> spazio.


5. ESEMPI. CODICI: FISCALE, ISBN, MORSE, ASCII. 12<br />

Nella Tabella 2 sono elencate le parole del co<strong>di</strong>ce ASCII che corrispondono<br />

alle cifre da 0 a 9 e alle lettere maiuscole dell’alfabeto scritte in forma binaria.<br />

Per esempio la sequenza<br />

VA BENE !<br />

viene trasformata in<br />

0101011001000001001000000100001001000101010011100100010100100001<br />

Tabella 1<br />

32 44 , 56 8 68 D 80 P 92 .\ 104 h 116 t<br />

33 ! 45 − 57 9 69 E 81 Q 93 ] 105 i 117 u<br />

34 ′′ 46 . 58 : 70 F 82 R 94 ˆ 106 j 118 v<br />

35 # 47 / 59 ; 71 G 83 S 95 _ 107 k 119 w<br />

36 $ 48 0 60 < 72 H 84 T 96 108 l 120 x<br />

37 % 49 1 61 = 73 I 85 U 97 a 109 m 121 y<br />

38 & 50 2 62 > 74 J 86 V 98 b 110 n 122 z<br />

39 ′ 51 3 63 ? 75 K 87 W 99 c 111 o 123 {<br />

40 ( 52 4 64 @ 76 L 88 X 100 d 112 p 124 |<br />

41 ) 53 5 65 A 77 M 89 Y 101 e 113 q 125 }<br />

42 ∗ 54 6 66 B 78 N 90 Z 102 f 114 r 126 ∼<br />

43 + 55 7 67 C 79 O 91 [ 103 g 115 s<br />

Tabella 2<br />

(spazio) 00100000 ! 00100001 0 00110000 1 00110001<br />

2 00110010 3 00110011 4 00110100 5 00110101<br />

6 00110110 7 00110111 8 00111000 9 00111001<br />

A 01000001 B 01000010 C 01000011 D 01000100<br />

E 01000101 F 01000110 G 01000111 H 01001000<br />

I 01001001 J 01001010 K 01001011 L 01001100<br />

M 01001101 N 01001110 O 01001111 P 01010000<br />

Q 01010001 R 01010010 S 01010011 T 01010100<br />

U 01010101 V 01010110 W 01010111 X 01011000<br />

Y 01011001 Z 01011010


CAPITOLO 3<br />

Co<strong>di</strong>ci a Blocchi<br />

Per superare i problemi evidenziati dagli esempi del paragrafo 3 del capitolo<br />

precedente, i co<strong>di</strong>ci stu<strong>di</strong>ati sono principalmente co<strong>di</strong>ci a blocchi ossia co<strong>di</strong>ci in cui<br />

le parole hanno tutte la stessa lunghezza.<br />

La proprietà fondamentale <strong>dei</strong> co<strong>di</strong>ci a blocchi è che ogni blocco viene co<strong>di</strong>ficato<br />

e deco<strong>di</strong>ficato in modo in<strong>di</strong>pendente ed autonomo sia da quelli che lo precedono<br />

che da quelli che lo seguono. Pertanto per descrivere l’azione generale <strong>di</strong> co<strong>di</strong>fica<br />

e <strong>di</strong> deco<strong>di</strong>fica <strong>dei</strong> blocchi, basta descriverla su uno solo <strong>di</strong> essi.<br />

1. Definizioni<br />

Definizione 3.1.1. Sia Aq = {x1, x2, . . . , xq} un insieme finito <strong>di</strong> car<strong>di</strong>nalità<br />

|Aq| = q ≥ 2 e sia n un intero positivo. Si definisce co<strong>di</strong>ce a blocchi <strong>di</strong> lunghezza<br />

n ed or<strong>di</strong>ne q (o co<strong>di</strong>ce q-ario) un qualunque sottoinsieme non vuoto C<br />

<strong>di</strong> A n q .<br />

Nei casi q = 2 e q = 3 il co<strong>di</strong>ce si <strong>di</strong>ce rispettivamente co<strong>di</strong>ce binario e co<strong>di</strong>ce<br />

ternario.<br />

L’insieme Aq è detto alfabeto <strong>di</strong> C; una parola del co<strong>di</strong>ce è una n-pla or<strong>di</strong>nata<br />

<strong>di</strong> simboli dell’alfabeto e viene denotata con x = x1x2 · · · xn oppure x =<br />

(x1, x2, · · · , xn) o semplicemente con (x1, x2, · · · , xn), i simboli xi che formano la<br />

n-pla vengono detti componenti o coor<strong>di</strong>nate della parola. L’or<strong>di</strong>ne |C| = M <strong>di</strong> C<br />

si <strong>di</strong>ce grandezza del co<strong>di</strong>ce. A n q è detto spazio delle parole <strong>di</strong> lunghezza n e<br />

or<strong>di</strong>ne q.<br />

I co<strong>di</strong>ci a blocchi rispondono all’esigenza <strong>di</strong> avere tutte le parole con la stessa<br />

lunghezza e <strong>di</strong> avere la possibilità <strong>di</strong> prefissare la lunghezza n a seconda dell’esigenza<br />

del caso.<br />

Esistono co<strong>di</strong>ci in cui variano grandezza del co<strong>di</strong>ce e lunghezza delle parole,<br />

sono detti co<strong>di</strong>ci a lunghezza variabile.<br />

13


2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 14<br />

Noi tratteremo solo co<strong>di</strong>ci a blocchi e pertanto nel seguito li chiameremo<br />

soltanto co<strong>di</strong>ci.<br />

2. Co<strong>di</strong>ci che rivelano e correggono errori. Distanza <strong>di</strong> Hamming.<br />

R. Hamming (1948) è fra i primi a stu<strong>di</strong>are tecniche per aumentare l’efficienza<br />

<strong>di</strong> un co<strong>di</strong>ce. Lo scopo è quello <strong>di</strong> trovare meto<strong>di</strong> affinchè un co<strong>di</strong>ce sia in grado non<br />

solo <strong>di</strong> scoprire ma anche <strong>di</strong> correggere errori. Illustriamo l’esempio considerato<br />

dallo stesso Hamming e noto come co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming.<br />

Supponiamo <strong>di</strong> dover trasmettere <strong>dei</strong> messaggi consistenti <strong>di</strong> numeri da 0 a 15<br />

scritti in base 2. Si tratta dunque <strong>di</strong> quaterne <strong>di</strong> cifre 0 e 1. Il nostro co<strong>di</strong>ce ha<br />

per alfabeto il campo <strong>di</strong> Galois GF (2) = A2 = {0, 1} ed è |C| = M = 2 4 = 16.<br />

Se la parola da trasmettere è la quaterna (a1, a2, a3, a4), noi trasmettiamo la<br />

7-upla<br />

(a1, a2, a3, a4, a1 + a3 + a4, a1 + a2 + a4, a1 + a2 + a3)<br />

in cui le somme sono fatte ovviamente in GF (2).<br />

Ad esempio invece <strong>di</strong> trasmettere la quaterna (0, 1, 0, 0) viene trasmessa la<br />

settupla (0, 1, 0, 0, 0, 1, 1). In pratica si costruisce un co<strong>di</strong>ce <strong>di</strong> lunghezza n = 7,<br />

immergendo C = A 4 2 in A 7 2 me<strong>di</strong>ante l’applicazione iniettiva<br />

ϕ : A 4 2 → A 7 2<br />

che ad (a1, a2, a3, a4) ∈ A 4 2 associa l’elemento (a1, a2, a3, a4, a1 + a3 + a4, a1 + a2 +<br />

a4, a1 + a2 + a3) ∈ A 7 2.<br />

A partire dal co<strong>di</strong>ce C = A 4 2 si costruisce il co<strong>di</strong>ce ϕ(C) ⊆ A 7 2; poichè C e<br />

ϕ(C) sono in corrispondenza biunivoca, ′′ identifichiamo ′′ C con ϕ(C) ⊆ A 7 2 ossia<br />

parleremo <strong>di</strong> C come il co<strong>di</strong>ce le cui parole sono delle 7-ple.<br />

Ve<strong>di</strong>amo cosa abbiamo guadagnato nel passare da sequenze costituite da quattro<br />

simboli a parole costituite da sette simboli. Osserviamo che se (x1, x2, · · · , x7)<br />

è una parola del co<strong>di</strong>ce, si ha<br />

⎧<br />

⎨<br />

⎩<br />

x1 + x3 + x4 + x5 = 0<br />

x1 + x2 + x4 + x6 = 0<br />

x1 + x2 + x3 + x7 = 0<br />

Infatti, per esempio, il primo membro della prima equazione è x1+x3+x4+x5 =<br />

2x1 + 2x3 + 2x4 che in A2 vale 0.<br />

Il sistema lineare <strong>di</strong> equazioni costruito e considerato sul campo GF (2), è detto<br />

sistema delle con<strong>di</strong>zioni <strong>di</strong> parità del co<strong>di</strong>ce. Se riceviamo il messaggio<br />

(x1, x2, · · · , x7) ed esso non verifica il sistema lineare sopra scritto, <strong>di</strong> sicuro vi è<br />

un errore <strong>di</strong> trasmissione. Dunque il co<strong>di</strong>ce è in grado <strong>di</strong> scoprire errori.


2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 15<br />

Supponiamo ora <strong>di</strong> sapere, o <strong>di</strong> ritenere assai probabile, che nel trasmettere una<br />

7-pla <strong>di</strong> C si possa verificare al massimo un errore. Allora il sistema <strong>di</strong> equazioni<br />

soprascritto è tale che i casi possibili sono tutti e soli i seguenti:<br />

• se (x1, x2, · · · , x7) non verifica nessuna delle equazioni del sistema lineare,<br />

l’errore è al primo posto;<br />

• se (x1, x2, · · · , x7) verifica la prima equazione del sistema lineare ma non<br />

le altre due, l’errore è al secondo posto;<br />

• se (x1, x2, · · · , x7) verifica la seconda equazione del sistema lineare ma non<br />

le altre due, l’errore è al terzo posto;<br />

• se (x1, x2, · · · , x7) verifica la terza equazione del sistema lineare ma non<br />

le altre due , l’errore è al quarto posto;<br />

• se (x1, x2, · · · , x7) verifica la seconda e la terza equazione del sistema<br />

lineare ma non la prima, l’errore è al quinto posto;<br />

• se (x1, x2, · · · , x7) verifica prima e la terza equazione del sistema lineare<br />

ma non la seconda, l’errore è al sesto posto;<br />

• se (x1, x2, · · · , x7) verifica la prima e la seconda equazione del sistema<br />

lineare ma non la terza, l’errore è al settimo posto;<br />

Dunque se sappiamo che c’è un solo errore, il sistema ci consente anche<br />

<strong>di</strong> in<strong>di</strong>viduare dove c’è l’errore e quin<strong>di</strong> <strong>di</strong> correggerlo. Infatti essendo il co<strong>di</strong>ce<br />

binario, per correggerlo basta sostituire 0 a 1, o viceversa, nel posto in cui c’è<br />

l’errore.<br />

Esempio 3.2.1. Supponiamo <strong>di</strong> ricevere la parola p = (0, 1, 0, 1, 0, 1, 0), che<br />

contiene errori perchè non sod<strong>di</strong>sfa il sistema lineare, supponiamo inoltre <strong>di</strong> sapere<br />

che l’errore è uno solo. Poichè p non sod<strong>di</strong>sfa nessuna delle tre equazioni del<br />

sistema, per quanto schematizzato prima, si ha che l’errore è nella prima coor<strong>di</strong>nata<br />

e perciò la parola corretta è p = (1, 1, 0, 1, 0, 1, 0).<br />

Il motivo per cui il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming funziona è che, come si verifica<br />

imme<strong>di</strong>atamente, due <strong>di</strong>verse parole <strong>di</strong>fferiscono in almeno tre coor<strong>di</strong>nate.<br />

Cerchiamo <strong>di</strong> capire con un esempio. Sia (x1, x2, · · · , x7) una parola del co<strong>di</strong>ce<br />

che durante la trasmissione subisce un errore in una sola coor<strong>di</strong>nata, sia ad esempio<br />

la prima. Al posto <strong>di</strong> p = (x1, x2, · · · , x7) riceviamo p ′ = (x ′ 1, x2, · · · , x7). Poichè<br />

ogni altra parola <strong>di</strong>fferisce da p in almeno tre coor<strong>di</strong>nate, p ′ <strong>di</strong>fferisce dalle parole<br />

del co<strong>di</strong>ce <strong>di</strong>verse da p in almeno due coor<strong>di</strong>nate. Allora correggiamo l’errore<br />

andando a considerare la parola del co<strong>di</strong>ce ′′ più somigliante ′′ a quella ricevuta.<br />

L’unica parola del co<strong>di</strong>ce che <strong>di</strong>fferisce da (x ′ 1, x2, · · · , x7) in una sola coor<strong>di</strong>nata<br />

(e quin<strong>di</strong> più somigliante) è la p = (x1, x2, · · · , x7).


2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 16<br />

Le considerazioni fatte per il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming si generalizzano. Formalizziamo<br />

questi concetti introducendo la nozione <strong>di</strong> <strong>di</strong>stanza <strong>di</strong> due parole.<br />

Definizione 3.2.2. Siano p = (x1, x2, · · · , xn), p ′ = (y1, y2, · · · , yn) ∈ A n q . Si<br />

definisce <strong>di</strong>stanza <strong>di</strong> Hamming <strong>di</strong> p da p ′ il numero <strong>di</strong> coor<strong>di</strong>nate in cui p e p ′<br />

<strong>di</strong>fferiscono, si in<strong>di</strong>ca con d(p, p ′ ). In simboli<br />

d(p, p ′ ) = |{i | xi = yi}|.<br />

La <strong>di</strong>stanza <strong>di</strong> Hamming è un’applicazione d : A n q × A n q → R che sod<strong>di</strong>sfa le<br />

seguenti proprietà caratteristiche <strong>di</strong> una metrica tra punti del piano o dello spazio.<br />

Comunque prese tre parole p, p ′ , p ′′ del co<strong>di</strong>ce, si ha :<br />

(1) d(p, p ′ ) ≥ 0; d(p, p ′ ) = 0 se e solo se p = p ′ (positività)<br />

(2) d(p, p ′ ) = d(p ′ , p) (simmetria)<br />

(3) d(p, p ′ ) ≤ d(p, p ′′ ) + d(p ′′ , p ′ ) (<strong>di</strong>suguaglianza triangolare).<br />

La vali<strong>di</strong>tà <strong>di</strong> 1) e <strong>di</strong> 2) è imme<strong>di</strong>ata. Proviamo la 3).<br />

Siano p = (x1, x2, · · · , xn), p ′ = (y1, y2, · · · , yn), p ′′ = (z1, z2, · · · , zn), occorre<br />

provare che<br />

|{i | xi = yi}| ≤ |{i | xi = zi}| + |{i | zi = yi}|.<br />

Se in i si ha xi = yi, allora zi può essere uguale al più ad uno fra xi e yi e<br />

pertanto ogni i che compare al primo membro compare anche in almeno uno degli<br />

adden<strong>di</strong> del secondo membro. Ciò prova la vali<strong>di</strong>tà della <strong>di</strong>suguaglianza.<br />

Definizione 3.2.3. Si chiama <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce C, e si in<strong>di</strong>ca<br />

con d = d(C), il minimo delle <strong>di</strong>stanze tra due parole <strong>di</strong>stinte qualsiasi <strong>di</strong> C. In<br />

simboli<br />

d = d(C) = min{d(p, p ′ ), ∀ p, p ′ ∈ C, p = p ′ }.<br />

La <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce, come faremo vedere nel seguito, è il parametro<br />

su cui si basano le in<strong>di</strong>cazioni <strong>di</strong> quanti errori un co<strong>di</strong>ce può in<strong>di</strong>viduare e/o<br />

correggere.<br />

Definizione 3.2.4. Si <strong>di</strong>ce che il co<strong>di</strong>ce C è un (n, M, d)q - co<strong>di</strong>ce se è:<br />

• definito su un alfabeto <strong>di</strong> q simboli,<br />

• <strong>di</strong> lunghezza n,<br />

• <strong>di</strong> grandezza M = |C|,<br />

• con <strong>di</strong>stanza minima d.<br />

I numeri q, n, M, d sono i parametri del co<strong>di</strong>ce.<br />

Ad esempio il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming è un (7, 16, 3)2 - co<strong>di</strong>ce.


2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 17<br />

La scrittura C ⊆ A n q significa che le parole del co<strong>di</strong>ce hanno lunghezza n (perchè<br />

sono delle n-ple) e sono sull’alfabeto Aq <strong>di</strong> q simboli; pertanto, in seguito, la<br />

scrittura (n, M, d)q verrà spesso semplificata a seconda <strong>di</strong> quali sono i parametri<br />

necessari per la comprensione dell’argomento trattato.<br />

Per stu<strong>di</strong>are la relazione tra la <strong>di</strong>stanza <strong>di</strong> Hamming e il problema della correzione<br />

degli errori <strong>di</strong> trasmissione, iniziamo con la seguente definizione.<br />

Definizione 3.2.5. Un co<strong>di</strong>ce C si <strong>di</strong>ce h-correttore se h è il numero massimo<br />

<strong>di</strong> errori che il co<strong>di</strong>ce è in grado <strong>di</strong> correggere. Il co<strong>di</strong>ce si <strong>di</strong>ce h-rivelatore se h<br />

è il numero massimo <strong>di</strong> errori che il co<strong>di</strong>ce è in grado <strong>di</strong> rivelare.<br />

Ad esempio il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming è 1-correttore e 2-rivelatore.<br />

Teorema 3.2.6. Un co<strong>di</strong>ce C <strong>di</strong> lunghezza n è h-rivelatore se e solo se ha<br />

<strong>di</strong>stanza minima d = h + 1.<br />

Dimostrazione. Sia d = h+1. Se in una parola trasmessa p entra un numero<br />

t <strong>di</strong> errori, t ≤ h, la sequenza p ′ in uscita non è una parola del co<strong>di</strong>ce perchè<br />

d(p, p ′ ) = t < d e pertanto i t errori sono rivelati. Se invece entra un numero <strong>di</strong><br />

errori maggiore o uguale a d = h + 1, la sequenza che si riceve può essere un’altra<br />

parola del co<strong>di</strong>ce e quin<strong>di</strong> gli errori non vengono rivelati e pertanto se d = h + 1 il<br />

co<strong>di</strong>ce è h-rivelatore.<br />

Viceversa, sia h il massimo numero <strong>di</strong> errori che il co<strong>di</strong>ce rivela. Allora una<br />

qualunque parola <strong>di</strong> C deve avere almeno h + 1 componenti <strong>di</strong>verse da quella<br />

trasmessa, ossia d(C) ≥ h+1 e poichè h è il massimo numero <strong>di</strong> errori che il co<strong>di</strong>ce<br />

può rivelare, in C esistono due parole che hanno <strong>di</strong>stanza esattamente h + 1 da cui<br />

d(C) = h + 1. <br />

Teorema 3.2.7. Un co<strong>di</strong>ce C con <strong>di</strong>stanza minima d(C) = d corregge ⌊( d−1<br />

2 )⌋<br />

errori, dove ⌊( d−1<br />

2<br />

)⌋ in<strong>di</strong>ca la parte intera <strong>di</strong> d−1<br />

2 .<br />

Dimostrazione. Sia d(C) = d. Supponiamo che in una parola trasmessa p<br />

entri un numero <strong>di</strong> errori minore o uguale a ⌊( d−1<br />

2 )⌋ e sia p′ la n-pla ricevuta. Si<br />

ha d(p, p ′ ) ≤ ⌊( d−1<br />

2 )⌋. Proviamo che per ogni altra parola p′′ <strong>di</strong> C si ha d(p ′ , p ′′ ) ≥<br />

⌊( d−1<br />

2 )⌋ + 1 da ciò segue che la parola p è la più somigliante a p′ . Supponiamo per<br />

assurdo che esista una parola p ′′ <strong>di</strong> C, p ′′ = p, tale che d(p ′ , p ′′ ) ≤ ⌊( d−1<br />

2<br />

)⌋. Allora<br />

si ha d(p ′ , p) + d(p ′ , p ′′ ) ≤ 2⌊( d−1)⌋<br />

≤ d − 1, e questo, per la <strong>di</strong>suguaglianza<br />

2<br />

triangolare, implica d(p, p ′′ ) ≤ d − 1 ma ciò è assurdo perchè d(C) = d. <br />

Corollario 3.2.8. Sia C un co<strong>di</strong>ce con <strong>di</strong>stanza minima d.


2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 18<br />

(1) C scopre h errori ⇔ h < d, ossia d ≥ h + 1 .<br />

(2) C corregge h errori ⇔ d ≥ 2h + 1.<br />

Dimostrazione. (1) Un co<strong>di</strong>ce scopre h errori se e solo se, alterando<br />

una parola del co<strong>di</strong>ce in t ≤ h coor<strong>di</strong>nate, non si ottiene mai un’altra<br />

parola del co<strong>di</strong>ce. Questo accade se e solo se due parole del co<strong>di</strong>ce hanno<br />

<strong>di</strong>stanza almeno h + 1.<br />

(2) Un co<strong>di</strong>ce corregge h errori se e solo se alterando una parola del co<strong>di</strong>ce in<br />

t ≤ h coor<strong>di</strong>nate, la n-pla così ottenuta ha <strong>di</strong>stanza maggiore <strong>di</strong> h da una<br />

qualunque altra parola del co<strong>di</strong>ce. Questo accade se e solo se due parole<br />

del co<strong>di</strong>ce hanno <strong>di</strong>stanza almeno 2h + 1.<br />

<br />

L’insieme A n q può essere pensato come uno spazio <strong>di</strong> <strong>di</strong>mensione n e pertanto se<br />

in A n q si considera la <strong>di</strong>stanza <strong>di</strong> Hamming d, allora la coppia (A n q , d) è uno spazio<br />

metrico e possiamo dare la seguente definizione.<br />

Definizione 3.2.9. Sia r un intero positivo. Per ogni x ∈ A n q , si definisce sfera<br />

<strong>di</strong> centro x e raggio r l’insieme <strong>di</strong> tutti gli elementi y ∈ A n q tali che d(x, y) ≤ r.<br />

In simboli<br />

S(x, r) = {y | y ∈ A n q , d(x, y) ≤ r}.<br />

La definizione ora data permette <strong>di</strong> caratterizzare geometricamente i co<strong>di</strong>ci<br />

h-correttori sulla base del principio <strong>di</strong> massima somiglianza.<br />

Teorema 3.2.10. Sia C ⊆ A n q un co<strong>di</strong>ce. C è h-correttore se e solo se comunque<br />

prese due parole <strong>di</strong>stinte p e p ′ <strong>di</strong> C, si ha S(p, h) ∩ S(p ′ , h) = ∅.<br />

Dimostrazione. Sia C h-correttore e siano p, p ′ ∈ C, p = p ′ . Per il corollario<br />

3.2.8 si ha d(p, p ′ ) ≥ 2h+1. Supponiamo per assurdo che sia S(p, h)∩S(p ′ , h) = ∅<br />

e sia x ∈ S(p, h)∩S(p ′ , h). Ciò significa che d(p, x) ≤ h, d(p ′ , x) ≤ h e quin<strong>di</strong> per<br />

la proprietà della <strong>di</strong>suguaglianza triangolare si ha d(p, p ′ ) ≤ h + h < 2h + 1 = d<br />

e ciò è assurdo.<br />

Viceversa, sia S(p, h)∩S(p ′ , h) = ∅ per ogni p, p ′ ∈ C, p = p ′ . Supponiamo per<br />

assurdo che esistano p, p ′ ∈ C tali che d(p, p ′ ) ≤ 2h. Non può essere d(p, p ′ ) ≤ h<br />

perchè in tal caso p ′ ∈ S(p, h) contro l’ipotesi S(p, h) ∩ S(p ′ , h) = ∅. Sia allora<br />

h + 1 ≤ d(p, p ′ ) ≤ 2h, poniamo d(p, p ′ ) = h + t con 1 ≤ t ≤ h. Senza ledere in<br />

generalità possiamo supporre che le (h + t) componenti in cui p e p ′ <strong>di</strong>fferiscono<br />

siano le prime h + t . Sia z ∈ A n q avente le prime h componenti uguali a p<br />

e le successive t componenti ( dalla (h + 1)-esima alla (h + t)-esima ) uguali a<br />

quelle <strong>di</strong> p ′ ; tutte le altre componenti <strong>di</strong> z siano uguali a quelle <strong>di</strong> p e p ′ . Si ha<br />

d(z, p) = t ≤ h e perciò z ∈ S(p, h), inoltre d(z, p ′ ) = h e perciò z ∈ S(p ′ , h).


2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 19<br />

Risulta dunque z ∈ S(p, h) ∩ S(p ′ , h) e ciò è assurdo per l’ipotesi fatta. Rimane<br />

così provato che è d(p, p ′ ) ≥ 2h + 1 per ogni p, p ′ ∈ C e pertanto per il corollario<br />

3.2.8 il co<strong>di</strong>ce C è h-correttore. <br />

Se un co<strong>di</strong>ce C è h-correttore e durante la trasmissione entrano al più h errori,<br />

allora ogni n-pla p ′ ricevuta appartiene ad una ed una sola sfera S(p, h) e quin<strong>di</strong> p<br />

è la parola <strong>di</strong> C più vicina a p ′ . Dire che per la deco<strong>di</strong>fica si applica il principio <strong>di</strong><br />

massima somiglianza significa deco<strong>di</strong>ficare ogni n-pla ricevuta p ′ come<br />

la parola p centro della sfera S(p, h) a cui p ′ appartiene.<br />

Il numero h degli errori che un (n, M, d)-co<strong>di</strong>ce C garantisce <strong>di</strong> poter correggere<br />

(Teorema 3.2.10) è detto raggio <strong>di</strong> impacchettamento <strong>di</strong> C perchè coincide con il<br />

massimo intero r tale che<br />

S(p, r) ∩ S(p ′ , r) = ∅<br />

per ogni coppia <strong>di</strong> parole <strong>di</strong>stinte p, p ′ ∈ C.<br />

Esempio 3.2.11. Sia C = {c1, c2, c3, c4}, con<br />

c1 = (00000), c2 = (10110), c3 = (01011), c4 = (11101).<br />

La <strong>di</strong>stanza minima <strong>di</strong> questo co<strong>di</strong>ce è d = 3; pertanto per il teorema 3.2.7, è<br />

sempre possibile correggere esattamente un errore. Sia ora S l’insieme <strong>di</strong> tutte<br />

le possibili sequenze <strong>di</strong> lunghezza 5 su A = {0, 1}; ovviamente |S| = 2 5 = 32.<br />

Consideriamo tutte le sfere <strong>di</strong> raggio 1 e centro nelle parole <strong>di</strong> C.<br />

Sc1 = {(00000), (10000), (01000), (00100), (00010), (00001)}<br />

Sc2 = {(10110), (00110), (11110), (10010), (10100), (10111)}<br />

Sc3 = {(01011), (11011), (00011), (01111), (01001), (01010)}<br />

Sc4 = {(11101), (01101), (10101), (11001), (11111), (11100)}.<br />

L’unione <strong>di</strong> tali sfere contiene solo 24 delle possibili 32 sequenze <strong>di</strong> lunghezza 5,<br />

sia S ∗ l’insieme delle sequenze che non cadono in alcuna delle sfere:<br />

S ∗ = {(11000), (01100), (10001), (00101), (01110), (00111), (10011), (11010)}.<br />

Supponiamo che sia stata ricevuta la parola u = (00011); calcoliamo la <strong>di</strong>stanza<br />

da ogni parola <strong>di</strong> C, risulta :<br />

d(c1, u) = 2, d(c2, u) = 3, d(c3, u) = 1, d(c4, u) = 4.<br />

Poichè u ∈ Sc3, si può deco<strong>di</strong>ficare u con p = c3. Se fosse stata ricevuta la parola<br />

v = (11000), le <strong>di</strong>stanze dalle parole del co<strong>di</strong>ce sarebbero :<br />

d(c1, v) = 2, d(c2, v) = 3, d(c3, v) = 3, d(c4, v) = 2.<br />

A questo punto non saremmo in grado <strong>di</strong> correggere automaticamente l’errore,<br />

l’unica informazione sarebbe che ci sono almeno due errori perchè v non è una<br />

parola del co<strong>di</strong>ce.


2. CODICI CHE RIVELANO E CORREGGONO ERRORI. DISTANZA DI HAMMING. 20<br />

Il seguente teorema mette in luce che può risultare più conveniente avere co<strong>di</strong>ci<br />

con <strong>di</strong>stanza minima pari anzichè <strong>di</strong>spari.<br />

Teorema 3.2.12. Sia C un co<strong>di</strong>ce con <strong>di</strong>stanza minima d pari, d = 2h+2, h ∈<br />

N. Allora C oltre ad essere h-correttore è anche almeno (h + 1)-rivelatore.<br />

Dimostrazione. Nel teorema 3.2.7 è stato <strong>di</strong>mostrato che se C ha <strong>di</strong>stanza<br />

minima d pari allora C corregge h = ⌊ d−1 d ⌋ = − 1 errori. Proviamo che C rivela<br />

2 2<br />

(h + 1) = d<br />

d<br />

errori. Se in una parola p trasmessa entrano errori, la sequenza<br />

2 2<br />

ricevuta non appartiene a nessuna sfera avente centro in una parola del co<strong>di</strong>ce e<br />

raggio h, quin<strong>di</strong> i d errori sono rivelati. Essi non possono essere corretti perchè la<br />

2<br />

sequenza ricevuta potrebbe essere equi<strong>di</strong>stante da due parole del co<strong>di</strong>ce. <br />

Nota 3.2.13. Sia C un co<strong>di</strong>ce h-correttore. Supponiamo si trasmetta la parola<br />

p e si riceva p ′ in cui sono entrati h + 1 errori.<br />

• Se il co<strong>di</strong>ce ha <strong>di</strong>stanza minima <strong>di</strong>spari, l’errore non è rivelato e la deco<strong>di</strong>fica<br />

potrebbe essere errata perchè p ′ potrebbe appartenere ad una sfera<br />

S(q, h) con q = p, q ∈ C. Anzi, in questo caso, p verrebbe deco<strong>di</strong>ficata con<br />

q. Tutto questo perchè, per il Teorema 3.2.7 si ha d = 2h + 1 e pertanto<br />

d = d(p, q) ≤ d(p, p ′ ) + d(p ′ , q) ≤ (h + 1) + h = 2h + 1<br />

non porta ad un assurdo.<br />

• Se il co<strong>di</strong>ce ha <strong>di</strong>stanza minima pari, gli h + 1 errori vengono rivelati<br />

(anche se non corretti) perchè p ′ non può appartenere a nessuna sfera <strong>di</strong><br />

centro q ∈ C e raggio h. Infatti, per il Teorema 3.2.7 si ha d = 2h + 2 e<br />

pertanto<br />

d = d(p, q) ≤ d(p, p ′ ) + d(p ′ , q) ≤ (h + 1) + h = 2h + 1<br />

e ciò è assurdo.<br />

Esempio 3.2.14. Sia C un co<strong>di</strong>ce binario 1-correttore con <strong>di</strong>stanza minima<br />

d ≥ 3. Siano p e q due parole del co<strong>di</strong>ce aventi <strong>di</strong>stanza minima ossia d(p, q) = d.<br />

(1) Se durante la trasmissione entra un errore, la sequenza in uscita appartiene<br />

alla sfera S(p, 1) o alla sfera S(q, 1) a seconda che sia stata trasmessa<br />

p oppure q. Sia nel caso che d sia <strong>di</strong>spari sia nel caso che d sia pari, per il<br />

principio <strong>di</strong> massima somiglianza l’errore viene corretto e il deco<strong>di</strong>ficatore<br />

associa alla sequenza ricevuta il centro della sfera a cui essa appartiene<br />

che è la parola trasmessa.<br />

(2) Supponiamo ora <strong>di</strong> trasmettere p e che entrino due errori. Analizziamo<br />

la situazione <strong>di</strong>stinguendo il caso in cui d è <strong>di</strong>spari e il caso in cui d è pari.


3. EFFICIENZA E RAPPORTO DI SEPARAZIONE 21<br />

• 1 ◦ caso: la <strong>di</strong>stanza minima <strong>di</strong> C è <strong>di</strong>spari. Sia d = 3 e siano p =<br />

(11101), q = (00001) due parole del co<strong>di</strong>ce tali che d(p, q) = 3.<br />

Poichè abbiamo supposto che trasmettendo p entrino due errori, supponiamo<br />

arrivi la sequenza p ′ = (00101) che appartiene alla sfera<br />

S(q, 1) per cui i due errori non solo non verrebbero rivelati ma la sequenza<br />

verrebbe deco<strong>di</strong>ficata come la parola q quando invece è stata<br />

trasmessa p.<br />

• 2 ◦ caso: la <strong>di</strong>stanza minima <strong>di</strong> C è pari. Sia d = 4 e siano p =<br />

(11101), q = (00000) due parole del co<strong>di</strong>ce tali che d(p, q) = 4.<br />

Come per il caso precedente, supponiamo che nel trasmettere p entrino<br />

due errori e si riceva la sequenza p ′ = (00101) . Risulta d =<br />

(p ′ , p) = 2, d(p ′ , q) = 2; ciò significa che p ′ non appartiene nè alla sfera<br />

S(p, 1) nè alla sfera S(q, 1). Dunque se entrano due errori, anche in<br />

questo caso, non si è in grado <strong>di</strong> correggerli ma però vengono rivelati<br />

perchè d = (p, p ′ ) = 2 mentre la <strong>di</strong>stanza minima è 4.<br />

Efficienza <strong>di</strong> un co<strong>di</strong>ce.<br />

3. Efficienza e Rapporto <strong>di</strong> separazione<br />

Osserviamo che la lunghezza n del co<strong>di</strong>ce C ⊆ A n q si può vedere come una<br />

misura del costo del co<strong>di</strong>ce : più la parola <strong>di</strong> un co<strong>di</strong>ce è lunga, più tempo ed<br />

energia occorrono per inviare i messaggi e quin<strong>di</strong> maggiore è la spesa <strong>di</strong> gestione.<br />

La grandezza M del co<strong>di</strong>ce C, si può vedere come una misura della ricchezza del<br />

co<strong>di</strong>ce : più parole ha un co<strong>di</strong>ce, maggiore e più varia è la sua possibilità <strong>di</strong><br />

trasmettere informazioni. Il rapporto qualità/prezzo può essere rappresentato dal<br />

numero<br />

R = logqM<br />

n<br />

Il numero R si <strong>di</strong>ce efficienza o rapporto <strong>di</strong> informazione del co<strong>di</strong>ce. Occorre<br />

tenerlo il più possibile vicino ad 1 perchè il co<strong>di</strong>ce sia poco costoso, ma per renderlo<br />

efficiente <strong>di</strong> scoprire e/o correggere errori non deve essere troppo vicino ad 1.<br />

Nota 3.3.1. Se k < n è la lunghezza minima della sequenza per poter esprimere<br />

poichè risulta<br />

tutti i messaggi (ossia Ak q è il vocabolario minimo), allora si ha R = k<br />

n<br />

M = qk . Inoltre da M ≤ qn segue R ≤ 1.<br />

Rapporto <strong>di</strong> separazione.<br />

Se d è la <strong>di</strong>stanza minima del co<strong>di</strong>ce, un’altra misura è il numero<br />

δ = d<br />

n


4. RELAZIONI FRA I PARAMETRI DI UN CODICE 22<br />

detto rapporto <strong>di</strong> separazione del co<strong>di</strong>ce. Più grande è δ (ossia più grande è<br />

la <strong>di</strong>stanza minima d), più il co<strong>di</strong>ce ha possibilità <strong>di</strong> correggere gli errori.<br />

4. Relazioni fra i parametri <strong>di</strong> un co<strong>di</strong>ce<br />

Sia C ⊆ A n q un (n, M, d)q -co<strong>di</strong>ce .<br />

I parametri del co<strong>di</strong>ce a blocchi non variano in modo in<strong>di</strong>pendente ma sono<br />

correlati fra loro. E’ dunque importante stabilire delle relazioni che esprimano<br />

questi legami, non solo per determinare la possibile esistenza <strong>di</strong> un co<strong>di</strong>ce, ma<br />

anche per stabilire quando è che un co<strong>di</strong>ce è migliore <strong>di</strong> un altro in considerazione<br />

delle esigenze del caso, per esempio a parità <strong>di</strong> prestazioni è preferibile il co<strong>di</strong>ce<br />

più corto perchè meno costoso.<br />

Le principali relazioni fra i parametri riguardano la limitazione superiore e la<br />

limitazione inferiore <strong>di</strong> M in termini <strong>di</strong> n e d.<br />

Teorema 3.4.1 (Stima <strong>di</strong> Singleton). Sia C ⊆ A n q con <strong>di</strong>stanza minima d.<br />

Allora risulta<br />

|C| ≤ q n−d+1<br />

Dimostrazione. Comunque prese due parole p, p ′ ∈ C, p = p ′ , esse hanno<br />

al più (n − d)-componenti uguali perchè d(p, p ′ ) ≥ d. Ne segue che comunque si<br />

fissano n − d + 1 posti i1, . . . , in−d+1, nel co<strong>di</strong>ce non esistono due parole <strong>di</strong>stinte<br />

aventi la stessa (n − d + 1)-pla nei posti fissati. Quin<strong>di</strong> fissati comunque n − d + 1<br />

posti, possiamo associare ad ogni parola la (n − d + 1)-pla (ci1, . . . , cin−d+1 ) che<br />

si trova nei posti fissati, inoltre a parole <strong>di</strong>stinte corrispondono (n − d + 1)-ple<br />

<strong>di</strong>stinte. Da ciò segue che l’applicazione<br />

ϕ : C → A n−d+1<br />

q , ϕ(c) = (ci1, . . . , cin−d+1 )<br />

è iniettiva e pertanto |C| ≤ |A n−d+1<br />

q | = q n−d+1 . <br />

Corollario 3.4.2. Nella stima <strong>di</strong> Singleton vale l’uguaglianza se e solo se per<br />

ogni n − d + 1 componenti le parole del co<strong>di</strong>ce assumono su <strong>di</strong> esse tutti i possibili<br />

valori.<br />

Un’altra stima superiore per |C| si può ottenere riprendendo il concetto <strong>di</strong> sfera<br />

<strong>di</strong> centro x ∈ C e raggio r (def. 3.2.9). Calcoliamo anzittutto la car<strong>di</strong>nalità ( o<br />

volume) <strong>di</strong> una sfera.


4. RELAZIONI FRA I PARAMETRI DI UN CODICE 23<br />

Teorema 3.4.3. Il numero degli elementi della sfera S(x, r) è<br />

|S(x, r)| =<br />

r<br />

i=0<br />

<br />

n<br />

(q − 1)<br />

i<br />

i<br />

Dimostrazione. Sia 0 ≤ t ≤ n e sia σ(x, t) = {y | y ∈ A n q , d(x, y) = t}.<br />

Allora la sfera <strong>di</strong> centro x e raggio r è tale che<br />

r<br />

S(x, r) = σ(x, t).<br />

t=0<br />

Poichè per t = t ′ si ha σ(x, t) ∩ σ(x, t ′ ) = ∅, risulta<br />

|S(x, r)| =<br />

r<br />

t=0<br />

|σ(x, t)|<br />

e pertanto per calcolare |S(x, r)| basta calcolare |σ(x, t)|.<br />

Se x = (x1, . . . , xn) è il centro, σ(x, t) è data da tutte le n-ple y = (y1, . . . , yn)<br />

tali che d(x, y) = t. Fissiamo t posti della n-pla x, ad esempio i primi t. Il numero<br />

delle n-ple che <strong>di</strong>fferiscono dalla x = (x1, . . . , xn) nei primi t posti è (q −1) t , infatti<br />

in ognuno <strong>dei</strong> t posti fissati possono comparire come componenti i (q − 1) elementi<br />

<strong>di</strong> Aq <strong>di</strong>versi dalla componente che compare in quel posto in x. I t posti possono<br />

essere fissati in tanti mo<strong>di</strong> quante sono le combinazioni semplici <strong>di</strong> n elementi presi<br />

a t a t . Allora<br />

|σ(x, t)| =<br />

Segue che la car<strong>di</strong>nalità <strong>di</strong> una sfera è<br />

|S(x, r)| =<br />

<br />

n<br />

(q − 1)<br />

t<br />

t .<br />

r<br />

i=0<br />

<br />

n<br />

(q − 1)<br />

i<br />

i .<br />

Grazie al precedente risultato, si ottiene la seguente limitazione detta anche<br />

limitazione per impacchettamento <strong>di</strong> sfere.<br />

Teorema 3.4.4 (Stima <strong>di</strong> Hamming). Sia C ⊆ A n q un co<strong>di</strong>ce che corregge h<br />

errori. Allora risulta<br />

|C| ≤<br />

h<br />

i=0<br />

qn <br />

(q − 1) i<br />

Dimostrazione. Per il corollario 3.2.8 si ha d ≥ 2h + 1 e pertanto per ogni<br />

coppia <strong>di</strong> parole x, y ∈ C, le due sfere S(x, h) e S(y, h) non hanno elementi in<br />

comune. D’altra parte, A n q contiene l’unione S <strong>di</strong> tutte le sfere S(x, h) al variare<br />

n<br />

i


4. RELAZIONI FRA I PARAMETRI DI UN CODICE 24<br />

<strong>di</strong> x ∈ C ed essendo tali sfere in numero <strong>di</strong> |C| e a due a due <strong>di</strong>sgiunte, S contiene<br />

|C| · |S(x, r)| elementi e quin<strong>di</strong><br />

|C| · |S(x, r)| ≤ q n .<br />

Nota 3.4.5. La stima <strong>di</strong> Hamming, nella gran parte <strong>dei</strong> casi, è migliore <strong>di</strong><br />

quella <strong>di</strong> Singleton. Infatti si <strong>di</strong>mostra che se C ⊆ A n 2 è un co<strong>di</strong>ce con <strong>di</strong>stanza<br />

minima d, i parametri per cui la stima <strong>di</strong> Singleton è migliore <strong>di</strong> quella <strong>di</strong> Hamming<br />

sono solo i seguenti.<br />

• d = 2 e n qualunque;<br />

• d = 4 e n = 4, 5, 6;<br />

• d = 6 e N = 6, 7;<br />

• d pari, d ≥ 8 e n = d.<br />

Un’altra stima superiore per |C| si ottiene considerando il massimo valore<br />

possibile della <strong>di</strong>stanza tra due parole <strong>di</strong>stinte del co<strong>di</strong>ce.<br />

Teorema 3.4.6 (Stima <strong>di</strong> Plotkin). Sia C ⊆ A n q con <strong>di</strong>stanza minima d e tale<br />

che qd − n(q − 1) > 0. Allora si ha<br />

|C| ≤<br />

qd<br />

qd − n(q − 1) .<br />

Dimostrazione. Per la <strong>di</strong>mostrazione si rinvia a [2] pag. 413. <br />

I co<strong>di</strong>ci C per i quali nella stima <strong>di</strong> Hamming vale l’uguaglianza si <strong>di</strong>cono<br />

perfetti. Ad esempio il co<strong>di</strong>ce (7, 4) <strong>di</strong> Hamming è perfetto.<br />

Definizione 3.4.7. Sia C ⊆ A n q un co<strong>di</strong>ce h-correttore. C si <strong>di</strong>ce perfetto se<br />

|C| =<br />

h<br />

i=0<br />

qn <br />

(q − 1) i<br />

n<br />

i<br />

I seguenti co<strong>di</strong>ci sono detti co<strong>di</strong>ci perfetti banali.<br />

(1) C = A n q verifica l’uguaglianza per h = 0.<br />

(2) C tale che |C| = 1 , in questo caso ogni n-pla viene deco<strong>di</strong>ficata nell’unica<br />

parola del co<strong>di</strong>ce.<br />

(3) C = {(00 · · · 0), (11 · · · 1)} binario <strong>di</strong> lunghezza n <strong>di</strong>spari, costituito dalle<br />

sole due parole aventi come componenti tutti 0 oppure tutti 1, corregge<br />

n−1<br />

2 errori ed è perfetto.


4. RELAZIONI FRA I PARAMETRI DI UN CODICE 25<br />

Nota 3.4.8. Dalla definizione 3.4.7 seguono imme<strong>di</strong>atamente le seguenti caratterizzazioni<br />

e le seguenti con<strong>di</strong>zioni necessarie <strong>di</strong> esistenza.<br />

(1) Un co<strong>di</strong>ce C h-correttore è perfetto se e solo se l’unione <strong>di</strong> tutte le sfere<br />

S(x, h), x ∈ C, coincide con l’insieme <strong>di</strong> tutte le parole possibili.<br />

(2) Un co<strong>di</strong>ce C h-correttore è perfetto se e solo se la famiglia {S(x, h)}x∈C<br />

delle sfere <strong>di</strong> centro x ∈ C e raggio h costituisce una partizione <strong>di</strong> Fq.<br />

(3) Un co<strong>di</strong>ce C h-correttore è perfetto se e solo se ogni n-pla <strong>di</strong> A n q ha una<br />

<strong>di</strong>stanza minore od uguale ad h da una ed una sola parola <strong>di</strong> C .<br />

(4) Con<strong>di</strong>zione necessaria affinchè un co<strong>di</strong>ce C ⊆ A n q , h-correttore, sia perfetto<br />

è che<br />

h<br />

i=0<br />

<br />

n<br />

(q − 1)<br />

i<br />

i | q n .<br />

(5) Con<strong>di</strong>zione necessaria per l’esistenza <strong>di</strong> un co<strong>di</strong>ce C ⊆ A n q 1-correttore<br />

perfetto è che<br />

(1 + n(q − 1)) | q n .<br />

(6) Non esistono co<strong>di</strong>ci binari 1-correttori perfetti <strong>di</strong> lunghezza pari .<br />

Esempio 3.4.9. Consideriamo il piano proiettivo <strong>di</strong> or<strong>di</strong>ne 2 o piano <strong>di</strong> Fano.<br />

P = {1, 2, 3, 4, 5, 6, 7} è l’insieme <strong>dei</strong> punti.<br />

2<br />

1<br />

6<br />

3<br />

4 5 7<br />

B = {B1 = {1, 2, 4}, B2 = {2, 3, 5}, B3 = {3, 4, 6}, B4 = {4, 5, 7}, B5 = {5, 6, 1}, B6 =<br />

{6, 7, 2}, B7 = {7, 1, 3}} è l’insieme delle rette.<br />

La matrice d’incidenza A del piano <strong>di</strong> Fano è :<br />

1 2 3 4 5 6 7<br />

B1 1 1 0 1 0 0 0<br />

B2 0 1 1 0 1 0 0<br />

B3 0 0 1 1 0 1 0<br />

B4 0 0 0 1 1 0 1<br />

B5 1 0 0 0 1 1 0<br />

B6 0 1 0 0 0 1 1<br />

B7 1 0 1 0 0 0 1


4. RELAZIONI FRA I PARAMETRI DI UN CODICE 26<br />

A partire da questa matrice d’incidenza, costruiamo un co<strong>di</strong>ce binario 1-correttore<br />

perfetto C nel modo seguente.<br />

Le parole <strong>di</strong> C sono:<br />

(1) Le sette righe della matrice A che denoteremo con ci.<br />

(2) Le sette righe della matrice Ā ottenuta da A scambiando tra loro i simboli<br />

0 e 1. Ad esempio la prima riga <strong>di</strong> Ā dà la parola 0010111. Denotiamo<br />

con ¯ci tali parole.<br />

(3) Le parole 0 = (0000000) ed 1 = (1111111).<br />

Per come costruite le parole e ricordando le proprietà del piano proiettivo, è facile<br />

verificare che C ha <strong>di</strong>stanza minima d = 3. Il co<strong>di</strong>ce è 1-correttore e |C| = 16.<br />

Inoltre C è perfetto perchè :<br />

h<br />

i=0<br />

qn <br />

(q − 1) i =<br />

n<br />

i<br />

7<br />

0<br />

2 7<br />

<br />

(q − 1) 0 7<br />

+ (q − 1) 1<br />

1<br />

= 27<br />

1 + 7<br />

= 16 = |C|<br />

Dopo aver considerato tre limitazioni superiori per |C|, riportiamo una limitazione<br />

inferiore .<br />

Teorema 3.4.10 (Stima <strong>di</strong> Gilbert-Varshamov). Sia M = |C| il massimo per<br />

cui esiste un co<strong>di</strong>ce C ⊆ A n q con <strong>di</strong>stanza minima d. Si ha<br />

M ≥<br />

d−1<br />

i=0<br />

qn <br />

(q − 1) i<br />

Dimostrazione. Costruiamo un co<strong>di</strong>ce C che verifica l’uguaglianza. Consideriamo<br />

una qualunque x1 ∈ A n q e mettiamola in C. Scegliamo una seconda parola<br />

x2 ∈ A n q che abbia <strong>di</strong>stanza almeno d da x1 e mettiamola in C. Scegliamo una<br />

terza parola x3 ∈ A n q che abbia <strong>di</strong>stanza almeno d sia da x1 che da x2. Proce<strong>di</strong>amo<br />

allo stesso modo. Dopo aver scelto le prime h parole x1, . . . , xh aventi tutte a due<br />

a due <strong>di</strong>stanza almeno d tra <strong>di</strong> loro, scegliamo la (h + 1)-esima parola xh+1 avente<br />

<strong>di</strong>stanza almeno d da tutte le parole x1, . . . , xh, sempre che questo sia possibile.<br />

Infatti il proce<strong>di</strong>mento avrà termine perchè ad un certo punto non ci sarà più<br />

spazio per scegliere ancora una parola. A questo punto si è costruito un co<strong>di</strong>ce C<br />

che ha la seguente proprietà: l’unione <strong>di</strong> tutte le sfere S(x, d − 1) con centri nei<br />

punti x ∈ C coincide con tutto A n q , se così non fosse avremmo potuto continuare.<br />

Il co<strong>di</strong>ce costruito è tale che<br />

n<br />

i<br />

M · |S(x, d − 1)| ≥ q n<br />

da cui segue la stima per M.


5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 27<br />

Quanto esposto fino ad ora giustifica il fatto che ad un buon co<strong>di</strong>ce si richiedono<br />

le seguenti proprietà:<br />

• lunghezza n abbastanza piccola per permettere una trasmissione veloce<br />

delle sue parole;<br />

• un numero M <strong>di</strong> parole abbastanza grande per co<strong>di</strong>ficare una buona<br />

quantità <strong>di</strong> messaggi;<br />

• <strong>di</strong>stanza minima abbastanza grande per correggere il maggior numero<br />

possibile <strong>di</strong> errori.<br />

Ovviamente queste richieste sono fra loro contrastanti e perciò non è possibile<br />

ottimizzare uno <strong>dei</strong> parametri senza avere preventivamente fissato gli altri due.<br />

Questo tipo <strong>di</strong> problema è quello comunemente noto con il nome <strong>di</strong> problema<br />

fondamentale della teoria <strong>dei</strong> co<strong>di</strong>ci.<br />

5. (n, k)-co<strong>di</strong>ci, co<strong>di</strong>ci MDS, co<strong>di</strong>ci equivalenti<br />

Esistono co<strong>di</strong>ci nei quali una parola rimane in<strong>di</strong>viduata univocamente assegnando<br />

un numero <strong>di</strong> simboli minore della lunghezza delle parole.<br />

Definizione 3.5.1. Siano i1, i2, . . . , ik interi positivi tali che 1 ≤ i1 < i2 <<br />

. . . < ik ≤ n. I posti i1, i2, . . . , ik sono detti posti <strong>di</strong> informazione per un co<strong>di</strong>ce<br />

C ⊆ A n q se, comunque si fissi una k-upla (y1, y2, . . . , yk), yi ∈ Aq, esiste una ed una<br />

sola parola <strong>di</strong> C tale che nel posto i1 compaia y1, nel posto i2 compaia y2, . . . , nel<br />

posto ik compaia yk.<br />

Definizione 3.5.2. Un co<strong>di</strong>ce C ⊆ A n q avente k posti <strong>di</strong> informazione si <strong>di</strong>ce<br />

(n, k)-co<strong>di</strong>ce oppure co<strong>di</strong>ce sistematico.<br />

Se esistono k posti d’informazione, l’applicazione <strong>di</strong> C in A k q che ad ogni parola<br />

<strong>di</strong> C associa la k-upla che si presenta nei k posti d’informazione è biunivoca perchè<br />

la k-upla in<strong>di</strong>vidua la parola univocamente e pertanto M = |C| = q k . I k simboli<br />

che compaiono nella k-upla sono detti <strong>di</strong> informazione mentre i rimanenti n − k<br />

simboli sono detti <strong>di</strong> controllo o ridondanti. In un (n, k)-co<strong>di</strong>ce le sequenze<br />

emesse dal co<strong>di</strong>ficatore <strong>di</strong> sorgente vengono sud<strong>di</strong>vise in k-uple e ad ogni k-upla<br />

vengono aggiunti n−k simboli <strong>di</strong> controllo me<strong>di</strong>ante un fissato algoritmo; in questo<br />

modo ogni k-upla viene trasformata in una n-upla. Poichè in un (n, k)-co<strong>di</strong>ce è<br />

possibile <strong>di</strong>stinguere i simboli <strong>di</strong> informazione da quelli ridondanti, questi co<strong>di</strong>ci<br />

sono anche detti separabili. Il rapporto k viene detto tasso <strong>di</strong> informazione<br />

n<br />

<strong>di</strong> un (n, k)-co<strong>di</strong>ce.


5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 28<br />

Teorema 3.5.3. Se C ⊆ A n q è un (n, k)-co<strong>di</strong>ce allora |C| = q k .<br />

Dimostrazione. Segue dalla biezione esistente fra C e A k q . <br />

Esempio 3.5.4. Sia C il co<strong>di</strong>ce formato dalle parole: C = {0011, 0101, 1101}.<br />

Dire se C è un (4, 2)-co<strong>di</strong>ce.<br />

Risposta - NO, perchè non vale il Teorema 3.5.3, infatti |C| = 2 2 .<br />

Analizziamo il co<strong>di</strong>ce solo in base alla definizione <strong>di</strong> (n, k)-co<strong>di</strong>ce.<br />

(1) I posti {1, 2} non sono <strong>di</strong> informazione, infatti delle possibili coppie 00, 01,<br />

10, 11 in C manca 10.<br />

(2) I posti {1, 4} non sono <strong>di</strong> informazione perchè manca la coppia 00 e la<br />

coppia 01 figura due volte.<br />

Analogamente per le altre coppie <strong>di</strong> posti e dunque poichè C non ha due posti <strong>di</strong><br />

informazione non è un (4, 2)-co<strong>di</strong>ce.<br />

Esempio 3.5.5. Consideriamo il co<strong>di</strong>ce C = {0011, 0101, 1100, 1011}. I posti<br />

{1, 2} sono <strong>di</strong> informazione come anche i posti {1, 3}; al contrario comunque si<br />

considerino altri due posti, essi non sono <strong>di</strong> informazione. C è un (4, 2)-co<strong>di</strong>ce.<br />

Esempio 3.5.6. I co<strong>di</strong>ci<br />

C1 = {0000, 1100, 1010, 1001, 0110, 0101, 0011, 1111}<br />

C2 = {1000, 0100, 0010, 0001, 1110, 1011, 1101, 0111}.<br />

sono entrambi <strong>dei</strong> (4, 3)-co<strong>di</strong>ci perchè tre qualsiasi posti sono <strong>di</strong> informazione.<br />

Teorema 3.5.7 (Limitazione <strong>di</strong> Singleton). Se C ⊆ A n q è un (n, k)-co<strong>di</strong>ce allora<br />

d ≤ n − k + 1.<br />

Dimostrazione. Se C è un (n, k)-co<strong>di</strong>ce con <strong>di</strong>stanza minima d, allora per<br />

3.4.1 e 3.5.3 si ha<br />

|C| ≤ q n−d+1<br />

e |C| = q k .<br />

Queste relazioni implicano k ≤ n − d + 1 da cui d ≤ n − k + 1 . <br />

La <strong>di</strong>suguaglianza <strong>di</strong> 3.5.7 dà una limitazione superiore per la <strong>di</strong>stanza minima<br />

<strong>di</strong> un (n, k)-co<strong>di</strong>ce. Se, da un lato, al crescere della ridondanza n−k può aumentare<br />

la capacità del co<strong>di</strong>ce <strong>di</strong> correggere errori, dall’altro al crescere della ridondanza<br />

<strong>di</strong>minuisce il tasso <strong>di</strong> informazione k il quale dà la misura della percentuale <strong>di</strong><br />

n<br />

informazione contenuta in una n-upla.<br />

Come già detto, in un buon co<strong>di</strong>ce dovrebbero essere gran<strong>di</strong> sia k (e quin<strong>di</strong><br />

n<br />

poca ridondanza) sia la <strong>di</strong>stanza minima (più grande è d più il co<strong>di</strong>ce ha possibilità


5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 29<br />

<strong>di</strong> correggere errori). Poichè le due cose si contrappongono, occorre trovare co<strong>di</strong>ci<br />

in cui i parametri siano in un giusto equilibrio.<br />

Definizione 3.5.8. Un (n, k)-co<strong>di</strong>ce si <strong>di</strong>ce ottimale oppure MDS ( a massima<br />

<strong>di</strong>stanza separabile) se, comunque presi k posti, essi sono <strong>di</strong> informazione.<br />

Teorema 3.5.9. Con<strong>di</strong>zione necessaria e sufficiente affinchè un (n, k)-co<strong>di</strong>ce<br />

C con <strong>di</strong>stanza minima d sia un co<strong>di</strong>ce MDS è che sia d = n − k + 1 .<br />

Dimostrazione. Sia C un co<strong>di</strong>ce MDS. Supponiamo per assurdo che sia d ≤<br />

n − k, allora esistono in C due parole x e y tali che d(x, y) ≤ n − k; queste due<br />

parole hanno almeno k componenti uguali e pertanto esistono k posti che non sono<br />

<strong>di</strong> informazione e C non è MDS.<br />

Viceversa, sia d = n − k + 1. Se per assurdo C non fosse MDS, ci sarebbero<br />

k posti non <strong>di</strong> informazione. Siano x e y le parole aventi componenti uguali nei k<br />

posti non <strong>di</strong> informazione. Si ha d(x, y) ≤ n − k < d e ciò è assurdo perchè d è la<br />

<strong>di</strong>stanza minima del co<strong>di</strong>ce. <br />

Esempio 3.5.10. I co<strong>di</strong>ci C1 e C2 dell’esempio 3.5.6 sono (4, 3)-co<strong>di</strong>ci ottimali.<br />

Esempio 3.5.11. Sia (F, +) un gruppo ad<strong>di</strong>tivo <strong>di</strong> or<strong>di</strong>ne q. Prendendo F come<br />

alfabeto, consideriamo il co<strong>di</strong>ce C <strong>di</strong> lunghezza n, definito da<br />

n<br />

C = {(x1, x2, . . . , xn) | xi ∈ F, xi = 0}.<br />

Se in ogni n-pla fissiamo n − 1 elementi, rimane univocamente determinato l’elemento<br />

n-simo perchè deve risultare x1 + x2 + · · · + xn = 0.<br />

Dunque C è un co<strong>di</strong>ce con n−1 posti d’informazione e pertanto è un (n, n−1)co<strong>di</strong>ce.<br />

Poichè è possibile scrivere qualsiasi elemento in funzione <strong>dei</strong> rimanenti<br />

n − 1, il co<strong>di</strong>ce C è MDS. Allora la <strong>di</strong>stanza minima è d = n − (n − 1) + 1 = 2.<br />

Poichè n − 1 posti qualsiasi sono <strong>di</strong> informazione, ogni parola ha un solo simbolo<br />

<strong>di</strong> controllo.<br />

Esempio 3.5.12. Co<strong>di</strong>ce a ripetizione : è così detto un co<strong>di</strong>ce C in cui i<br />

simboli che compaiono in una qualsiasi parola sono tutti uguali tra loro.<br />

Se C è un co<strong>di</strong>ce a ripetizione <strong>di</strong> lunghezza n, allora il co<strong>di</strong>ce è un (n, 1)-co<strong>di</strong>ce;<br />

infatti un solo simbolo è sufficiente per in<strong>di</strong>viduare una parola. Inoltre C è un<br />

co<strong>di</strong>ce MDS perchè qualsiasi posto è <strong>di</strong> informazione. La <strong>di</strong>stanza minima è allora<br />

d = n − 1 + 1 = n. Il co<strong>di</strong>ce C corregge allora fino a ⌊ n−1⌋<br />

errori.<br />

2<br />

i=1


5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 30<br />

NOTA - Il co<strong>di</strong>ce a ripetizione è un co<strong>di</strong>ce con molta ridondanza e quin<strong>di</strong><br />

poco conveniente perchè per trasmettere una informazione si devono usare troppi<br />

simboli; inoltre contiene solo q parole (supposto che l’alfabeto abbia q simboli).<br />

Esempio 3.5.13. Costruzione <strong>di</strong> un (p, 2)-co<strong>di</strong>ce MDS con alfabeto<br />

F, |F | = p, p primo.<br />

La costruzione che presentiamo è il caso p = 3. Sia F = {0, 1, 2}.<br />

Passo 1. Si scrivono le parole aventi le componenti tutte uguali fra loro:<br />

000, 111, 222<br />

Passo 2 . Pensando le tre parole precedenti scritte in colonna, si considera come<br />

quarta parola la <strong>di</strong>agonale 012 . Si costruiscono altre due parole sommando 1 ad<br />

ogni componente <strong>di</strong> essa (somma modulo 3) :<br />

012, 120, 201<br />

Passo 3 . Si ripete il passo 2. e si ottengono :<br />

021, 102, 210<br />

Quando sulla <strong>di</strong>agonale otteniamo una parola già presa in considerazione, (000),<br />

il processo termina e ciò accade al passo p, quando abbiamo ottenuto tutte le p 2<br />

parole del co<strong>di</strong>ce.<br />

Definizione 3.5.14. Due co<strong>di</strong>ci C1, C2 ⊆ A n q si <strong>di</strong>cono equivalenti se è possibile<br />

ottenere tutte le parole <strong>di</strong> C2 da quelle <strong>di</strong> C1 applicando un numero finito <strong>di</strong><br />

volte le seguenti operazioni:<br />

(1) permutazione delle n posizioni (1, 2, . . . , n) in tutte le parole <strong>di</strong> C1;<br />

(2) permutazione <strong>dei</strong> simboli dell’alfabeto applicata, in tutte le parole, alle<br />

componenti che occupano una posizione fissata.<br />

Se C ⊆ A n q , |C| = M, le parole <strong>di</strong> C possono essere scritte come righe <strong>di</strong> una<br />

tabella avente M righe ed n colonne. L’operazione 1) corrisponde ad una permutazione<br />

delle colonne della tabella, l’operazione 2) corrisponde ad una permutazione<br />

<strong>dei</strong> simboli dell’alfabeto Aq applicata ad una colonna della tabella.<br />

Esempio 3.5.15. Consideriamo i seguenti due co<strong>di</strong>ci binari:<br />

C1: 0 0 0 0 0 C2: 0 0 1 0 0<br />

0 1 1 0 1 0 0 0 1 1<br />

1 0 1 1 0 1 1 1 1 1<br />

1 1 0 1 1 1 1 0 0 0


5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 31<br />

Verifichiamo che C2 è equivalente a C1. Applicando ai simboli che compaiono nella<br />

terza posizione delle parole <strong>di</strong> C2 la permutazione 0 ↦→ 1, 1 ↦→ 0 , si ottiene il<br />

co<strong>di</strong>ce C3 :<br />

C3: 0 0 0 0 0<br />

0 0 1 1 1<br />

1 1 0 1 1<br />

1 1 1 0 0<br />

Applicando alle colonne <strong>di</strong> C3 la permutazione 1 ↦→ 1, 2 ↦→ 4, 3 ↦→ 3, 4 ↦→ 2, 5 ↦→ 5<br />

si ottengono le parole<br />

0 0 0 0 0<br />

0 1 1 0 1<br />

1 1 0 1 1<br />

1 0 1 1 0<br />

che sono le parole <strong>di</strong> C1.<br />

Esempio 3.5.16. Consideriamo il co<strong>di</strong>ce ternario<br />

C: 0 1 2<br />

1 2 0<br />

2 0 1<br />

proviamo che esso è equivalente ad un co<strong>di</strong>ce a ripetizione.<br />

Applichiamo ai simboli della prima posizione (colonna) la permutazione<br />

0 ↦→ 0, 1 ↦→ 2, 2 ↦→ 1 ;<br />

ai simboli della seconda posizione applichiamo la permutazione<br />

0 ↦→ 1, 1 ↦→ 0, 2 ↦→ 2 ;<br />

ai simboli della terza posizione applichiamo la permutazione<br />

0 ↦→ 2, 1 ↦→ 1, 2 ↦→ 0 .<br />

Si ottiene<br />

0 0 0<br />

2 2 2<br />

1 1 1<br />

che sono le parole del co<strong>di</strong>ce ternario a ripetizione <strong>di</strong> lunghezza 3.<br />

Il concetto <strong>di</strong> co<strong>di</strong>ci equivalenti è importante perchè due co<strong>di</strong>ci equivalenti<br />

correggono lo stesso numero <strong>di</strong> errori. Ciò segue dal fatto che le operazioni<br />

descritte per costruire co<strong>di</strong>ci equivalenti non variano la <strong>di</strong>stanza tra due qualsiasi<br />

parole e perciò neanche la <strong>di</strong>stanza minima. Due co<strong>di</strong>ci equivalenti hanno dunque<br />

le stesse proprietà metriche, così come hanno la stessa ridondanza e la stessa<br />

efficienza.


5. (N, K)-CODICI, CODICI MDS, CODICI EQUIVALENTI 32<br />

Teorema 3.5.17. Dato un co<strong>di</strong>ce C ⊆ A n q esiste sempre un co<strong>di</strong>ce C1 ⊆ A n q<br />

equivalente a C e contenente una qualsiasi fissata parola v ∈ A n q \ C.<br />

Dimostrazione. Sia p una qualunque parola <strong>di</strong> C. Applicando al più n<br />

permutazioni sui simboli, dalla parola p si ottiene la parola v. <br />

Esempio 3.5.18. Dato il co<strong>di</strong>ce binario<br />

C = {001, 101, 110, 011},<br />

costruire un co<strong>di</strong>ce C1 equivalente a C e tale che 000 ∈ C1.<br />

Soluzione - Basta applicare ai simboli che compaiono al terzo posto la permutazione<br />

0 ↦→ 1, 1 ↦→ 0 . Infatti si ottiene :<br />

000, 100, 111, 010<br />

che sono le parole <strong>di</strong> un co<strong>di</strong>ce equivalente a C.<br />

Da quanto esposto fino ad ora, appare evidente che nella teoria <strong>dei</strong> co<strong>di</strong>ci<br />

correttori è importante avere:<br />

(1) Co<strong>di</strong>ci capaci <strong>di</strong> correggere un prefissato numero <strong>di</strong> errori.<br />

(2) Co<strong>di</strong>ci <strong>di</strong> facile co<strong>di</strong>fica e <strong>di</strong> facile deco<strong>di</strong>fica.<br />

Per affrontare questi problemi occorre avere co<strong>di</strong>ci che abbiano una struttura<br />

algebrica ′′ ricca ′′ . Per rendersi conto <strong>di</strong> ciò, basta pensare ad un co<strong>di</strong>ce C costruito<br />

su un alfabeto <strong>di</strong> 10 simboli ed avente 100 posti <strong>di</strong> informazione. C contiene 10 100<br />

parole, la co<strong>di</strong>fica e la deco<strong>di</strong>fica sono teoricamente possibili, ma non praticamente<br />

per l’elevato numero <strong>di</strong> parole <strong>di</strong> C. Se poi si vuole determinare la <strong>di</strong>stanza minima<br />

si devono fare 10100 confronti !!!<br />

2<br />

Anche per superare questi problemi, sono stati introdotti i co<strong>di</strong>ci lineari che<br />

senza dubbio sono una delle più importanti famiglie <strong>di</strong> co<strong>di</strong>ci.


CAPITOLO 4<br />

Co<strong>di</strong>ci Lineari<br />

L’importanza <strong>dei</strong> co<strong>di</strong>ci lineari sta nel fatto che l’insieme delle parole ha una<br />

forte struttura algebrica e per questo sono facilitate molte operazioni quali:<br />

• calcolare i parametri del co<strong>di</strong>ce;<br />

• co<strong>di</strong>ficare e trasmettere i messaggi;<br />

• deco<strong>di</strong>ficare i messaggi;<br />

• scoprire e correggere errori;<br />

• calcolare la probabilità <strong>di</strong> una corretta deco<strong>di</strong>fica.<br />

1. Definizioni e prime proprietà<br />

Sia Fq = GF (q), q = p t , p primo, t ≥ 1, un campo <strong>di</strong> Galois. Nel seguito con<br />

Fq si intenderà sempre il campo GF (q) e sarà l’alfabeto su cui è definito il co<strong>di</strong>ce.<br />

Sotto questa ipotesi la struttura algebrica più naturale da usare su F n q è quella <strong>di</strong><br />

spazio vettoriale sul campo Fq; ricor<strong>di</strong>amo che in questo caso gli elementi <strong>di</strong> F n q si<br />

chiamano vettori <strong>di</strong> or<strong>di</strong>ne n sul campo Fq i cui elementi si <strong>di</strong>cono scalari.<br />

Definizione 4.1.1. Un co<strong>di</strong>ce C si <strong>di</strong>ce lineare se è un sottospazio vettoriale<br />

<strong>di</strong> F n q .<br />

Esempio 4.1.2. Costruiamo un co<strong>di</strong>ce lineare C su F2 <strong>di</strong> <strong>di</strong>mensione due e<br />

lunghezza 5. L’insieme <strong>di</strong> tutti i possibili messaggi è K = F 2 2 e perciò K =<br />

{(0 0), (1 0), (0 1), (1 1)}. Sia C il sottospazio vettoriale <strong>di</strong> F 5 2 avente per base<br />

B = {b1 = (1 0 1 1 1), b2 = (1 1 1 1 0)}<br />

Si ottiene in modo naturale la seguente applicazione <strong>di</strong> co<strong>di</strong>fica, K → C:<br />

(0 0) → 0 · b1 + 0 · b2 = (0 0 0 0 0)<br />

(1 0) → 1 · b1 + 0 · b2 = (1 0 1 1 1)<br />

(0 1) → 0 · b1 + 1 · b2 = (1 1 1 1 0)<br />

(1 1) → 1 · b1 + 1 · b2 = (0 1 0 0 1)<br />

33


1. DEFINIZIONI E PRIME PROPRIETÀ 34<br />

Quin<strong>di</strong> C = {(0 0 0 0 0), (1 0 1 1 1), (1 1 1 1 0), (0 1 0 0 1)}. Come si può<br />

verificare, la <strong>di</strong>stanza minima <strong>di</strong> C è d = 2.<br />

Si osservi che dalla definizione segue<br />

• C è un co<strong>di</strong>ce lineare se e solo se la somma <strong>di</strong> due parole e il prodotto <strong>di</strong><br />

una parola per uno scalare è ancora una parola del co<strong>di</strong>ce.<br />

• Se C è un co<strong>di</strong>ce lineare <strong>di</strong> <strong>di</strong>mensione k allora C è un (n, k)-co<strong>di</strong>ce (ve<strong>di</strong><br />

teorema 4.2.2) ed è isomorfo a F k q e pertanto |C| = q k . Inoltre se C ha<br />

<strong>di</strong>stanza minima d si ha k ≤ n − d + 1, d ≤ n − k + 1, |C| ≤ q n−d+1 .<br />

• Un co<strong>di</strong>ce lineare contiene sempre la parola (0, 0, . . . , 0) perchè ′′ contiene ′′<br />

sempre il vettore nullo.<br />

• Il numero <strong>dei</strong> sottospazi k <strong>di</strong>mensionali <strong>di</strong> V = F n q è<br />

sk = (qn − 1)(q n−1 − 1) · · · (q n−k+1 − 1)<br />

(q k − 1)(q k−1 − 1) · · · (q − 1)<br />

e pertanto vi sono esattamente sk possibili (n, k)-co<strong>di</strong>ci <strong>di</strong>fferenti.<br />

Nota 4.1.3. Come mostra il seguente esempio, spazi vettoriali isomorfi possono<br />

dare co<strong>di</strong>ci con <strong>di</strong>stanza minima <strong>di</strong>versa e perciò non equivalenti.<br />

Esempio 4.1.4. Sia F = GF (2). Sia C1 = {λ(1, 0, 0)+µ(0, 1, 0), ∀ λ, µ ∈ F }<br />

il sottospazio <strong>di</strong> F 3 <strong>di</strong> <strong>di</strong>mensione 2 generato da v1 = (1, 0, 0) e v2 = (0, 1, 0).<br />

Sia ora C2 = {λ(1, 1, 0) + µ(1, 0, 1), ∀ λ, µ ∈ F } il sottospazio <strong>di</strong> F 3 <strong>di</strong><br />

<strong>di</strong>mensione 2 generato da w1 = (1, 1, 0) e w2 = (1, 0, 1).<br />

C1 e C2 come spazi vettoriali sono isomorfi ma non lo sono come co<strong>di</strong>ci. Infatti<br />

risulta d(C1) = 1 mentre d(C2) = 2 come si verifica facilmente esplicitando le parole<br />

<strong>dei</strong> due co<strong>di</strong>ci. C1 e C2 sono <strong>dei</strong> (3, 2)-co<strong>di</strong>ci lineari binari e quin<strong>di</strong> contengono<br />

2 2 = 4 parole .<br />

C1 = {(0, 0, 0), (1, 0, 0), (0, 1, 0), (1, 1, 0)}, C2 = {(0, 0, 0), (1, 0, 1), (1, 1, 0), (0, 1, 1)}.<br />

Definizione 4.1.5. Si definisce peso <strong>di</strong> Hamming w(x) <strong>di</strong> un vettore x ∈ F n q<br />

il numero delle componenti non nulle <strong>di</strong> x.<br />

Teorema 4.1.6. Sia C un co<strong>di</strong>ce lineare con <strong>di</strong>stanza minima d. Si ha<br />

• d(x, y) = w(x − y), ∀ x, y ∈ C<br />

• d è uguale al minimo peso delle sue parole non nulle.


2. MATRICI GENERATRICI 35<br />

Dimostrazione. Siano x, y ∈ C, poichè d(x, y) è il numero <strong>di</strong> posti in cui le<br />

componenti <strong>di</strong> x e y sono <strong>di</strong>verse, si ha che d(x, y) è il numero delle componenti<br />

non nulle della parola x − y ∈ C ossia d(x, y) = w(x − y).<br />

Sia ora d la <strong>di</strong>stanza minima <strong>di</strong> C, allora esistono due parole x, y ∈ C tali<br />

che d(x, y) = d cioè w(x − y) = d(x, y), quin<strong>di</strong> il peso minimo è d oppure<br />

un intero minore <strong>di</strong> d. Se esistesse una parola y ∈ C con w(y) < d, seguirebbe<br />

d(y, 0) = w(y) < d, e perciò d non sarebbe la <strong>di</strong>stanza minima. <br />

Il teorema ora <strong>di</strong>mostrato mette in evidenza l’importanza della nozione <strong>di</strong> peso<br />

<strong>di</strong> Hamming. Per un co<strong>di</strong>ce qualunque trovare la minima <strong>di</strong>stanza significa<br />

calcolare la <strong>di</strong>stanza <strong>di</strong> ogni coppia <strong>di</strong> parole del co<strong>di</strong>ce ossia occorre calcolare<br />

e confrontare |C|<br />

<strong>di</strong>stanze, mentre per i co<strong>di</strong>ci lineari il problema si risolve con<br />

2<br />

il calcolo del peso delle singole parole del co<strong>di</strong>ce ossia è sufficiente calcolare e<br />

confrontare i |C| − 1 pesi <strong>di</strong> Hamming delle parole non nulle <strong>di</strong> C.<br />

Abbiamo <strong>di</strong>mostrato che un co<strong>di</strong>ce con <strong>di</strong>stanza minima d pari, oltre a correggere<br />

d<br />

d<br />

− 1 errori, rivela errori (ve<strong>di</strong> teorema 3.2.11). E’ dunque utile il seguente<br />

2 2<br />

risultato.<br />

Teorema 4.1.7. Un co<strong>di</strong>ce lineare binario C ⊆ F n 2 con <strong>di</strong>stanza minima d<br />

<strong>di</strong>spari esiste se e solo se esiste un co<strong>di</strong>ce binario C1 ⊆ F n+1<br />

2 avente <strong>di</strong>stanza<br />

minima d + 1 e con |C| = |C1|. Inoltre C1 è lineare.<br />

Dimostrazione. Si rinvia a [1] pag. 126. <br />

2. Matrici generatrici<br />

L’operazione <strong>di</strong> co<strong>di</strong>fica <strong>di</strong> un messaggio me<strong>di</strong>ante un co<strong>di</strong>ce lineare è una<br />

trasformazione lineare e pertanto un vantaggio nel considerare co<strong>di</strong>ci lineari è<br />

quello <strong>di</strong> avere la possibilità <strong>di</strong> una rapida descrizione del co<strong>di</strong>ce e della facile<br />

deco<strong>di</strong>fica delle parole. Uno <strong>dei</strong> meto<strong>di</strong> con cui ciò si realizza è la ′′ costruzione ′′ <strong>di</strong><br />

una matrice che lo rappresenta.<br />

Ad esempio<br />

Nello spazio vettoriale V = F 5 2 i vettori v1 = (1 0 0 0 1), v2 = (1 1 0 1 0), v3 =<br />

(1 1 1 0 1) formano una base per un (5, 3)-co<strong>di</strong>ce binario C (associato al sottospazio<br />

F 3 2 ). Sia<br />

G =<br />

⎛<br />

⎝ v1<br />

v2<br />

v3<br />

⎞<br />

⎛<br />

⎠ = ⎝<br />

1 0 0 0 1<br />

1 1 0 1 0<br />

1 1 1 0 1<br />

⎞<br />

⎠ .


2. MATRICI GENERATRICI 36<br />

Comunque preso un vettore m = (m1m2m3) <strong>di</strong> F 3 2 rappresentante il messaggio da<br />

trasmettere, possiamo calcolare la parola p <strong>di</strong> C che gli corrisponde ossia il vettore<br />

<strong>di</strong> F 5 2 che sarà trasmesso:<br />

p = m1v1 + m2v2 + m3v3 = mG.<br />

Se ad esempio m = (1 0 1) , verrà trasmesso<br />

⎛<br />

⎞<br />

1 0 0 0 1<br />

mG = (1 0 1) ⎝ 1 1 0 1 0 ⎠ = (0 1 1 0 0).<br />

1 1 1 0 1<br />

Generalizziamo<br />

Sia C ⊆ F n q un co<strong>di</strong>ce lineare <strong>di</strong> <strong>di</strong>mensione k ≤ n, sia {e1, e2, . . . , ek} una base<br />

<strong>di</strong> C e sia {b1, b2, . . . , bn} una base <strong>di</strong> F n q . Ogni vettore ei può essere scritto in modo<br />

unico come combinazione lineare <strong>dei</strong> vettori bi :<br />

⎧<br />

⎪⎨<br />

⎪⎩<br />

Pertanto è unica la matrice<br />

G =<br />

e1 = e11b1 + e12b2 + · · · + e1nbn<br />

e2 = e21b1 + e22b2 + · · · + e2nbn<br />

ek = ek1b1 + ek2b2 + · · · + eknbn<br />

⎛<br />

⎜<br />

⎝<br />

e11 · · · e1k · · · e1n<br />

e21 · · · e2k · · · e2n<br />

.<br />

ek1 · · · ekk · · · ekn<br />

G è <strong>di</strong> tipo k × n, ha rango k essendo {ei} una base <strong>di</strong> C.<br />

Definizione 4.2.1. Sia C ⊆ F n q un co<strong>di</strong>ce lineare <strong>di</strong> <strong>di</strong>mensione k. Si definisce<br />

matrice generatrice <strong>di</strong> C una matrice <strong>di</strong> tipo k×n le cui righe sono le componenti<br />

<strong>dei</strong> vettori <strong>di</strong> una base <strong>di</strong> C rispetto una base <strong>di</strong> F n q .<br />

Osserviamo che, se invece <strong>di</strong> prendere una base del co<strong>di</strong>ce prendessimo un sistema<br />

<strong>di</strong> generatori x1, . . . , xh, h ≥ k, perverremmo con lo stesso proce<strong>di</strong>mento<br />

sopra descritto , ad una matrice <strong>di</strong> tipo h × n <strong>di</strong> rango k, che può ancora considerarsi<br />

una matrice generatrice. La restrizione sulla in<strong>di</strong>pendenza delle righe della<br />

matrice generatrice non è strettamente necessaria, è utile per minimizzare l’ingombro<br />

algoritmico e <strong>di</strong> registrazione <strong>dei</strong> dati. Per questo quando si parla <strong>di</strong> matrice<br />

generatrice si intende quella costruita a partire da una base del co<strong>di</strong>ce.<br />

Di norma come base <strong>di</strong> V = F n q si considera la base canonica.<br />

.<br />

⎞<br />

⎟<br />


2. MATRICI GENERATRICI 37<br />

Un vantaggio che si ha considerando co<strong>di</strong>ci lineari è che la loro descrizione è<br />

molto più semplice attraverso la matrice G che non con l’elenco delle parole del<br />

co<strong>di</strong>ce. Se ad esempio C è un (50, 40)-co<strong>di</strong>ce lineare binario allora<br />

|C| = 2 40 = (2 4 ) 10 > 10 10<br />

mentre G, avendo 40 righe e 50 colonne, ha 2000 elementi.<br />

Teorema 4.2.2. Un co<strong>di</strong>ce lineare C ⊆ F n q <strong>di</strong> <strong>di</strong>mensione k è un (n, k)-co<strong>di</strong>ce.<br />

Dimostrazione. Siano {ei}, i = 1, · · · , k e {bj}, j = 1, · · · , n, basi rispettiva-<br />

mente <strong>di</strong> C e <strong>di</strong> F n q e sia<br />

G =<br />

⎛<br />

⎜<br />

⎝<br />

e11 · · · e1k · · · e1n<br />

e21 · · · e2k · · · e2n<br />

.<br />

ek1 · · · ekk · · · ekn<br />

la matrice generatrice <strong>di</strong> C rispetto alle basi fissate. Poichè G ha rango k, in essa<br />

esiste almeno un minore <strong>di</strong> or<strong>di</strong>ne k non nullo. Sia ad esempio<br />

<br />

<br />

e11 · · · e1k <br />

<br />

<br />

e21 · · · e2k <br />

<br />

<br />

<br />

.<br />

<br />

<br />

<br />

ek1 · · ·<br />

<br />

ekk<br />

Proviamo che i primi k posti sono <strong>di</strong> informazione.<br />

Si deve provare che assegnata una qualsiasi k-upla (a1, · · · , ak) c’è una ed una<br />

sola parola x = (x1x2 · · · xk)G = x1e1 + · · · + xkek (x è una n-upla) che ha a1<br />

come prima componente, a2 come seconda componente, . . . , ak come k-esima<br />

componente. Ciò equivale a provare che il sistema<br />

⎧<br />

x1e11 + x2e21 + · · · + xkek1 = a1<br />

⎪⎨ x1e12 + x2e22 + · · · + xkek2 = a2<br />

(x1x2 · · · xk)G =<br />

⎪⎩<br />

.<br />

x1e1k + x2e2k + · · · + xkekk = ak<br />

ha una ed una sola soluzione e questo segue dal fatto che esso è un sistema lineare<br />

<strong>di</strong> k equazioni in k incognite con determinante della matrice <strong>dei</strong> coefficienti non<br />

nullo per ipotesi. Inoltre le rimanenti (n−k) componenti ak+1, . . . , an <strong>di</strong> tale parola<br />

sono combinazioni lineari <strong>di</strong> x1, . . . , xk tramite i coefficienti eij, e pertanto sono<br />

univocamente determinate. <br />

Corollario 4.2.3. Un co<strong>di</strong>ce lineare k-<strong>di</strong>mensionale è MDS se e solo se ogni<br />

minore <strong>di</strong> or<strong>di</strong>ne k <strong>di</strong> una sua matrice generatrice è non nullo.<br />

⎞<br />

⎟<br />


2. MATRICI GENERATRICI 38<br />

Dimostrazione. Segue dal teorema precedente poichè un (n, k)-co<strong>di</strong>ce è MDS<br />

se k posti qualsiasi sono <strong>di</strong> informazione. <br />

Osserviamo che due qualunque (n, k)-co<strong>di</strong>ci lineari sono sempre isomorfi come<br />

spazi vettoriali ma un isomorfismo fra spazi vettoriali non assicura che venga conservata<br />

la struttura metrica e pertanto non è detto che due qualunque (n, k)-co<strong>di</strong>ci<br />

lineari siano equivalenti perchè possono avere <strong>di</strong>stanza minima <strong>di</strong>versa. La definizione<br />

<strong>di</strong> equivalenza tra co<strong>di</strong>ci data in 3.5.14 per due co<strong>di</strong>ci a blocchi qualsiasi<br />

vale, ovviamente, anche per i co<strong>di</strong>ci lineari ma in generale con questa definizione<br />

non è detto venga conservata la proprietà <strong>di</strong> linearità ossia un co<strong>di</strong>ce lineare può<br />

risultare equivalente a un co<strong>di</strong>ce non lineare. Ad esempio :<br />

Sia C = {(0, 1), (0, 0)}, esso è un (2, 1)-co<strong>di</strong>ce binario lineare. Come co<strong>di</strong>ce, per<br />

la definizione 3.5.14 esso è equivalente al (2, 1)-co<strong>di</strong>ce C1 = {(1, 1), (1, 0)}, ma C1<br />

non è lineare non essendo sottospazio vettoriale.<br />

Quanto osservato motiva il fatto che la 3.5.14 si mo<strong>di</strong>fichi per i co<strong>di</strong>ci lineari<br />

nel senso seguente.<br />

Definizione 4.2.4. Due co<strong>di</strong>ci lineari C1, C2 ⊆ F n q si <strong>di</strong>cono equivalenti se è<br />

possibile ottenere tutte le parole <strong>di</strong> uno <strong>di</strong> essi da quelle dell’altro applicando un<br />

numero finito <strong>di</strong> volte le seguenti operazioni:<br />

(1) permutazione delle n posizioni (1, 2, . . . , n);<br />

(2) moltiplicazione <strong>dei</strong> simboli che compaiono in una data posizione per uno<br />

scalare non nullo.<br />

La proprietà (2) è mo<strong>di</strong>ficata rispetto alla 3.5.14 perchè è importante passare<br />

da un co<strong>di</strong>ce lineare ad un co<strong>di</strong>ce equivalente che sia lineare (oltre ad avere la stessa<br />

<strong>di</strong>stanza minima). Non solo, ricordando che un co<strong>di</strong>ce lineare si può ′′ identificare ′′<br />

con una sua matrice generatrice, se sui simboli che compaiono in una colonna<br />

della matrice generatrice <strong>di</strong> un co<strong>di</strong>ce lineare C si applicasse una permutazione<br />

qualsiasi, si ottiene un co<strong>di</strong>ce che se anche fosse ancora lineare, potrebbe avere<br />

<strong>di</strong>stanza minima <strong>di</strong>versa. Ve<strong>di</strong>amo un esempio.<br />

Esempio 4.2.5. Sia C ⊆ F 3 3 un co<strong>di</strong>ce <strong>di</strong> <strong>di</strong>mensione 2 dato con la matrice<br />

<br />

1 1 0<br />

G =<br />

0 1 2<br />

Si ha C = {λ(1, 1, 0) + µ(0, 1, 2)} = {(λ, λ + µ, 2µ), λ, µ ∈ GF (3)}. Per (λ, µ) =<br />

(0, 0) ogni parola <strong>di</strong> C ha almeno due componenti non nulle e quin<strong>di</strong> d(C) = 2.<br />

Operando sui simboli del secondo posto (seconda colonna) tramite la permutazione<br />

0 ↦→ 1, 1 ↦→ 0, 2 ↦→ 2 la matrice G viene trasformata in<br />

<br />

1 0 0<br />

G1 =<br />

0 0 2


2. MATRICI GENERATRICI 39<br />

che è matrice generatrice <strong>di</strong> un co<strong>di</strong>ce C1 ⊆ F 3 3 con d(C1) = 1. I co<strong>di</strong>ci C e C1 sono<br />

isomorfi come spazi vettoriali ma non come co<strong>di</strong>ci perchè hanno <strong>di</strong>stanza minima<br />

<strong>di</strong>versa.<br />

E’ possibile operare su una matrice generatrice <strong>di</strong> un co<strong>di</strong>ce lineare in modo da<br />

avere una matrice generatrice dello stesso co<strong>di</strong>ce o <strong>di</strong> un co<strong>di</strong>ce lineare equivalente.<br />

Teorema 4.2.6. Due matrici G e G1 ad elementi in GF (q) e <strong>di</strong> tipo k ×<br />

n generano (n, k)-co<strong>di</strong>ci lineari equivalenti se una delle due matrici può essere<br />

ottenuta dall’altra tramite una sequenza finita <strong>di</strong> trasformazioni <strong>dei</strong> seguenti tipi:<br />

(1) scambiare due righe;<br />

(2) moltiplicare gli elementi <strong>di</strong> una riga per un elemento non nullo <strong>di</strong> GF (q);<br />

(3) sommare ad una riga un’altra riga moltiplicata per un elemento non nullo<br />

<strong>di</strong> GF (q);<br />

(4) permutare due colonne;<br />

(5) moltiplicare gli elementi <strong>di</strong> una colonna per un elemento non nullo <strong>di</strong><br />

GF (q).<br />

Dimostrazione. Le operazioni (1), (2), (3) danno un cambiamento <strong>di</strong> base<br />

dello spazio vettoriale, dunque si ha lo stesso spazio vettoriale, cioè lo stesso co<strong>di</strong>ce<br />

rappresentato dalla matrice <strong>di</strong> partenza.<br />

L’operazione (4) equivale ad una permutazione delle posizioni (1, 2, . . . , n).<br />

L’operazione (5) equivale a moltiplicare le componenti <strong>di</strong> tutte le parole che<br />

occupano una posizione fissata per un elemento non nullo <strong>di</strong> GF (q). <br />

Nota 4.2.7. Si osservi che sommare ad una colonna un’altra colonna moltiplicata<br />

per un elemento non nullo <strong>di</strong> GF (q), non preserva l’equivalenza <strong>di</strong> co<strong>di</strong>ci.<br />

Dunque in una matrice generatrice il ruolo ricoperto dalle righe e dalle colonne<br />

non è simmetrico.<br />

La matrice generatrice <strong>di</strong> un co<strong>di</strong>ce lineare non è unica perchè <strong>di</strong>pende dalle basi<br />

fissate. E’ quin<strong>di</strong> importante scegliere matrici generatrici il più semplice possibile<br />

ma equivalenti ossia che generino co<strong>di</strong>ci equivalenti. Per un co<strong>di</strong>ce lineare C ⊆ F n q<br />

<strong>di</strong> <strong>di</strong>mensione k si può scegliere la seguente matrice detta forma standard o<br />

forma ridotta normale.<br />

S =<br />

⎛<br />

⎜<br />

⎝<br />

1 0 . . . 0 x1,k+1 . . . x1,n<br />

0 1 . . . 0 x2,k+1 . . . x2,n<br />

.<br />

0 0 . . . 1 xk,k+1 . . . xk,n<br />

⎞<br />

⎟<br />


2. MATRICI GENERATRICI 40<br />

In forma più compatta questa matrice si può scrivere nel seguente modo<br />

S = (Ik|A)<br />

dove Ik è la matrice unitaria <strong>di</strong> or<strong>di</strong>ne k ed è data dalle prime k colonne <strong>di</strong> S,<br />

mentre A è la matrice rimanente. La convenienza <strong>di</strong> una matrice in questa forma<br />

è che, una volta co<strong>di</strong>ficato il vettore a = (a1, . . . , ak) si ottiene un vettore che<br />

nelle prime k componenti coincide con a. Dunque è evidente che la ridondanza del<br />

co<strong>di</strong>ce è concentrata esattamente nelle rimanenti (n − k) componenti.<br />

Si osservi che la forma standard <strong>di</strong> una matrice generatrice non è unica. Per<br />

esempio una permutazione qualsiasi delle colonne della matrice A porta alla costruzione<br />

<strong>di</strong> un’altra matrice T , generatrice <strong>di</strong> un co<strong>di</strong>ce equivalente a C perchè T<br />

è sempre in forma standard ( [3], pag. 64).<br />

Corollario 4.2.8. Per ogni (n, k)-co<strong>di</strong>ce (o co<strong>di</strong>ce sistematico) sopra un campo<br />

Fq esiste una matrice standard<br />

G = (Ik|A)<br />

le cui righe generano C oppure generano un (n, k)-co<strong>di</strong>ce C1 equivalente a C. Viceversa<br />

se C ammette una matrice standard allora è un co<strong>di</strong>ce sistematico.<br />

Esempio 4.2.9. Sia C un co<strong>di</strong>ce lineare su GF (2) avente matrice generatrice<br />

⎛<br />

G = ⎝<br />

1 0 1 1 1<br />

0 1 1 0 1<br />

1 1 0 0 0<br />

(1) Trasformare G in forma normale.<br />

(2) Determinare quante parole contiene C.<br />

(3) Trovare la <strong>di</strong>stanza minima d.<br />

Soluzione -<br />

(1) Poichè il minore costituito dalle prime tre colonne è nullo, non è possibile<br />

trasformare G in forma standard usando solo trasformazioni elementari<br />

sulle righe. Per avere le prime tre colonne linearmente in<strong>di</strong>pendenti,<br />

applichiamo alle posizioni (ossia alle colonne <strong>di</strong> G) la permutazione<br />

otteniamo la matrice<br />

⎞<br />

⎠<br />

1 ↦→ 4, 2 ↦→ 2, 3 ↦→ 3, 4 ↦→ 1, 5 ↦→ 5,<br />

⎛<br />

¯G = ⎝<br />

1 0 1 1 1<br />

0 1 1 0 1<br />

0 1 0 1 0<br />

⎞<br />


3. CODIFICA NEI CODICI LINEARI 41<br />

che ha le prime tre colonne linearmente in<strong>di</strong>pendenti e perciò si può operare<br />

sulle righe. Sostituendo la terza riga con la somma della seconda e<br />

terza riga, si ottiene<br />

⎛<br />

⎝<br />

1 0 1 1 1<br />

0 1 1 0 1<br />

0 0 1 1 1<br />

Sostituendo alla prima riga la somma della prima con la terza riga e<br />

sostituendo alla seconda riga la somma della seconda e terza riga, si ottiene<br />

⎛<br />

⎝<br />

1 0 0 0 0<br />

0 1 0 1 0<br />

0 0 1 1 1<br />

che è una matrice in forma standard e genera un co<strong>di</strong>ce equivalente a<br />

quello dato.<br />

(2) C ha lunghezza 5 e dalla G si deduce che k = 3, pertanto C è un (5, 3)co<strong>di</strong>ce<br />

binario e dunque |C| = 2 3 = 8.<br />

(3) La parola (10000) appartiene a C ed ha peso 1 e perciò d = 1.<br />

⎞<br />

⎠<br />

⎞<br />

⎠<br />

3. Co<strong>di</strong>fica nei co<strong>di</strong>ci lineari<br />

Co<strong>di</strong>ficare un messaggio in un (n, k)-co<strong>di</strong>ce significa, utilizzando un algoritmo<br />

matematico, associare ad un messaggio costituito da k simboli una parola data da<br />

una n-upla in modo che ad ogni k-upla corrisponda una ed una sola parola.<br />

Per i co<strong>di</strong>ci lineari l’algoritmo <strong>di</strong> co<strong>di</strong>fica è quello <strong>di</strong> seguito illustrato.<br />

Sia C ⊆ F n q , Fq = GF (q), un (n, k)-co<strong>di</strong>ce lineare avente matrice generatrice<br />

G =<br />

⎛<br />

⎜<br />

⎝<br />

e11 · · · e1k · · · e1n<br />

e21 · · · e2k · · · e2n<br />

.<br />

ek1 · · · ekk · · · ekn<br />

Supponiamo che i primi k posti siano <strong>di</strong> informazione. Le parole del co<strong>di</strong>ce C<br />

sono le n-uple che si ottengono combinando linearmente le righe <strong>di</strong> G tramite le<br />

k-uple <strong>di</strong> elementi <strong>di</strong> Fq. Co<strong>di</strong>fichiamo ogni messaggio m = (m1, m2, . . . , mk) nella<br />

parola <strong>di</strong> C che si ottiene moltiplicando m per G, dunque m viene co<strong>di</strong>ficata in<br />

⎞<br />

⎟<br />


3. CODIFICA NEI CODICI LINEARI 42<br />

⎛<br />

⎞<br />

e11 · · · e1k · · · e1n<br />

⎜ e21 · · · e2k · · · e2n ⎟<br />

c = (m1, m2, · · · , mk) ⎜<br />

⎟<br />

⎝<br />

.<br />

⎠ = (c1, c2, · · · , cn)<br />

ek1 · · · ekk · · · ekn<br />

ossia<br />

c = m · G<br />

dove il prodotto è, come <strong>di</strong> consueto, righe per colonne, cioè l’i-esima coor<strong>di</strong>nata<br />

del prodotto m · G è il prodotto scalare ci = m1e1,i + m2e2,i + · · · + mkek,i. In definitiva<br />

l’operazione <strong>di</strong> co<strong>di</strong>fica procede per semplici operazioni algebriche <strong>di</strong> somma<br />

e prodotto.<br />

L’algoritmo descritto associa ad ogni messaggio una ed una sola parola del<br />

co<strong>di</strong>ce e pertanto costituisce uno schema <strong>di</strong> co<strong>di</strong>fica per un (n, k)-co<strong>di</strong>ce lineare.<br />

La co<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce lineare è ancora più semplice se la matrice generatrice<br />

è in forma standard. Sia G = (Ik|A). Si ha<br />

(m1, . . . , mk)(Ik|A) = (m1, m2, . . . , mk, m1e1,k+1+. . .+mkek,k+1, . . . m1e1n+. . .+mkekn)<br />

Il messaggio m = (m1, . . . , mk) viene co<strong>di</strong>ficato nella parola c = (c1, . . . , cn), con<br />

ci = mi, 1 ≤ i ≤ k, e (ck+1, . . . , cn) = (m1, . . . , mk)A.<br />

I simboli ck+1, . . . , cn sono <strong>di</strong> controllo.<br />

Esempio 4.3.1. Sia C il co<strong>di</strong>ce lineare ternario con matrice generatrice G scritta<br />

in forma standard :<br />

⎛<br />

1<br />

G = ⎝ 0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

2<br />

1<br />

⎞<br />

0<br />

1 ⎠ .<br />

0 0 1 2 0 1<br />

Co<strong>di</strong>ficare la sequenza 102101210122 emessa dalla sorgente.<br />

Soluzione - Da G si deduce che C ha lunghezza 6 ed ha tre simboli <strong>di</strong> informazione<br />

e pertanto C è un (6, 3)-co<strong>di</strong>ce ternario. Ogni tre simboli della sequenza data<br />

rappresentano un messaggio e perciò nella co<strong>di</strong>fica ad ogni blocco <strong>di</strong> tre simboli<br />

vengono aggiunti tre simboli <strong>di</strong> controllo. Divi<strong>di</strong>amo la sequenza emessa dalla<br />

sorgente in blocchi <strong>di</strong> lunghezza 3:<br />

e co<strong>di</strong>fichiamo ogni blocco. Si ha:<br />

102, 101, 210, 122<br />

(102) · G = (102222)<br />

(101) · G = (101021)<br />

(210) · G = (210221)


4. TABELLA STANDARD E DECODIFICA DEI CODICI LINEARI 43<br />

(122) · G = (122211)<br />

4. Tabella standard e Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari<br />

Sia C ⊆ F n q un (n, k)-co<strong>di</strong>ce lineare costruito su Fq = GF (q). Il gruppo (C, +)<br />

è un sottogruppo <strong>di</strong> (F n q , +) e |C| = q k e pertanto (C, +) in (F n q , +) ha m = q n−k<br />

laterali C0 = C, C1, . . . , Cm−1. Si ha :<br />

• Ogni elemento <strong>di</strong> F n q appartiene ad uno ed un solo laterale Ci, i =<br />

0, . . . , m − 1 e perciò un qualsiasi vettore y ricevuto appartiene ad un<br />

solo Ci, ossia y = ai + c, essendo c una parola del co<strong>di</strong>ce C ed ai un<br />

elemento <strong>di</strong> F n q .<br />

• Se è stata trasmessa la parola x e si riceve y, si ha e = y −x = ai +c−x =<br />

ai + ¯c, che è un elemento <strong>di</strong> Ci quin<strong>di</strong> l’errore è un elemento dello stesso<br />

laterale a cui appartiene l’elemento ricevuto.<br />

• Poichè l’errore più probabile è quello <strong>di</strong> peso minimo, il deco<strong>di</strong>ficatore<br />

sceglie come vettore errore il vettore e ∗ <strong>di</strong> peso minimo fra i vettori<br />

appartenenti a Ci e deco<strong>di</strong>fica la n-upla ricevuta come y − e ∗ .<br />

Per ogni laterale Ci, i = 0, . . . , m − 1, occorre fissare una parola ai ∈ C quale<br />

leader (o <strong>di</strong>rettrice) del laterale. Il leader deve essere scelto fra i vettori <strong>di</strong> peso<br />

minimo appartenenti a quel laterale.<br />

Teorema 4.4.1. Sia C ⊆ F n q . Se y ∈ F n q appartiene al laterale Ci, ossia<br />

se y = ai + cj, essendo ai il leader del laterale Ci e cj una parola <strong>di</strong> C, allora<br />

d(y, cj) ≤ d(y, c) per ogni c ∈ C.<br />

Dimostrazione. Da y = ai+cj si ha d(y, cj) = d(ai+cj, cj) = w(ai+cj−cj) =<br />

w(ai), inoltre d(y, c) = d(ai + cj, c) = w(ai + cj − c). Poichè ai + cj − c ∈ Ci ed ai<br />

è il leader <strong>di</strong> Ci, segue che w(ai) ≤ w(ai + cj − c), quin<strong>di</strong> d(y, cj) ≤ d(y, c) ossia cj<br />

è la parola <strong>di</strong> C più vicina al vettore ricevuto y. <br />

I laterali del gruppo (C, +) permettono <strong>di</strong> deco<strong>di</strong>ficare i co<strong>di</strong>ci lineari tramite<br />

una tabella , detta tabella standard, costruita nel seguente modo.<br />

Tutti gli elementi <strong>di</strong> F n q si <strong>di</strong>stribuiscono in una matrice-tabella Σ = (σij) con<br />

q n−k righe e q k colonne. Ogni riga contiene gli elementi <strong>di</strong> un laterale e sono<br />

sod<strong>di</strong>sfatte le seguenti proprietà.<br />

(1) La prima riga contiene tutti gli elementi del co<strong>di</strong>ce C, iniziando dal vettore<br />

nullo ossia σ11 = (00 · · · 0).


4. TABELLA STANDARD E DECODIFICA DEI CODICI LINEARI 44<br />

(2) Per ogni in<strong>di</strong>ce <strong>di</strong> riga i, nella prima colonna (ossia come elemento σi1) si<br />

scrive la parola ai scelta come il leader del laterale; ai deve essere scelto<br />

fra i vettori <strong>di</strong> peso minimo appartenenti a quel laterale.<br />

(3) Per ogni coppia <strong>di</strong> in<strong>di</strong>ci (i, j) è σij = ai + σ1j, pertanto la riga i-esima<br />

contiene tutti gli elementi del laterale ai + C.<br />

Un semplice algoritmo per costruire una tabella standard Σ <strong>di</strong> C è il seguente:<br />

• primo passo: <strong>di</strong>stribuire le parole <strong>di</strong> C sulla prima riga <strong>di</strong> Σ con l’unica<br />

con<strong>di</strong>zione σ11 = 0;<br />

• secondo passo: scegliere una parola a2 <strong>di</strong> peso minimo in F n q \C e porre<br />

σ21 = a2;<br />

• terzo passo: <strong>di</strong>stribuire sulla seconda riga <strong>di</strong> Σ le parole <strong>di</strong> a2 + C in<br />

modo che sia σ2j = a2 + σ1j;<br />

• quarto passo: scegliere una parola a3 <strong>di</strong> peso minimo in F n q \{C∪(a2+C)}<br />

e porre σ31 = a3;<br />

• quinto passo: <strong>di</strong>stribuire sulla terza riga <strong>di</strong> Σ le parole <strong>di</strong> a3 +C in modo<br />

che sia σ3j = a3 + σ1j;<br />

. . . continuare in questo modo fino all’esaurimento delle parole <strong>di</strong> F n q .<br />

La tabella così costruita contiene ogni elemento <strong>di</strong> F n q una ed una sola volta.<br />

Se il deco<strong>di</strong>ficatore riceve un elemento y ∈ Ci, trova y nella tabella e deco<strong>di</strong>fica y<br />

come la parola del co<strong>di</strong>ce che si trova nella stessa colonna, cioè come y − ai che è<br />

la parola del co<strong>di</strong>ce più vicina ad y.<br />

Esempio 4.4.2. Sia C = {0000, 1011, 0101, 1110} un (4, 2)-co<strong>di</strong>ce binario<br />

lineare. La tabella standard è:<br />

C0 = C (0 0 0 0) (1 0 1 1) (0 1 0 1) (1 1 1 0)<br />

C1 (1 0 0 0) (0 0 1 1) (1 1 0 1) (0 1 1 0)<br />

C2 (0 1 0 0) (1 1 1 1) (0 0 0 1) (1 0 1 0)<br />

C3 (0 0 1 0) (1 0 0 1) (0 1 1 1) (1 1 0 0)<br />

Se ad esempio viene ricevuto y = (1111), allora la parola trasmessa è c =<br />

y − (0100) = (1111) − (0100) = 1011 che è proprio la parola <strong>di</strong> C che si trova nella<br />

stessa colonna <strong>di</strong> y.<br />

Nel paragrafo 6 <strong>di</strong> questo capitolo, si vedrà che questo schema <strong>di</strong> deco<strong>di</strong>fica può<br />

essere semplificato usando il concetto <strong>di</strong> co<strong>di</strong>ce duale e <strong>di</strong> sindrome <strong>di</strong> un vettore.


5. CODICE DUALE 45<br />

5. Co<strong>di</strong>ce duale<br />

Per trovare meto<strong>di</strong> che semplifichino la deco<strong>di</strong>fica del co<strong>di</strong>ce, occorre introdurre<br />

alcune nozioni.<br />

Poichè l’insieme delle parole <strong>di</strong> un co<strong>di</strong>ce lineare costituisce un sottospazio<br />

<strong>di</strong> uno spazio vettoriale finito, in questi spazi vettoriali non si può introdurre la<br />

nozione <strong>di</strong> prodotto scalare in senso euclideo; è però ugualmente possibile definire<br />

la nozione <strong>di</strong> prodotto scalare e il concetto <strong>di</strong> ortogonalità fra vettori.<br />

Definizione 4.5.1. Comunque presi x, y ∈ F n q<br />

x • y = (x1, x2, . . . , xn) • (y1, y2, . . . , yn) =<br />

n<br />

i=1<br />

xiyi<br />

è detto prodotto scalare <strong>di</strong> x e y.<br />

Due vettori si <strong>di</strong>cono ortogonali se il loro prodotto scalare è nullo.<br />

Un vettore si <strong>di</strong>ce isotropo se è ortogonale a se stesso.<br />

Si ricor<strong>di</strong> che la somma della definizione precedente è calcolata in GF (q).<br />

Inoltre è facile verificare che, comunque presi x, y, z ∈ F n q , λ ∈ Fq, si ha<br />

(1) x • y = y • x<br />

(2) x • (y + z) = x • y + x • z<br />

(3) (λx) • y = λ(x • y) .<br />

Si noti che a <strong>di</strong>fferenza <strong>di</strong> quanto accade nella geometria euclidea, quando si<br />

′′ opera ′′ in un campo finito il prodotto scalare <strong>di</strong> un vettore non nullo per se stesso<br />

può essere zero. Per esempio, in GF (2) risulta (1, 1, 0, 0) • (1, 1, 0, 0) = 1 + 1 = 0.<br />

Definizione 4.5.2. Sia C ⊆ F n q un sottospazio <strong>di</strong> <strong>di</strong>mensione k. Si definisce<br />

spazio ortogonale a C e si denota con C ⊥ l’insieme<br />

C ⊥ = {x ∈ F n q | x • c = 0 ∀ c ∈ C}.<br />

C ⊥ prende il nome <strong>di</strong> co<strong>di</strong>ce duale o ortogonale a C. Se C = C ⊥ , il co<strong>di</strong>ce C si<br />

<strong>di</strong>ce autoduale .<br />

Nota 4.5.3.<br />

(1) C ⊥ è un sottospazio vettoriale <strong>di</strong> F n q perchè è chiuso rispetto alle operazioni<br />

<strong>di</strong> ad<strong>di</strong>zione <strong>di</strong> vettori e <strong>di</strong> moltiplicazione <strong>di</strong> un vettore per uno scalare.<br />

(2) A <strong>di</strong>fferenza degli spazi vettoriali definiti su R, i sottospazi C e C ⊥ <strong>di</strong> F n q<br />

possono avere in comune vettori <strong>di</strong>versi dal vettore nullo, tali vettori sono<br />

i vettori isotropi.<br />

(3) (C ⊥ ) ⊥ = C.


5. CODICE DUALE 46<br />

(4) Sia C ⊆ F n q autoduale, allora x • y = 0 per ogni coppia <strong>di</strong> parole non<br />

necessariamente <strong>di</strong>stinte e pertanto si ha<br />

<strong>di</strong>m C = <strong>di</strong>m C ⊥ = k = n<br />

2<br />

Ricor<strong>di</strong>amo che se A è una matrice, con A t si in<strong>di</strong>ca la matrice trasposta <strong>di</strong><br />

A, ossia la matrice che ha per colonne le righe <strong>di</strong> A. Ovviamente le righe <strong>di</strong> A t<br />

coincidono con le colonne <strong>di</strong> A.<br />

Teorema 4.5.4. Sia C ⊆ F n q un (n, k)-co<strong>di</strong>ce generato dalla matrice G. Allora<br />

un vettore x ∈ F n q è una parola del co<strong>di</strong>ce duale C ⊥ se e solo se è ortogonale a tutti<br />

i vettori riga <strong>di</strong> G:<br />

x ∈ C ⊥ ⇔ xG t = 0<br />

dove 0 è la matrice 1 × k i cui elementi sono tutti nulli.<br />

Dimostrazione. Sia x ∈ C ⊥ , allora x è ortogonale ad ogni parola <strong>di</strong> C e in<br />

particolare alle parole che costituiscono una base <strong>di</strong> C e pertanto xG t = 0.<br />

Viceversa, sia xG t = 0. Allora x è ortogonale a tutti i vettori e1, e2, . . . , ek che<br />

costituiscono una base <strong>di</strong> C. Poichè per ogni parola c ∈ C si ha c = λ1e1+. . .+λkek<br />

segue che<br />

x • c = x • (λ1e1 + . . . + λkek) = λ1(x • e1) + . . . + λk(x • ek) = 0.<br />

Pertanto x è ortogonale ad ogni parola <strong>di</strong> C e <strong>di</strong> conseguenza x ∈ C ⊥ . <br />

Teorema 4.5.5. Se C ⊆ F n q è un (n, k)-co<strong>di</strong>ce lineare allora C ⊥ è un<br />

(n, n − k)-co<strong>di</strong>ce lineare.<br />

Dimostrazione. Dal teorema precedente segue che i vettori x ∈ C ⊥ sono<br />

tutti e soli i vettori <strong>di</strong> F n q ortogonali ai vettori <strong>di</strong> una base {ei}, i = 1, . . . , k, <strong>di</strong> C.<br />

Questi vettori sono dati da tutte e sole le soluzioni del sistema<br />

⎧<br />

⎪⎨<br />

⎪⎩<br />

e11x1 + e12x2 + · · · + e1nxn = 0<br />

e21x1 + e22x2 + · · · + e2nxn = 0.<br />

ek1x1 + ek2x2 + · · · + eknxn = 0<br />

Questo è un sistema lineare omogeneo <strong>di</strong> k equazioni in n incognite con rango<br />

della matrice <strong>dei</strong> coefficienti uguale a k quin<strong>di</strong> ha q n−k autosoluzioni delle quali<br />

esattamente n−k linearmenti in<strong>di</strong>pendenti. Segue che n−k autosoluzioni qualsiasi,<br />

linearmente in<strong>di</strong>pendenti, sono una base <strong>di</strong> C ⊥ e perciò <strong>di</strong>m C ⊥ = n − k. <br />

<strong>di</strong>m C + <strong>di</strong>m (C ⊥ ) = n


5. CODICE DUALE 47<br />

Definizione 4.5.6. Sia C un (n, k)-co<strong>di</strong>ce lineare. Una matrice generatrice <strong>di</strong><br />

C ⊥ è detta matrice <strong>di</strong> controllo (o matrice <strong>di</strong> controllo <strong>di</strong> parità ) del co<strong>di</strong>ce<br />

C, si denota con H ed è <strong>di</strong> tipo (n − k) × n.<br />

Teorema 4.5.7. Un vettore x ∈ F n q , x = (x1x2 · · · xn), è una parola del co<strong>di</strong>ce<br />

C se e solo se xH t = 0, dove 0 è la matrice 1 × (n − k) i cui elementi sono tutti<br />

nulli.<br />

Dimostrazione. Un vettore x ∈ F n q è una parola <strong>di</strong> C se e solo se è ortogonale<br />

a C ⊥ ossia se e solo se è ortogonale a tutti i vettori y ∈ C ⊥ ossia se e solo se è<br />

ortogonale a tutti i vettori <strong>di</strong> una base <strong>di</strong> C ⊥ . Poichè le componenti <strong>dei</strong> vettori<br />

<strong>di</strong> una base <strong>di</strong> C ⊥ sono le righe <strong>di</strong> H, un vettore x è una parola <strong>di</strong> C se e solo se<br />

xH t = 0. <br />

Dunque la conoscenza <strong>di</strong> H permette <strong>di</strong> controllare facilmente se un vettore<br />

<strong>di</strong> F n q è una parola del co<strong>di</strong>ce C. Questo è il motivo per cui H si chiama matrice<br />

<strong>di</strong> controllo <strong>di</strong> C e le equazioni del sistema xH t = 0 sono dette equazioni <strong>di</strong><br />

controllo.<br />

Così come la matrice generatrice, anche la matrice <strong>di</strong> controllo <strong>di</strong> un co<strong>di</strong>ce non<br />

è unica, in generale. Se come matrice generatrice <strong>di</strong> C si sceglie quella standard<br />

allora la costruzione della matrice H è semplice ed imme<strong>di</strong>ata.<br />

Teorema 4.5.8. Sia G = (Ik | A) una matrice generatrice standard <strong>di</strong> un<br />

(n, k)-co<strong>di</strong>ce lineare C. Allora H = (−A t | In−k) è una matrice <strong>di</strong> controllo per C.<br />

Dimostrazione. Sia<br />

G =<br />

⎛<br />

⎜<br />

⎝<br />

1 0 . . . 0 e1,k+1 . . . e1,n<br />

0 1 . . . 0 e2,k+1 . . . e2,n<br />

.<br />

0 0 . . . 1 ek,k+1 . . . ek,n<br />

una matrice generatrice rispetto alle basi {ei} <strong>di</strong> C e {bj} <strong>di</strong> F n q , per i = 1, . . . , k; j =<br />

1, . . . , n. Un vettore x = (x1, . . . , xn) ∈ F n q è una parola <strong>di</strong> C ⊥ se e solo se xG t = 0,<br />

cioè se e solo se è soluzione del sistema<br />

⎧<br />

⎪⎨<br />

⎪⎩<br />

x1 + e1,k+1xk+1 + · · · + e1,nxn = 0<br />

x2 + e2,k+1xk+1 + · · · + e2,nxn = 0.<br />

xk + ek,k+1xk+1 + · · · + ek,nxn = 0<br />

Esso ha n −k autosoluzioni linearmente in<strong>di</strong>pendenti perchè è lineare omogeneo <strong>di</strong><br />

k equazioni in n incognite con caratteristica della matrice <strong>dei</strong> coefficienti uguale a<br />

⎞<br />

⎟<br />


5. CODICE DUALE 48<br />

k. Troviamo le (n−k) autosoluzioni assegnando alle incognite xk+1, . . . , xn successivamente<br />

i valori (1, 0, . . . , 0), (0, 1, . . . , 0), (0, 0, . . . , 1). In questo modo otteniamo<br />

una base <strong>di</strong> C ⊥ data dai vettori:<br />

(−e1,k+1, −e2,k+1, . . . , −ek,k+1, 1, 0, . . . , 0)<br />

(−e1,k+2, −e2,k+2, . . . , −ek,k+2, 0, 1, . . . , 0)<br />

. . . . . . . . .<br />

(−e1,n, −e2,n, . . . , −ek,n, 0, 0, . . . , 1)<br />

e pertanto la matrice<br />

⎛<br />

H =<br />

⎜<br />

⎝<br />

−e1,k+1 −e2,k+1 . . . −ek,k+1 1 0 . . . 0<br />

−e1,k+2 −e2,k+2 . . . −ek,k+2 0 1 . . . 0<br />

.<br />

−e1,k+n −e2,k+n . . . −ek,k+n 0 0 . . . 1<br />

⎞<br />

⎟<br />

⎠ = (−At | In−k)<br />

è una matrice <strong>di</strong> controllo per C. <br />

Esempio 4.5.9.<br />

(1) La matrice <strong>di</strong> controllo del co<strong>di</strong>ce binario (7, 4) <strong>di</strong> Hamming è<br />

⎛<br />

⎞<br />

1 0 1 1 1 0 0<br />

H = ⎝ 1 1 0 1 0 1 0 ⎠ = (−A<br />

1 1 1 0 0 0 1<br />

t | In−k)<br />

la quale ha effettivamente rango 3.<br />

(2) Sia C il (7, 4)-co<strong>di</strong>ce sopra Z3 con matrice generatrice<br />

⎛<br />

⎞<br />

0 0 0 2 1 1 0<br />

⎜<br />

G = ⎜ 0 0 1 1 0 2 0 ⎟<br />

⎝ 2 1 0 2 0 2 0 ⎠<br />

2 0 0 1 0 0 1<br />

Per trovare una matrice del tipo G ′ = (I4|A) che generi un co<strong>di</strong>ce D equivalente<br />

a C, permutiamo le colonne <strong>di</strong> G in modo che assumano l’or<strong>di</strong>ne<br />

5, 3, 2, 7, 1, 4, 6, ossia applichiamo alle posizioni (colonne) la permutazione<br />

1 ↦→ 5, 2 ↦→ 3, 3 ↦→ 2, 4 ↦→ 6, 5 ↦→ 1, 6 ↦→ 7, 7 ↦→ 4,<br />

ossia moltiplichiamo a destra G per la matrice <strong>di</strong> permutazione<br />

⎛<br />

0 0 0 0 1 0<br />

⎞<br />

0<br />

⎜ 0<br />

⎜ 0<br />

⎜<br />

P = ⎜ 0<br />

⎜ 1<br />

⎝<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0 ⎟<br />

0 ⎟<br />

1 ⎟<br />

0 ⎟<br />

0<br />

⎠<br />

0 0 0 0 0 1 0


5. CODICE DUALE 49<br />

In questo modo si ottiene una matrice standard G ′ che genera un co<strong>di</strong>ce<br />

D equivalente a C<br />

G ′ ⎛<br />

1<br />

⎜<br />

= ⎜ 0<br />

⎝ 0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

2<br />

2<br />

1<br />

2<br />

⎞<br />

1<br />

2 ⎟<br />

2 ⎠<br />

0 0 0 1 2 1 0<br />

= (I4|A),<br />

⎛<br />

0<br />

⎜<br />

A = ⎜ 0<br />

⎝ 2<br />

2<br />

1<br />

2<br />

⎞<br />

1<br />

2 ⎟<br />

2 ⎠<br />

2 1 0<br />

.<br />

Una matrice generatrice <strong>di</strong> D⊥ è allora<br />

H ′ = (−A t ⎛<br />

0<br />

| I3) = ⎝ 1<br />

0<br />

2<br />

1<br />

1<br />

1<br />

2<br />

1<br />

0<br />

0<br />

1<br />

⎞<br />

0<br />

0 ⎠ .<br />

2 1 1 0 0 0 1<br />

Moltiplicando H ′ a destra per la matrice <strong>di</strong> permutazione<br />

P t ⎛<br />

0 0 0 0 1 0<br />

⎞<br />

0<br />

⎜ 0<br />

⎜ 0<br />

⎜<br />

= ⎜ 0<br />

⎜ 1<br />

⎝<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0 ⎟<br />

0 ⎟<br />

0 ⎟<br />

0 ⎟<br />

1<br />

⎠<br />

0 0 0 1 0 0 0<br />

si ottiene la seguente matrice generatrice per C⊥ :<br />

⎛<br />

1<br />

H = ⎝ 0<br />

1<br />

1<br />

0<br />

2<br />

0<br />

0<br />

0<br />

1<br />

1<br />

2<br />

⎞<br />

0<br />

1 ⎠ .<br />

0 1 1 1 2 0 0<br />

Osserviamo che GH t = 0; inoltre H ha, come previsto, rango n − k = 3.<br />

Esempio 4.5.10. Trovare la matrice <strong>di</strong> controllo <strong>di</strong> un co<strong>di</strong>ce lineare binario C<br />

assegnato tramite la matrice<br />

⎛<br />

1<br />

G = ⎝ 0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

1<br />

⎞<br />

1<br />

0 ⎠ .<br />

0 0 1 0 1<br />

Un vettore x ∈ F 5 2 è ortogonale a C se e solo se xGt = 0. Se x = (x1x2x3x4x5), in<br />

forma estesa significa:<br />

⎧<br />

⎨ x1 +x4 +x5 = 0<br />

⎧<br />

⎨ x1 = x2 + x3<br />

⎩<br />

+x2<br />

+x3<br />

+x4<br />

+x5<br />

=<br />

=<br />

0<br />

0<br />

,<br />

⎩<br />

x4 = x2<br />

x5 = x3


5. CODICE DUALE 50<br />

E pertanto C⊥ {x | x = (x2 + x3, x2, x3, x2, x3)}.<br />

Una base <strong>di</strong> C⊥ è {(1, 1, 0, 1, 0), (1, 0, 1, 0, 1)} quin<strong>di</strong> una matrice <strong>di</strong> controllo <strong>di</strong> C<br />

è<br />

<br />

1 1 0 1 0<br />

H =<br />

.<br />

1 0 1 0 1<br />

Un vettore x ∈ F 5 2 è una parola <strong>di</strong> C se e solo se xH t = 0 ossia<br />

x1 +x2 +x4 = 0<br />

x1 +x3 +x5 = 0<br />

Queste due equazioni sono equazioni <strong>di</strong> controllo del co<strong>di</strong>ce C.<br />

Come mostra il seguente teorema, partendo da una matrice <strong>di</strong> controllo si può<br />

anche calcolare la <strong>di</strong>stanza minima del co<strong>di</strong>ce lineare.<br />

Teorema 4.5.11. Sia H una matrice <strong>di</strong> controllo <strong>di</strong> un (n, k)-co<strong>di</strong>ce lineare<br />

C ⊆ F n q . Allora la <strong>di</strong>stanza minima del co<strong>di</strong>ce è il minimo or<strong>di</strong>ne <strong>di</strong> un insieme<br />

linearmente <strong>di</strong>pendente <strong>di</strong> colonne della matrice H.<br />

Dimostrazione. Si rinvia a [1] pag. 146 − 148. <br />

Corollario 4.5.12. Sia H una matrice <strong>di</strong> controllo <strong>di</strong> un (n, k)-co<strong>di</strong>ce lineare<br />

C ⊆ F n q con <strong>di</strong>stanza minima d. Si ha :<br />

(1) d − 1 colonne <strong>di</strong> H sono sempre linearmente in<strong>di</strong>pendenti.<br />

(2) H ha rango almeno d − 1.<br />

Dimostrazione. Segue dal teorema precedente. <br />

Nel Corollario 3.2.8 si è <strong>di</strong>mostrato che un (n, k)-co<strong>di</strong>ce con <strong>di</strong>stanza minima<br />

d = 2h+1 corregge h errori. Allora, per il teorema precedente, la costruzione <strong>di</strong> un<br />

co<strong>di</strong>ce h-correttore equivale alla costruzione <strong>di</strong> una matrice H <strong>di</strong> tipo (n−k)×n con<br />

rango n − k e tale che 2h colonne qualsiasi <strong>di</strong> essa siano linearmente in<strong>di</strong>pendenti.<br />

In particolare, costruire un (n, k)-co<strong>di</strong>ce lineare 1-correttore equivale a costruire<br />

una matrice H <strong>di</strong> tipo (n − k) × n con rango (n − k) e nella quale due colonne<br />

qualsiasi siano linearmente in<strong>di</strong>pendenti. In generale per h ≥ 2 il problema risulta<br />

<strong>di</strong>fficile.<br />

Esempio 4.5.13. Consideriamo la seguente matrice H <strong>di</strong> rango 3 e con elementi<br />

in GF (3) :<br />

⎛<br />

2<br />

H = ⎝ 0<br />

0<br />

2<br />

0<br />

0<br />

1<br />

0<br />

⎞<br />

1<br />

2 ⎠ .<br />

0 0 1 2 0


6. DECODIFICA DEI CODICI LINEARI PER SINDROME 51<br />

Le colonne <strong>di</strong> H sono a due a due linearmente in<strong>di</strong>pendenti e ne esistono tre<br />

linearmente <strong>di</strong>pendenti (ad esempio la prima, la seconda e la quinta) e pertanto 3<br />

è il minimo numero <strong>di</strong> colonne linearmente <strong>di</strong>pendenti. Quin<strong>di</strong> H è una matrice<br />

<strong>di</strong> controllo <strong>di</strong> un (5, 2)-co<strong>di</strong>ce ternario con d = 3. Questo co<strong>di</strong>ce è 1-correttore<br />

perchè d = 2 · 1 + 1.<br />

Se d è la <strong>di</strong>stanza minima <strong>di</strong> un (n, k)-co<strong>di</strong>ce C la limitazione <strong>di</strong> Singleton<br />

d ≤ n − k + 1 ci dà una con<strong>di</strong>zione necessaria per l’esistenza <strong>di</strong> C ma ciò non<br />

assicura che C esista. In generale, il problema dell’esistenza <strong>di</strong> un co<strong>di</strong>ce avente<br />

parametri assegnati è <strong>di</strong>fficile. Se il co<strong>di</strong>ce è lineare, un modo per affrontarlo è<br />

quello <strong>di</strong> dare con<strong>di</strong>zioni per l’esistenza <strong>di</strong> una matrice <strong>di</strong> controllo <strong>di</strong> C.<br />

Teorema 4.5.14. Si ha<br />

(1) Un (n, k)-co<strong>di</strong>ce lineare C ⊆ F n 2 avente <strong>di</strong>stanza minima d esiste se vale<br />

<br />

n − 1 n − 1<br />

1 + + . . . , < 2<br />

1<br />

d − 2<br />

n−k<br />

(2) Un (n, k)-co<strong>di</strong>ce lineare C ⊆ F n q avente <strong>di</strong>stanza minima d esiste se vale<br />

d−2<br />

(q − 1) s<br />

<br />

n − 1<br />

< q<br />

s<br />

n−k<br />

s=0<br />

Dimostrazione. Si rinvia a [1] pag. 149, 150. <br />

6. Deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci lineari per sindrome<br />

La nozione <strong>di</strong> co<strong>di</strong>ce ortogonale si rivela particolarmente utile per costruire<br />

algoritmi <strong>di</strong> deco<strong>di</strong>fica specifici per i co<strong>di</strong>ci lineari. Ricor<strong>di</strong>amo che con F n q si<br />

intende lo spazio vettoriale <strong>di</strong> <strong>di</strong>mensione n ad elementi in Fq = GF (q).<br />

Definizione 4.6.1. Sia H una matrice <strong>di</strong> controllo del (n, k)-co<strong>di</strong>ce lineare<br />

.<br />

C ⊆ F n q . Si definisce sindrome <strong>di</strong> un vettore x ∈ F n q il vettore s = x · H t ∈ F n−k<br />

q<br />

Nota 4.6.2. L’utilità della matrice <strong>di</strong> controllo H associata al co<strong>di</strong>ce C ⊆ F n q<br />

<strong>di</strong>scende dalla seguente fondamentale osservazione:<br />

un vettore v dello spazio vettoriale F n q è una parola del co<strong>di</strong>ce C se e<br />

solo se vH t = 0.<br />

Se durante la trasmissione <strong>di</strong> una parola non entrano errori, la sindrome è<br />

zero, ma non vale il viceversa. Infatti potrebbero entrare un numero <strong>di</strong> errori tale


6. DECODIFICA DEI CODICI LINEARI PER SINDROME 52<br />

da trasformare la parola trasmessa in un’altra parola del co<strong>di</strong>ce. In questo caso,<br />

pur essendo zero la sindrome della parola in uscita, essa è <strong>di</strong>versa dalla parola<br />

trasmessa. Senza fare nessuna ipotesi sul numero massimo <strong>di</strong> errori che possono<br />

entrare in una parola durante la trasmissione e sulla <strong>di</strong>stanza minima del co<strong>di</strong>ce, in<br />

effetti non si può <strong>di</strong>re se la parola ricevuta è quella trasmessa. Ma se, per esempio,<br />

sappiamo che in ogni parola entra al più un errore durante la trasmissione e che<br />

d = 3, allora una parola non può <strong>di</strong>ventare un’altra parola del co<strong>di</strong>ce durante la<br />

trasmissione e quin<strong>di</strong> se la sindrome della parola in uscita è zero, si è certi che<br />

la parola ricevuta è quella trasmessa, mentre se la sindrome è <strong>di</strong>versa da zero è<br />

entrato un errore.<br />

Come si vedrà in seguito, la sindrome risulta anche un aiuto fondamentale per<br />

la correzione <strong>di</strong> errori.<br />

Il metodo <strong>di</strong> deco<strong>di</strong>fica per i co<strong>di</strong>ci lineari basato sui laterali <strong>di</strong> un sottogruppo<br />

viene semplificato dal seguente teorema.<br />

Teorema 4.6.3. Sia H una matrice <strong>di</strong> controllo <strong>di</strong> un (n, k)-co<strong>di</strong>ce lineare<br />

C ⊆ F n q . Allora due vettori x, y ∈ F n q sono in uno stesso laterale <strong>di</strong> C se e solo se<br />

hanno la stessa sindrome.<br />

Dimostrazione. Siano x, y ∈ F n q , risulta<br />

x + C = y + C ⇔ y − x ∈ C ⇔ (y − x)H t = 0 ⇔ yH t − xH t = 0 ⇔ xH t = yH t<br />

ossia i vettori x e y appartengono ad uno stesso laterale <strong>di</strong> C se e solo se hanno la<br />

stessa sindrome. <br />

Dal teorema ora <strong>di</strong>mostrato si ha in particolare che le sindromi sono in corrispondenza<br />

biunivoca con i laterali <strong>di</strong> C e che la sindrome <strong>di</strong> un qualsiasi vettore<br />

<strong>di</strong> un laterale Ci è uguale alla sindrome del leader scelto per Ci. Assegnata H, la<br />

corrispondenza che associa ad ogni leader la sua sindrome è biunivoca, ciò semplifica<br />

la deco<strong>di</strong>fica tramite la tabella standard. E’ questo un ulteriore vantaggio <strong>di</strong><br />

un co<strong>di</strong>ce lineare. L’algoritmo <strong>di</strong> deco<strong>di</strong>fica <strong>di</strong>venta il seguente.<br />

Algoritmo <strong>di</strong> deco<strong>di</strong>fica assistita me<strong>di</strong>ante sindrome.<br />

• Passo 1. Si calcola la sindrome s = y · H t del vettore ricevuto y.<br />

• Passo 2. Si trova il leader ai avente come sindrome s.<br />

• Passo 3. Si deco<strong>di</strong>fica y come la parola y − ai.


6. DECODIFICA DEI CODICI LINEARI PER SINDROME 53<br />

Esempio 4.6.4. Sia C il (4, 2)-co<strong>di</strong>ce lineare binario avente come matrice generatrice<br />

<br />

1 1 1 0<br />

G =<br />

.<br />

0 1 1 1<br />

Operando sulle righe, la G può essere trasformata nella matrice standard<br />

G ′ <br />

1 0 0 1<br />

=<br />

= (I2|A).<br />

0 1 1 1<br />

Una matrice <strong>di</strong> controllo per C è allora:<br />

<br />

0 1 1 0<br />

H =<br />

1 1 0 1<br />

Costruiamo ora la TABELLA standard:<br />

= (−A t |I4−2).<br />

a0 = 0 0 0 0 1 1 1 0 0 1 1 1 1 0 0 1<br />

a1 = 1 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1<br />

a2 = 0 1 0 0 1 0 1 0 0 0 1 1 1 1 0 1<br />

a3 = 0 0 1 0 1 1 0 0 0 1 0 1 1 0 1 1<br />

La sindrome <strong>dei</strong> leader a0, a1, a2, a3 è rispettivamente<br />

s0 = a0H t = (00), s1 = a1H t = (01), s2 = a2H t = (11), s3 = a3H t = (10).<br />

Supponiamo si riceva il vettore y = (0101). Si ha yH t = (10) = s3, allora y viene<br />

deco<strong>di</strong>ficato nella parola y − a3 = 0111.<br />

Teorema 4.6.5. Se C ⊆ F n 2 è un co<strong>di</strong>ce lineare binario allora la sindrome<br />

<strong>di</strong> una parola ricevuta è una matrice riga avente come elementi la somma degli<br />

elementi delle colonne <strong>di</strong> H corrispondenti ai posti in cui sono entrati errori.<br />

Dimostrazione. Sia x la parola <strong>di</strong> C trasmessa. Allora xH t = 0. Supponiamo<br />

che entrino degli errori e sia e il vettore errore il quale ha tante componenti non<br />

nulle quanti sono gli errori entrati; infatti la parola ricevuta è y = x + e e si ha<br />

yH t = (x + e)H t = xH t + eH t = eH t .<br />

Sia e = (0, . . . , 1a, . . . , 1b, . . . , 0).<br />

Se<br />

⎛<br />

⎜<br />

H = ⎜<br />

⎝<br />

h1,1<br />

h2,1<br />

.<br />

. . .<br />

. . .<br />

h1,a<br />

h2,a<br />

. . .<br />

. . .<br />

h1,b<br />

h2,b<br />

. . .<br />

. . .<br />

h1,n<br />

h2,n<br />

segue<br />

hn−k,1 . . . hn−k,a . . . hn−k,b . . . hn−k,n<br />

yH t = eH t = h1,a + h1,b h2,a + h2,b . . . hn−k,a + hn−k,b<br />

⎞<br />

⎟<br />


6. DECODIFICA DEI CODICI LINEARI PER SINDROME 54<br />

Dal teorema ora <strong>di</strong>mostrato segue che se le colonne <strong>di</strong> una matrice <strong>di</strong> controllo<br />

H <strong>di</strong> un co<strong>di</strong>ce binario C sono a due a due linearmente in<strong>di</strong>pendenti (cioè <strong>di</strong>stinte<br />

e non nulle), allora si può decidere dove è un singolo errore e correggerlo.<br />

D’altra parte se le colonne <strong>di</strong> H sono a due a due linearmente in<strong>di</strong>pendenti e<br />

ne esistono tre linearmente <strong>di</strong>pendenti, allora d = 3 e C è 1-correttore.<br />

Co<strong>di</strong>ci lineari 1-correttori<br />

La deco<strong>di</strong>fica tramite tabella standard è molto utile nei co<strong>di</strong>ci lineari che correggono<br />

almeno 2 errori mentre la deco<strong>di</strong>fica nei co<strong>di</strong>ci lineari 1-correttori può<br />

essere fatta più semplicemente.<br />

Schema <strong>di</strong> Deco<strong>di</strong>fica per i co<strong>di</strong>ci lineari 1-correttori binari<br />

• Passo 1. Si calcola la sindrome yH t del vettore y ricevuto.<br />

• Passo 2. Se yH t = 0, si suppone che la parola trasmessa coincida con il<br />

vettore ricevuto.<br />

• Passo 3. Se yH t = 0 e yH t è uguale ad una colonna, la j-esima, <strong>di</strong> H,<br />

si ha che la j-esima componente del vettore ricevuto è errata e si corregge<br />

l’errore.<br />

• Passo 4. Se yH t = 0 e yH t non è uguale ad una colonna <strong>di</strong> H, certamente<br />

sono entrati almeno due errori e non è possibile correggerli.<br />

Schema <strong>di</strong> Deco<strong>di</strong>fica per i co<strong>di</strong>ci lineari 1-correttori q-ari<br />

Sia C ⊆ F n q un co<strong>di</strong>ce lineare con d(C) ≥ 3, ossia sia C un co<strong>di</strong>ce 1-correttore.<br />

Sia H una sua matrice <strong>di</strong> controllo e supponiamo che in ogni parola entri al più<br />

un errore ossia che per ogni errore e dovuto al canale si abbia w(e) ≤ 1.<br />

Sia trasmessa una parola x ∈ C e sia ricevuto il vettore y = x + e. Si ha<br />

yH t = (x + e)H t = xH t + eH t = eH t , cioè la sindrome del vettore ricevuto<br />

uguaglia la sindrome del vettore errore. Se eH t = 0, poichè e non può essere una<br />

parola (non nulla) <strong>di</strong> C, essendo w(e) ≤ 1, il deco<strong>di</strong>ficatore decide che e = 0 e<br />

quin<strong>di</strong> y è la parola trasmessa.<br />

Supponiamo ora che eH t = 0. In questo caso necessariamente e = 0 e<br />

dall’ipotesi w(e) ≤ 1 segue che e ha un’unica componente non nulla, sia e =<br />

(0, 0, . . . , ei, 0, . . . , 0). In questo caso si ha<br />

eH t = h1,iei h2,iei . . . hn−k,iei<br />

<br />

= ei h1,i h2,i . . . hn−k,i<br />

cioè la sindrome è il prodotto tra un elemento <strong>di</strong> GF (q), che dà la ′′ grandezza ′′ dell’errore,<br />

e la colonna <strong>di</strong> H corrispondente alla componente dove è entrato l’errore.<br />

In questo caso la n-upla y ricevuta viene deco<strong>di</strong>ficata nella parola<br />

x = y − e = (y1, . . . , yi, . . . , yn) − (0, . . . , 0, ei, 0, . . . , 0) =<br />

= (yi, . . . , yi−1, yi − ei, yi+1, . . . , xn).


In sintesi:<br />

6. DECODIFICA DEI CODICI LINEARI PER SINDROME 55<br />

• Passo 1. Si calcola la sindrome yH t del vettore y ricevuto.<br />

• Passo 2. Se yH t = 0, si suppone y sia proprio la parola trasmessa.<br />

• Passo 3. Se yH t = s = 0, si confronta s con ogni colonna <strong>di</strong> H.<br />

• Passo 4. Se s è multiplo <strong>di</strong> una colonna, sia la i-esima, <strong>di</strong> H secondo<br />

lo scalare ei, allora l’errore è dato dalla n-upla avente come componente<br />

i-esima ei e tutte le altre componenti nulle. Si deco<strong>di</strong>fica y come la parola<br />

x = y − e.<br />

• Passo 5. Se non si verifica nessuno <strong>dei</strong> casi detti, la n-upla ricevuta<br />

contiene almeno due errori e quin<strong>di</strong> non si può risalire alla parola<br />

trasmessa.<br />

Esempio 4.6.6. Consideriamo il (5, 2)-co<strong>di</strong>ce ternario dell’esempio 4.5.13. Supponiamo<br />

che venga trasmessa la parola x = (1 0 1 1 0) e che in uscita arrivi il<br />

vettore y = (1 0 0 1 0). Si ha<br />

yH t = 0 0 2 = 2 0 0 1 <br />

che implica l’esistenza <strong>di</strong> un errore <strong>di</strong> ′′ grandezza ′′ 2 nella terza posizione. Allora<br />

x = (1 0 0 1 0) − (0 0 2 0 0) = (1 0 1 1 0).<br />

Nota 4.6.7. L’affidabilità che offre il canale è molto importante. Se si usa ad<br />

esempio un co<strong>di</strong>ce 1-correttore, l’evento che in una parola possano entrare due o più<br />

errori deve avere una probabilità quasi nulla. Infatti se in una parola entrano due<br />

errori, la sindrome del vettore ricevuto può essere ancora uguale ad una colonna <strong>di</strong><br />

H, in tal caso i due errori non vengono rivelati e la deco<strong>di</strong>fica è errata. Ciò <strong>di</strong>pende<br />

dal fatto che, se è trasmessa una parola x ed arriva la sequenza y contenente due<br />

errori, la sequenza y viene deco<strong>di</strong>ficata nella parola x ′ che <strong>di</strong>fferisce da y per una<br />

sola componente, se esiste nel co<strong>di</strong>ce una parola x ′ con d(y, x ′ ) = 1, e ciò può<br />

accadere se d(x, x ′ ) = 3.<br />

Ad esempio riferendoci sempre al co<strong>di</strong>ce ternario dell’esempio 4.5.13, supponiamo<br />

<strong>di</strong> trasmettere ancora la parola x = (1 0 1 1 0) e <strong>di</strong> ricevere y = (1 0 0 0 0),<br />

contenente due errori. Risulta yH t = (2 0 0), che è uguale alla prima colonna<br />

<strong>di</strong> H, così che y verrebbe deco<strong>di</strong>ficata nella parola (0 0 0 0 0). In questo caso la<br />

deco<strong>di</strong>fica risulterebbe errata.


7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 56<br />

7. Riepilogo relativo alla co<strong>di</strong>fica e deco<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce lineare<br />

L’operazione <strong>di</strong> co<strong>di</strong>fica (ve<strong>di</strong> paragrafo 3) consiste nel porre in corrispondenza<br />

biunivoca q k messaggi assegnati con le parole <strong>di</strong> C e ovviamente non è restrittivo<br />

supporre che l’insieme <strong>dei</strong> messaggi sia l’insieme <strong>dei</strong> vettori <strong>di</strong> F k q , lo spazio<br />

vettoriale k-<strong>di</strong>mensionale su Fq.<br />

Se G è una matrice generatrice <strong>di</strong> C, della quale denotiamo con gi i vettori riga<br />

(sono delle n-ple), si sceglie come funzione <strong>di</strong> co<strong>di</strong>fica l’applicazione<br />

m = (m1 m2 . . . mk) ∈ F k q → m1g1 + m2g2 + · · · + mkgk ∈ C<br />

che è un isomorfismo <strong>di</strong> spazi vettoriali. Poichè<br />

m1g1 + m2g2 + · · · + mkgk = mG<br />

l’algoritmo <strong>di</strong> co<strong>di</strong>fica è semplicemente il prodotto (righe per colonne) <strong>di</strong> vettori<br />

numerici <strong>di</strong> lunghezza k per la matrice G. Di solito la matrice G è data in forma<br />

standard G = (Ik|A). In questo caso le prime k lettere <strong>di</strong> mG coincidono<br />

or<strong>di</strong>natamente con le componenti <strong>di</strong> m, rappresentano cioè il messaggio, mentre le<br />

rimanenti n − k sono quelle <strong>di</strong> controllo. Sia dunque<br />

x = mG<br />

la parola <strong>di</strong> C con la quale è stato co<strong>di</strong>ficato il messaggio m; trasmettiamo la<br />

parola x e supponiamo che questa sia ricevuta in errore; ossia il deco<strong>di</strong>ficatore<br />

riceva una parola y = x. Supponiamo inoltre d(x, y) ≤ e. In questo caso y ∈ C e il<br />

deco<strong>di</strong>ficatore deve risalire in modo automatico a x secondo il principio del nearest<br />

neighbour deco<strong>di</strong>ng (massima somiglianza); deve quin<strong>di</strong> usare un algoritmo <strong>di</strong><br />

deco<strong>di</strong>fica che gli permetta <strong>di</strong> trovare la parola z ∈ C a <strong>di</strong>stanza minima da<br />

y. Essendo d(x, y) ≤ e, risulta z = x. Assegnata una tabella standard <strong>di</strong> C, un<br />

possibile schema <strong>di</strong> deco<strong>di</strong>fica è il seguente: se i è l’in<strong>di</strong>ce della riga della tabella<br />

cui y appartiene, si deco<strong>di</strong>fica y come z = y − ai. Poichè il peso <strong>di</strong> ai = y − z, che<br />

è uguale alla <strong>di</strong>stanza fra y e z, è per costruzione il più piccolo possibile, al variare<br />

<strong>di</strong> z ∈ C, siamo sicuri <strong>di</strong> aver usato uno schema <strong>di</strong> deco<strong>di</strong>fica secondo il principio<br />

<strong>di</strong> nearest neighbour deco<strong>di</strong>ng. L’algoritmo corrispondente alla deco<strong>di</strong>fica tramite<br />

tabella standard consta <strong>di</strong> questi passi:<br />

primo passo: scorrere la tebella standard, iniziando dal primo elemento della<br />

prima riga e continuando in successione, fino a trovare la parola ricevuta y;<br />

secondo passo: deco<strong>di</strong>ficare y come la prima parola della colonna della tabella<br />

cui y appartiene.<br />

Osserviamo esplicitamente che lo schema <strong>di</strong> deco<strong>di</strong>fica descritto si fonda su due<br />

fatti:<br />

(1) l’errore e = y − x, che il deco<strong>di</strong>ficatore non conosce e deve scoprire, e la<br />

parola y ricevuta sono nello stesso laterale <strong>di</strong> C;


7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 57<br />

(2) la speranza che durante la trasmissione non si siano verificati troppi errori;<br />

ossia il peso <strong>di</strong> e sia abbastanza piccolo in modo che e abbia buona probabilità <strong>di</strong><br />

coincidere con il leader del laterale y + C.<br />

Quando il numero delle parole <strong>di</strong> C è molto grande, il primo passo del nostro<br />

algoritmo <strong>di</strong> deco<strong>di</strong>fica può richiedere molto tempo e l’intero sistema <strong>di</strong> comunicazione<br />

corre il rischio <strong>di</strong> essere troppo lento. In questo caso conviene servirsi <strong>di</strong><br />

sistemi <strong>di</strong> deco<strong>di</strong>fica più veloci. Uno <strong>di</strong> questi si basa sulla deco<strong>di</strong>fica a sindromi<br />

che funziona nel seguente modo:<br />

(1) si estende una tabella standard <strong>di</strong> C aggiungendo la colonna delle sindromi,<br />

ossia la colonna il cui elemento generico è la sindrome delle parole del laterale<br />

corrispondente alla riga cui l’elemento stesso appartiene;<br />

(2) si calcola la sindrome s(y) <strong>di</strong> y e, scorrendo la colonna delle sindromi, si<br />

trova l’in<strong>di</strong>ce i della riga cui s(y) e y appartengono;<br />

(3) y si deco<strong>di</strong>fica come z = y − ai.<br />

Questo schema <strong>di</strong> deco<strong>di</strong>fica necessita quin<strong>di</strong> <strong>di</strong> una matrice M con due sole<br />

colonne, la prima delle quali coincida con la prima colonna <strong>di</strong> una tabella standard<br />

Σ <strong>di</strong> C (ossia con la colonna delle parole leader), la seconda con la colonna<br />

delle sindromi <strong>di</strong> Σ. Allora anche in questo caso l’algoritmo <strong>di</strong> deco<strong>di</strong>fica è molto<br />

semplice e, detta H una matrice controllo <strong>di</strong> parità <strong>di</strong> C, consiste <strong>dei</strong> seguenti passi:<br />

primo passo: si calcola la sindrome s(y) = yH t della parola ricevuta y;<br />

secondo passo: si scorre la colonna delle sindromi fino a trovare s(y);<br />

terzo passo: si deco<strong>di</strong>fica y come la <strong>di</strong>fferenza z tra y e la parola che si trova<br />

a sinistra <strong>di</strong> s(y) nella matrice M.<br />

Si noti che la parola z ottenuta alla fine dell’algoritmo è la stessa che si otterrebbe<br />

usando il primo schema <strong>di</strong> deco<strong>di</strong>fica descritto. Si noti ancora che, al fine<br />

della deco<strong>di</strong>fica <strong>di</strong> y, il primo algoritmo deve scorrere una tabella con q n−k righe<br />

e q k colonne, mentre il secondo soltanto la colonna delle sindromi, che ha q n−k<br />

elementi. E’ chiaro quin<strong>di</strong> che, se C è abbastanza grande, il secondo algoritmo è<br />

molto più veloce del primo.<br />

Esempio 4.7.1. Consideriamo il (4, 2)-co<strong>di</strong>ce binario<br />

avente come matrice <strong>di</strong> controllo<br />

C = {(0000), (1011), (0101), (1110)}<br />

H =<br />

1 0 1 0<br />

1 1 0 1


7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 58<br />

Una tabella standard <strong>di</strong> C, ampliata me<strong>di</strong>ante la colonna s delle sindromi<br />

(prima colonna), è data da<br />

s leader<br />

(0 0) (0 0 0 0) (1 0 1 1) (0 1 0 1) (1 1 1 0)<br />

(1 1) (1 0 0 0) (0 0 1 1) (1 1 0 1) (0 1 1 0)<br />

(0 1) (0 1 0 0) (1 1 1 1) (0 0 0 1) (1 0 1 0)<br />

(1 0) (0 0 1 0) (1 0 0 1) (0 1 1 1) (1 1 0 0)<br />

Gli algoritmi descritti sono applicabili a tutti i co<strong>di</strong>ci lineari. In particolari<br />

classi <strong>di</strong> co<strong>di</strong>ci essi possono essere mo<strong>di</strong>ficati e resi più efficienti.<br />

Esempio 4.7.2. Sia C il (6, 3)-co<strong>di</strong>ce binario le cui matrici generatrice e <strong>di</strong><br />

controllo <strong>di</strong> parità sono date, rispettivamente, da<br />

⎛<br />

G = ⎝<br />

1 1 0 1 0 0<br />

0 1 1 0 1 0<br />

1 0 1 0 0 1<br />

⎞<br />

⎛<br />

⎠ , H = ⎝<br />

1 0 0 1 0 1<br />

0 1 0 1 1 0<br />

0 0 1 0 1 1<br />

Tale co<strong>di</strong>ce ha <strong>di</strong>stanza minima d = 3. La tabella standard <strong>di</strong> C è<br />

leader<br />

000000 110100 011010 101001 101110 110011 011101 000111<br />

000001 110101 011011 101000 101111 110010 011100 000110<br />

000010 110110 011000 101011 101100 110001 011111 000101<br />

000100 110000 011110 101101 101010 110111 011001 000011<br />

001000 111100 010010 100001 100110 111011 010101 001111<br />

010000 100100 001010 111001 111110 100011 001101 010111<br />

100000 010100 111010 001001 001110 010011 111101 100111<br />

001100 111000 010110 100101 100010 111111 010001 001011<br />

Possiamo semplificare il proce<strong>di</strong>mento limitandoci a considerare la corrispondenza<br />

biunivoca fra i leader e le rispettive sindromi. Rappresentiamo questa corrispondenza<br />

con la seguente tabella formata<br />

• dalla colonna <strong>dei</strong> vettori leader scelti fra quelli <strong>di</strong> peso minimo nella<br />

rispettiva classe Ci, i = 0, 1, . . . , 7 (Ci sono gli elementi del quoziente F 6 2<br />

C );<br />

• dalla colonna s delle sindromi<br />

⎞<br />

⎠ .


7. RIEPILOGO RELATIVO ALLA CODIFICA E DECODIFICA DI UN CODICE LINEARE 59<br />

leader s<br />

000000 000<br />

000001 101<br />

000010 011<br />

000100 110<br />

001000 001<br />

010000 010<br />

100000 100<br />

001100 111<br />

Supponiamo <strong>di</strong> ricevere la parola y = (100011). Calcoliamo y = H t = (010);<br />

poichè (010) è la sindrome del leader a5 della classe C5, deco<strong>di</strong>fichiamo y come<br />

y − ai = (100011) − (010000) = (110011).<br />

Nota 4.7.3. L’algoritmo <strong>di</strong> deco<strong>di</strong>fica tramite sindrome, richiede <strong>di</strong> precomputare<br />

e memorizzare la corrispondenza fra tutte le possibili sindrome e i leader<br />

delle classi. Se il co<strong>di</strong>ce C utilizza parole molto lunghe, può occupare notevole<br />

spazio. Se il co<strong>di</strong>ce è binario, un metodo <strong>di</strong> implementazione finalizzato a ridurre<br />

l’occupazione <strong>di</strong> memoria <strong>di</strong> un deco<strong>di</strong>ficatore è quello presentato nel seguente<br />

algoritmo <strong>di</strong> deco<strong>di</strong>fica.<br />

Algoritmo <strong>di</strong> Deco<strong>di</strong>fica ′′ passo-passo ′′ per co<strong>di</strong>ci binari<br />

(1) Costruire la tabella Σ che associa ad ogni sindrome s il peso minimo <strong>di</strong><br />

un elemento con sindrome s; denotiamo tale numero con Σ(s).<br />

(2) Porre i = 1.<br />

(3) Calcolare la sindrome del vettore ricevuto s = yH t e determinare, tramite<br />

la tabella Σ, il peso w = Σ(s) del corrispondente leader <strong>di</strong> classe.<br />

(4) • Se w = 0, allora non sono in<strong>di</strong>viduati errori, il proce<strong>di</strong>mento <strong>di</strong><br />

deco<strong>di</strong>fica termina restituendo la parola p = y.<br />

• Se w = 0 e Σ((y + ei)H t ) ≤ Σ(yH t ), sostituire y con y + ei dove ei<br />

è un vettore le cui componenti sono tutte 0 tranne la i-esima.<br />

(5) Porre i = i + 1.<br />

(6) Se i > n, segnalare che non si è riusciti a correggere l’errore.<br />

(7) Tornare al passo 3.<br />

Nel funzionamento dell’algoritmo, il punto fondamentale è che, durante tutto<br />

il processo <strong>di</strong> deco<strong>di</strong>fica, il peso dell’errore non può mai crescere. Dopo al più n<br />

passi, rimane determinato un vettore che può cadere nella classe il cui leader ha<br />

peso nullo; se questo si verifica, allora il vettore è stato deco<strong>di</strong>ficato correttamente.


8. L’ENUMERATORE DEI PESI DI UN CODICE LINEARE 60<br />

Esempio 4.7.4. Sia C il co<strong>di</strong>ce dell’esempio 4.7.2. Al posto della tabella che<br />

associa ad ogni leader <strong>di</strong> classe la corrispettiva sindrome, è sufficiente considerare<br />

la tabella in cui i leader delle classi laterali sono sostituiti con i propri pesi.<br />

s w(Cj)<br />

000 0<br />

101 1<br />

011 1<br />

110 1<br />

001 1<br />

010 1<br />

100 1<br />

111 2<br />

8. L’enumeratore <strong>dei</strong> pesi <strong>di</strong> un co<strong>di</strong>ce lineare<br />

Nello stu<strong>di</strong>o <strong>di</strong> un co<strong>di</strong>ce lineare C <strong>di</strong> lunghezza n, uno <strong>dei</strong> problemi centrali<br />

è il calcolo del numero wi = wi(C) <strong>di</strong> tutte le parole <strong>di</strong> C <strong>di</strong> peso i, per ogni<br />

i = 1, 2, . . . , n. A tale proposito spesso si considera il polinomio<br />

W (x, y) = WC(x, y) = <br />

x w(a) y n−w(a) n<br />

= wix i y n−i ,<br />

a∈C<br />

che prende il nome <strong>di</strong> enumeratore <strong>dei</strong> pesi <strong>di</strong> C.<br />

Una importante relazione fra l’enumeratore <strong>dei</strong> pesi W (x, y) <strong>di</strong> C e l’enumeratore<br />

<strong>dei</strong> pesi W ⊥ (x, y) del co<strong>di</strong>ce duale <strong>di</strong> C, è data dal seguente teorema <strong>di</strong> cui<br />

non riportiamo la <strong>di</strong>mostrazione.<br />

Teorema 4.8.1 ( F. J. MacWilliams, 1963 ). Siano W (x, y) e W ⊥ (x, y) gli<br />

enumeratori <strong>dei</strong> pesi rispettivamente <strong>di</strong> un (n, k)-co<strong>di</strong>ce C su Fq e del suo duale.<br />

Allora risulta<br />

e quin<strong>di</strong>, se C è autoduale, risulta<br />

i=0<br />

W ⊥ (x, y) = q −k W (y − x, y + (q − 1)x)<br />

W (x, y) = q −n/2 W (y − x, y + (q − 1)x).


8. L’ENUMERATORE DEI PESI DI UN CODICE LINEARE 61<br />

Nota 4.8.2. In alcuni casi la conoscenza <strong>dei</strong> pesi delle parole <strong>di</strong> una matrice<br />

generatrice G <strong>di</strong> un co<strong>di</strong>ce lineare fornisce informazioni sui coefficienti del polinomio<br />

enumeratore <strong>dei</strong> pesi. Per esempio, se due parole a e b <strong>di</strong> un co<strong>di</strong>ce binario C<br />

hanno peso pari 2s e 2t, rispettivamente, detto m il numero degli in<strong>di</strong>ci j tali che<br />

aj = bj = 1, risulta<br />

w(a + b) = 2s − m + 2t − m = 2(s + t − m).<br />

Ne segue che, se le parole <strong>di</strong> G hanno tutte peso pari, allora si <strong>di</strong>ce che C è un<br />

co<strong>di</strong>ce pari, cioè tutte le sue parole hanno peso pari. Analogamente si prova che,<br />

se C è autoortogonale e tutte le parole <strong>di</strong> G hanno peso <strong>di</strong>visibile per 4, la stessa<br />

proprietà è vera per tutte le parole <strong>di</strong> C. In questo caso C si <strong>di</strong>ce doppiamente<br />

pari.


CAPITOLO 5<br />

Co<strong>di</strong>ci Ciclici<br />

In questo capitolo trattiamo i co<strong>di</strong>ci ciclici. Si tratta <strong>di</strong> una famiglia <strong>di</strong> co<strong>di</strong>ci<br />

lineari fra le più importanti. I co<strong>di</strong>ci ciclici sono tali che se contengono una parola<br />

allora contengono anche tutte le sue permutazioni cicliche. Essi possono essere<br />

implementati in modo molto semplice e per questo sono molto usati, inoltre, i<br />

co<strong>di</strong>ci ciclici si possono rappresentare algebricamente facendo uso <strong>dei</strong> polinomi e<br />

sfruttando un isomorfismo fra gli spazi vettoriali F n q e Fq[x]<br />

(x n −1) .<br />

Con abuso <strong>di</strong> linguaggio denoteremo un polinomio p(x) ∈ Fq[x] e la<br />

sua classe nell’anello Fq[x]<br />

(xn−1) con lo stesso simbolo.<br />

Ogni co<strong>di</strong>ce <strong>di</strong> questa famiglia gode <strong>di</strong> notevoli proprietà fra cui:<br />

• può essere costruito a partire da un singolo vettore;<br />

• ammette degli algoritmi <strong>di</strong> deco<strong>di</strong>fica efficienti;<br />

• può rivelarsi particolarmente efficace per correggere alcune tipologie <strong>di</strong><br />

errore.<br />

Per tutto il capitolo con Fq in<strong>di</strong>cheremo il campo <strong>di</strong> Galois GF (q).<br />

1. Definizioni e proprietà<br />

Definizione 5.1.1. Un co<strong>di</strong>ce lineare C ⊆ F n q si <strong>di</strong>ce ciclico se applicando<br />

una permutazione ciclica ad una qualsiasi sua parola c si ottiene un’altra parola<br />

<strong>di</strong> C:<br />

c = (c0, c1, . . . , cn−1) ∈ C ⇒ (cn−1, c0, . . . , cn−2) ∈ C<br />

Sia Fq[x] l’anello <strong>dei</strong> polinomi nella variabile x. Fissato il polinomio (xn − 1),<br />

sia Rn[x] = ( Fq[x]<br />

(xn−1) , +, ·) l’anello <strong>dei</strong> polinomi su Fq modulo (xn − 1). In questo<br />

modo, ogni polinomio a coefficienti in Fq viene sostanzialmente identificato col<br />

resto della sua <strong>di</strong>visione per xn − 1.<br />

62


Sia f : F n q → Rn[x] l’applicazione definita da<br />

Si ha :<br />

1. DEFINIZIONI E PROPRIETÀ 63<br />

f(c) = c0 + c1x + . . . , cn−1x n−1 per ogni c = (c0, . . . , cn−1) ∈ F n q .<br />

(1) L’applicazione f è biettiva. Infatti Rn[x] ha come elementi i polinomi <strong>di</strong><br />

Fq[x] <strong>di</strong> grado minore o uguale ad n − 1 (si ricor<strong>di</strong> che se il prodotto <strong>di</strong><br />

due polinomi ha grado maggiore o uguale ad n, occorre prendere il suo<br />

resto nella <strong>di</strong>visione per (x n − 1)). Dunque ogni parola può essere vista<br />

come una n-upla <strong>di</strong> F n q o, equivalentemente, come un polinomio <strong>di</strong> Rn[x].<br />

(2) Rn[x] è uno spazio vettoriale <strong>di</strong> <strong>di</strong>mensione n isomorfo allo spazio vettoriale<br />

F n q . Infatti la biezione f precedente è chiaramente un isomorfismo<br />

<strong>di</strong> spazi vettoriali e C(x) è un sottospazio vettoriale <strong>di</strong> Rn[x].<br />

Quanto osservato assicura che la definizione 5.1.1 equivale a<br />

c(x) ∈ C ⇒ xc(x) ∈ C<br />

e ciò porta imme<strong>di</strong>atamente ad una caratterizzazione algebrica <strong>dei</strong> co<strong>di</strong>ci<br />

ciclici.<br />

(3) In Rn[x] moltiplicare un polinomio c(x) per x corrisponde a permutare<br />

ciclicamente, ossia a shiftare <strong>di</strong> un posto a destra le componenti della<br />

n-pla corrispondente a c(x). Infatti, poichè in Rn[x] risulta x n = 1, si ha<br />

xc(x) = c0x + c1x 2 + . . . + cn−2x n−1 + cn−1x n =<br />

= cn−1 + c0x + c1x 2 + . . . + cn−2x n−1 .<br />

Esempio 5.1.2. Consideriamo il co<strong>di</strong>ce lineare binario <strong>di</strong> lunghezza 3:<br />

C = {(000), (110), (101), (011)}<br />

Esso può essere rappresentato come insieme <strong>di</strong> polinomi nella variabile x:<br />

C = {0, 1 + x, 1 + x 2 , x + x 2 }.<br />

Shiftando <strong>di</strong> un posto a destra le componenti <strong>di</strong> ogni terna, si ottiene l’insieme<br />

{(000), (011), (110), (101)} ossia si ottiene sempre una parola <strong>di</strong> C e dunque C è<br />

un co<strong>di</strong>ce ciclico. Alla stessa conclusione si arriva se in Rn[x] si moltiplica ogni<br />

parola-polinomio <strong>di</strong> C per x, infatti si ha .<br />

0·x = 0, (1+x)·x = x+x 2 , (1+x 2 )·x = x+x 3 = x+1, (x+x 2 )·x = x 2 +x 3 = x 2 +1.<br />

Teorema 5.1.3. Un co<strong>di</strong>ce lineare C <strong>di</strong> lunghezza n è ciclico se e solo se è un<br />

ideale <strong>di</strong> Rn[x].


2. POLINOMIO GENERATORE E MATRICE GENERATRICE 64<br />

Dimostrazione. Sia C un ideale <strong>di</strong> Rn[x]. Allora comunque preso c(x) ∈ C<br />

si ha xc(x) ∈ C e pertanto C è ciclico.<br />

Viceversa, sia C ciclico. Essendo C lineare, se c1(x), c2(x) ∈ C allora c1(x) −<br />

c2(x) ∈ C. Inoltre essendo C ciclico, se c(x) ∈ C anche xc(x), x 2 c(x), . . . , x n−1 c(x) ∈<br />

C, pertanto per la linearità <strong>di</strong> C, anche λ0c(x) + λ1xc(x) + . . . + λn−1x n−1 c(x) =<br />

(λ0+λ1x+. . .+λn−1x n−1 )c(x) è una parola <strong>di</strong> C. Facendo variare i coefficienti λi in<br />

Fq, l’espressione (λ0 + λ1x + . . . + λn−1x n−1 ) fornisce tutti i polinomi <strong>di</strong> Rn[x]. <br />

Il prossimo teorema assicura che ogni co<strong>di</strong>ce ciclico C ∈ F n q è un ideale principale<br />

<strong>di</strong> Rn[x]. Ciò significa che Rn[x] è un anello ad ideali principali.<br />

C = {0} è un ideale principale <strong>di</strong> Rn[x]. Nel seguito supporremo C = {0}.<br />

Teorema 5.1.4. Sia g(x) un polinomio monico non nullo <strong>di</strong> grado minimo<br />

appartenente ad un co<strong>di</strong>ce ciclico C <strong>di</strong> lunghezza n. Allora ogni elemento c(x) ∈ C<br />

può essere scritto nella forma c(x) = f(x)g(x) per un opportuno f(x) ∈ Rn[x].<br />

Dimostrazione. Supponiamo per assurdo che c(x) ∈ C non sia multiplo <strong>di</strong><br />

g(x). Poichè g(x) è <strong>di</strong> grado minimo in C, si ha c(x) = q(x)g(x)+r(x) con gr[r(x)] <<br />

gr[g(x)]. Poichè c(x), q(x)g(x) ∈ C e C è lineare, segue che r(x) = c(x)−q(x)g(x) ∈<br />

C. Se r(x) = 0 si ha un assurdo perchè r(x) ha grado minore <strong>di</strong> g(x). <br />

2. Polinomio generatore e matrice generatrice<br />

Definizione 5.2.1. Si definisce polinomio generatore <strong>di</strong> un co<strong>di</strong>ce ciclico C<br />

un polinomio g(x) ∈ C non nullo, monico, <strong>di</strong> grado minimo.<br />

Teorema 5.2.2. Il polinomio generatore <strong>di</strong> un co<strong>di</strong>ce ciclico è unico.<br />

Dimostrazione. Supponiamo per assurdo che g(x) e g1(x) siano due generatori<br />

del co<strong>di</strong>ce ciclico C e dunque monici e <strong>di</strong> grado minimo. Poichè C è un ideale,<br />

segue che il polinomio g(x) − g1(x) appartiene a C e ha grado minore del grado <strong>di</strong><br />

g(x) e g1(x) e ciò è assurdo. <br />

Per la ricerca del polinomio generatore, vengono in aiuto i seguenti teoremi.<br />

Teorema 5.2.3. Se g(x) è il polinomio generatore <strong>di</strong> un co<strong>di</strong>ce ciclico <strong>di</strong><br />

lunghezza n, allora g(x) <strong>di</strong>vide x n − 1.


2. POLINOMIO GENERATORE E MATRICE GENERATRICE 65<br />

Dimostrazione. Supponiamo per assurdo che g(x) non <strong>di</strong>vida x n − 1. Allora<br />

x n − 1 = g(x)q(x) + r(x) con r(x) non nullo e <strong>di</strong> grado minore <strong>di</strong> g(x). Poichè<br />

g(x)q(x) ∈ C e r(x) = −g(x)q(x) (mod(x n − 1)), segue r(x) ∈ C ma ciò è assurdo<br />

perchè g(x) è <strong>di</strong> grado minimo in C. <br />

Teorema 5.2.4. Sia g(x) un polinomio monico <strong>di</strong>visore <strong>di</strong> x n − 1. Allora g(x)<br />

genera il co<strong>di</strong>ce ciclico C = {f(x)g(x), f(x) ∈ Rn[x]}.<br />

Dimostrazione. Sia C = {f(x)g(x), f(x) ∈ Rn[x]}. Basta provare che g(x)<br />

è il polinomio <strong>di</strong> grado minimo appartenente a C. Sia g1(x) ∈ C un polinomio<br />

monico <strong>di</strong> grado minimo, sia cioè un generatore <strong>di</strong> C. Per il teorema precedente<br />

g1(x) è un <strong>di</strong>visore <strong>di</strong> x n − 1. Poichè g1(x) ∈ C si ha g1(x) = f(x)g(x) ∈ Rn[x] e<br />

in Fq[x] <strong>di</strong>venta g1(x) = f(x)g(x) + p(x)(x n − 1). Poichè g(x) <strong>di</strong>vide x n − 1, dalla<br />

relazione precedente segue che g(x) <strong>di</strong>vide g1(x). D’altra parte g1(x) <strong>di</strong>vide g(x)<br />

essendo g1(x) il generatore <strong>di</strong> C. Allora g(x) = g1(x) perchè i due polinomi sono<br />

monici. <br />

Teorema 5.2.5. Sia C un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n generato da g(x) <strong>di</strong><br />

grado n − k. Allora ogni parola c(x) ∈ C si può esprimere in modo unico nella<br />

forma c(x) = f(x)g(x), con f(x) ∈ Rn[x], gr(f(x)) ≤ k − 1.<br />

Dimostrazione. Per la definizione <strong>di</strong> co<strong>di</strong>ce ciclico, ogni parola <strong>di</strong> C è del<br />

tipo c(x) = f(x)g(x). Distinguiamo due casi.<br />

1 ◦ caso. Sia gr(f(x)) ≤ k − 1. Occorre solo provare l’unicità della rappresentazione.<br />

Supponiamo c(x) = f(x)g(x) = f1(x)g(x), si ha [f(x) − f1(x)]g(x) = 0 e<br />

quin<strong>di</strong> necessariamente f(x) = f1(x).<br />

2 ◦ caso. Sia gr(f(x)) ≥ k. Allora gr(c(x)) ≥ n e si ha c(x) = f(x)g(x) =<br />

q(x)(x n − 1) + r(x), con gr(r(x)) ≤ n − 1 oppure gr(r(x)) = 0. Poichè g(x) <strong>di</strong>vide<br />

x n − 1 si ha che g(x) è un <strong>di</strong>visore <strong>di</strong> r(x) ed esiste un unico polinomio f1(x) tale<br />

che r(x) = f1(x)g(x) con gr(f1(x)) ≤ k − 1. Si ha quin<strong>di</strong> c(x) = f(x)g(x) =<br />

q(x)(x n − 1) + f1(x)g(x), che in Rn[x] <strong>di</strong>venta c(x) = f1(x)g(x). <br />

Ricor<strong>di</strong>amo che l’anello Fq[x] è ad ideali principali e, quin<strong>di</strong>, ogni suo ideale J<br />

contiene qualche polinomio<br />

c(x) = c0 + c1(x) + · · · + cm−1x m−1 + cmx m<br />

che lo genera. I generatori <strong>di</strong> J sono, allora, tutti e soli i polinomi che <strong>di</strong>fferiscono<br />

da c(x) per una costante moltiplicativa non nulla e, tra essi, ve ne è uno solo<br />

monico, il polinomio minimo <strong>di</strong> J. Inoltre, se J1 = (c1(x)) e J2 = (c2(x)) sono<br />

ideali <strong>di</strong> Fq[x], risulta J1 ⊆ J2 se e solo se c2(x) <strong>di</strong>vide c1(x). Osserviamo, ora, che<br />

ogni ideale C(x) <strong>di</strong> Rn[x] è un quoziente J/(x n −1), con J ideale <strong>di</strong> Fq[x] contenente<br />

l’ideale ((x n − 1)), e ogni generatore c(x) <strong>di</strong> J, per poter essere un generatore <strong>di</strong>


2. POLINOMIO GENERATORE E MATRICE GENERATRICE 66<br />

C(x) deve <strong>di</strong>videre x n − 1. Tenendo presente 5.2.3, ne segue che il numero degli<br />

(n, k)-co<strong>di</strong>ci ciclici su Fq è uguale al numero <strong>dei</strong> polinomi <strong>di</strong> Fq[x] che <strong>di</strong>vidono<br />

x n − 1, a meno <strong>di</strong> una costante moltiplicativa non nulla.<br />

Se i polinomi fattori irriducibili <strong>di</strong> x n −1 sono h, ossia x n −1 = f1(x)f2(x) · · · fh(x),<br />

allora i co<strong>di</strong>ci ciclici <strong>di</strong> lunghezza n sono 2 h (includendo anche i banali) e si ottengono<br />

scegliendo come polinomio generatore uno qualsiasi <strong>dei</strong> 2 h fattori <strong>di</strong> x n − 1.<br />

Poichè i co<strong>di</strong>ci banali sono due, quello contenente la sola parola nulla e Rn[x], si<br />

ha che i co<strong>di</strong>ci ciclici non banali sono 2 h − 2. Quin<strong>di</strong> c’è un modo automatico <strong>di</strong><br />

costruire tutti i co<strong>di</strong>ci ciclici <strong>di</strong> data lunghezza una volta che si scompone x n − 1<br />

in fattori irriducibili.<br />

Nel seguito consideriamo co<strong>di</strong>ci ciclici <strong>di</strong> lunghezza n su Fq = GF (q) <strong>di</strong><br />

caratteristica p, q = p t , con n e q primi fra loro, cioè MCD(n, q) = 1.<br />

Questo perchè si vuole che i fattori irriducibili in cui si scompone x n − 1 sia-<br />

no <strong>di</strong>stinti. Se fosse MCD(n, q) = pr = 1, si avrebbe n = apr con r intero e<br />

MCD(a, q) = 1 e sarebbe xn − 1 = (xa − 1) pr.<br />

Sotto l’ipotesi MCD(n, q) = 1 i<br />

fattori irriducibili nei quali si scompone x n − 1 sono tutti <strong>di</strong>stinti.<br />

Esempio 5.2.6. Costruiamo i co<strong>di</strong>ci ciclici binari <strong>di</strong> lunghezza 3. Fissato x 3 +1,<br />

è R3[x] = F2[x]/(x 3 + 1). Poichè risulta x 3 + 1 = (x + 1)(x 2 + x + 1), oltre ai co<strong>di</strong>ci<br />

banali ci sono 2 h − 2 = 2 2 − 2 = 2 co<strong>di</strong>ci ciclici binari <strong>di</strong> lunghezza 3.<br />

Se g(x) = (1 + x) il co<strong>di</strong>ce C da esso generato è<br />

C = {0; 1 + x; 1 + x 2 ; x + x 2 }<br />

perchè gli elementi <strong>di</strong> C sono i prodotti <strong>di</strong> g(x) per i polinomi <strong>di</strong> R3[x] <strong>di</strong> grado<br />

minore o uguale a 1, ossia g(x) per i polinomi 0; 1; x; 1 + x.<br />

Se consideriamo come polinomio generatore g(x) = 1 + x + x 2 , si ottiene il<br />

co<strong>di</strong>ce<br />

C1 = {0; 1 + x + x 2 }<br />

I co<strong>di</strong>ci C e C1, come terne (c0 c1 c2) <strong>di</strong> elementi <strong>di</strong> GF (2), sono rappresentati da:<br />

C = {(0 0 0), (1 1 0), (1 0 1), (0 1 1)} e C1 = {( 0 0 0), (1 1 1)}<br />

Esempio 5.2.7. Il polinomio x 4 − 1 ∈ F3[x] ha la seguente decomposizione in<br />

fattori irriducibili:<br />

x 4 − 1 = (x − 1)(x + 1)(x 2 + 1)<br />

e quin<strong>di</strong> ci sono polinomi a coefficienti in F3 che <strong>di</strong>vidono x 4 − 1, sono<br />

1; x − 1; x + 1; x 2 + 1; (x − 1)(x + 1); (x − 1)(x 2 + 1); (x + 1)(x 2 + 1); x 4 − 1.<br />

Esistono dunque otto co<strong>di</strong>ci ciclici <strong>di</strong> lunghezza 4 su F3 (compresi i due banali).


2. POLINOMIO GENERATORE E MATRICE GENERATRICE 67<br />

Esempio 5.2.8. Determiniamo tutti i possibili co<strong>di</strong>ci ciclici binari <strong>di</strong> lunghezza<br />

7. Questi co<strong>di</strong>ci sono sottospazi <strong>di</strong> F 7 2 . Poniamo f(x) = x 7 − 1. In F2 il polinomio<br />

f(x) si fattorizza in fattori irriducibili come:<br />

x 7 − 1 = (x + 1)(x 3 + x 2 + 1)(x 3 + x + 1)<br />

perciò i <strong>di</strong>visori monici <strong>di</strong> f(x) sono tutti e soli i seguenti:<br />

g1(x) = 1; g2(x) = x + 1; g3(x) = x 3 + x 2 + 1; g4(x) = x 3 + x + 1;<br />

g5(x) = (x + 1)(x 3 + x 2 + 1); g6(x) = (x + 1)(x 3 + x + 1);<br />

g7(x) = (x 3 + x 2 + 1)(x 3 + x + 1); g8(x) = f(x).<br />

Ne segue che F 7 2 contiene esattamente otto sottospazi ciclici.<br />

Ad esempio, g6(x) genera il sottospazio ciclico<br />

C = {0000000; 1011100; 0101110; 0010111; 1001011; 1100101; 1110010; 0111001}<br />

Analogamente g7(x) genera il co<strong>di</strong>ce:<br />

C = {0000000; 1111111}.<br />

Esempio 5.2.9. Si voglia costruire un (15, 9)-co<strong>di</strong>ce ciclico binario. Poichè<br />

g(x) = (1 + x + x2 )(1 + x + x4 ) è un <strong>di</strong>visore monico <strong>di</strong> x15 − 1, si ha che g(x)<br />

genera un sottospazio ciclico <strong>di</strong> <strong>di</strong>mensione 9 in F 15<br />

2 .


2. POLINOMIO GENERATORE E MATRICE GENERATRICE 68<br />

Tavola della Fattorizzazione <strong>di</strong> x n − 1 su GF (2) per n ≤ 25.<br />

n Fattorizzazione<br />

1 1 + x<br />

2 (1 + x) 2<br />

3 (1 + x)(1 + x + x 2 )<br />

4 (1 + x) 4<br />

5 (1 + x)(1 + x + x 2 + x 3 + x 4 )<br />

6 (1 + x) 2 (1 + x + x 2 ) 2<br />

7 (1 + x)(1 + x + x 3 )(1 + x 2 + x 3 )<br />

8 (1 + x) 8<br />

9 (1 + x)(1 + x + x 2 )(1 + x 3 + x 6 )<br />

10 (1 + x) 2 (1 + x + x 2 + x 3 + x 4 ) 2<br />

11 (1 + x)(1 + x + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 + x 8 + x 9 + x 10 )<br />

12 (1 + x) 4 (1 + x + x 2 ) 4<br />

13 (1 + x)(1 + x + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 + x 8 + x 9 + x 10 + x 11 + x 12 )<br />

14 (1 + x) 2 (1 + x + x 3 )(1 + x 2 + x 3 ) 2<br />

15 (1 + x)(1 + x + x 2 )(1 + x + x 2 + x 3 + x 4 )(1 + x + x 4 )(1 + x 3 + x 4 )<br />

16 (1 + x) 16<br />

17 (1 + x)(1 + x + x 2 + x 4 + x 6 + x 7 + x 8 )(1 + x 3 + x 4 + x 5 + x 8 )<br />

18 (1 + x) 2 (1 + x + x 2 ) 2 (1 + x 3 + x 6 ) 2<br />

19 (1 + x)(1 + x + x 2 + x 3 + x 4 + · · · + x 16 + x 17 + x 18 )<br />

20 (1 + x) 4 (1 + x + x 2 + x 3 + x 4 ) 4<br />

21 (1 + x)(1 + x + x 2 )(1 + x 2 + x 3 )(1 + x + x 3 )(1 + x 2 + x 4 + x 5 + x 6 )(1 + x+<br />

+x 2 + x 4 + x 6 )<br />

22 (1 + x) 2 (1 + x + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 + x 8 + x 9 + x 10 ) 2<br />

23 (1 + x)(1 + x + x 5 + x 6 + x 7 + x 9 + x 11 )(1 + x 2 + x 4 + x 5 + x 6 + x 10 + x 11 )<br />

24 (1 + x) 8 (1 + x + x 2 ) 8<br />

25 (1 + x)(1 + x + x 2 + x 3 + x 4 )(1 + x 5 + x 10 + x 15 + x 20 )<br />

Matrice Generatrice<br />

Un co<strong>di</strong>ce ciclico è lineare e pertanto ad esso si può associare una matrice<br />

generatrice. Illustriamo due meto<strong>di</strong> per costruirla.<br />

Primo metodo - Come mostra il prossimo teorema, la forma naturale per<br />

la matrice generatrice <strong>di</strong> un co<strong>di</strong>ce ciclico è quella detta ′′ a scala ′′ ossia ottenuta<br />

considerando k scorrimenti ciclici del vettore corrispondente ai coefficienti del polinomio<br />

generatore. In particolare, la sottomatrice quadrata ottenuta considerando<br />

le prime k colonne è triangolare superiore e ha determinante non nullo. Pertanto,<br />

le prime k posizioni sono posti <strong>di</strong> informazione e bastano a ricostruire, in assenza


2. POLINOMIO GENERATORE E MATRICE GENERATRICE 69<br />

<strong>di</strong> errori, la parola originariamente trasmessa. Questa forma ciclica non risulta<br />

quasi mai standard e pertanto la co<strong>di</strong>fica non è ′′ sistematica ′′ .<br />

Teorema 5.2.10. Sia C un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n generato dal polinomio<br />

monico g(x) = g0 + g1x + · · · + gn−k−1x n−k−1 + x n−k . Allora una sua matrice<br />

generatrice è<br />

⎛<br />

g(x)<br />

xg(x)<br />

G =<br />

⎜<br />

⎝<br />

.<br />

x k−1 g(x)<br />

⎞<br />

⎟<br />

⎠ =<br />

⎛<br />

⎜<br />

⎝<br />

g0 g1 · · · · · · gn−k−1 1 0 · · · 0<br />

0 g0 · · · · · · · · · gn−k−1 1 · · · 0<br />

. . . . . . . . .<br />

0 0 · · · g0 · · · · · · · · · gn−k−1 1<br />

Dimostrazione. G ha rango k perchè le righe sono linearmente in<strong>di</strong>pendenti,<br />

infatti è una matrice ridotta per righe e non c’è la riga nulla. Dobbiamo provare che<br />

ogni parola <strong>di</strong> C si può esprimere come combinazione lineare <strong>dei</strong> vettori riga <strong>di</strong> G.<br />

Dalla definizione <strong>di</strong> co<strong>di</strong>ce ciclico segue che un elemento c = (c0, c1, . . . , cn−1) ∈ F n q<br />

sta in C se e solo se il polinomio c(x) = c0 + c1x + . . . + cn−1x n−1 ad esso associato<br />

è della forma c(x) = g(x)f(x) mod(x n − 1), con f(x) ∈ Rn[x], gr(f(x)) ≤ k − 1,<br />

ossia se e solo se<br />

c(x) = g(x)(f0 + f1x + . . . + fk−1x k−1 ) =<br />

= f0g(x) + f1xg(x) + . . . + fk−1x k−1 g(x) =<br />

= f0(g0, g1, . . . , 1, . . . , 0)+<br />

+f1(0, g0, g1, . . . , 1, . . . , 0)+<br />

+f2(0, 0, g0, . . . , 1, . . . , 0)+<br />

+ . . . . . . +<br />

+fk−1(0, 0, . . . , g0, . . . , 1).<br />

Segue che una qualsiasi parola c ∈ C si può esprimere come combinazione lineare<br />

delle righe <strong>di</strong> G e pertanto G è una matrice generatrice <strong>di</strong> C. <br />

Corollario 5.2.11. Un co<strong>di</strong>ce ciclico C avente come polinomio generatore un<br />

polinomio <strong>di</strong> grado n − k, ha <strong>di</strong>mensione k e pertanto è un (n, k)-co<strong>di</strong>ce.<br />

Secondo metodo - Per un co<strong>di</strong>ce ciclico è sempre possibile costruire una matrice<br />

generatrice in una forma standard, detta ′′ antisistematica ′′ , particolarmente<br />

comoda in fase <strong>di</strong> implementazione <strong>di</strong> algoritmi <strong>di</strong> deco<strong>di</strong>fica perchè una copia<br />

della parola originale si trova nelle ultime k posizioni trasmesse.<br />

Teorema 5.2.12. Sia C un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n generato dal polinomio<br />

g(x) con gr(g(x)) = (n − k). Per C è sempre possibile determinare una matrice<br />

generatrice della forma G = (A|Ik).<br />

⎞<br />

⎟<br />


2. POLINOMIO GENERATORE E MATRICE GENERATRICE 70<br />

Dimostrazione.<br />

• Divi<strong>di</strong>amo i monomi x i per g(x), con n − k ≤ i ≤ n − 1, si ottiene<br />

x i = qi(x)g(x) + ri(x)<br />

dove ri(x) hanno grado minore <strong>di</strong> n − k oppure sono nulli.<br />

• Consideriamo una matrice avente come righe i coefficienti delle parole<br />

pi(x) = qi(x)g(x) = −ri(x)+x i or<strong>di</strong>nate per i = n−k, n−k +1, . . . , n−1,<br />

inoltre or<strong>di</strong>niamo ogni polinomio in senso crescente. Se<br />

si ha<br />

ri(x) = r0,i + r1,ix + · · · + rn−k−1,ix n−k−1<br />

pi(x) = −ri(x) + x i = −r0,i − r1,ix − · · · − rn−k−1,ix n−k−1 + x i ∈ C<br />

• La matrice cercata è la matrice <strong>di</strong> tipo k × n<br />

⎛<br />

−r0,n−k<br />

⎜ −r0,n−k+1<br />

G = ⎜<br />

⎝<br />

.<br />

−r1,n−k<br />

−r1,n−k+1<br />

.<br />

· · ·<br />

· · ·<br />

.<br />

−rn−k−1,n−k<br />

−rn−k−1,n−k+1<br />

.<br />

1<br />

0<br />

.<br />

0<br />

1<br />

.<br />

· · ·<br />

· · ·<br />

.<br />

⎞<br />

0<br />

0 ⎟<br />

.<br />

⎠<br />

−r0,n−1 −r1,n−1 · · · −rn−k−1,n−1 0 0 · · · 1<br />

Ogni riga <strong>di</strong> G è una parola del co<strong>di</strong>ce C generato da g(x), inoltre G ha rango k e<br />

quin<strong>di</strong> le righe sono linearmente in<strong>di</strong>pendenti. G è dunque una matrice generatrice<br />

<strong>di</strong> C ed è del tipo G = (A | Ik) in cui le righe <strong>di</strong> A corrispondono a −ri(x), n−k ≤<br />

i ≤ n − 1. <br />

Esempio 5.2.13. Sia C un co<strong>di</strong>ce ciclico binario <strong>di</strong> lunghezza 7 generato dal<br />

polinomio g(x) = 1 + x + x3 . Trovare la matrice generatrice <strong>di</strong> C applicando sia il<br />

primo metodo che il secondo metodo.<br />

Soluzione - Poichè gr(g(x)) = n − k, risulta 3 = 7 − 4 e pertanto C è un<br />

(7, 4)-co<strong>di</strong>ce.<br />

Primo metodo<br />

G =<br />

⎛<br />

⎜<br />

⎝<br />

g(x)<br />

xg(x)<br />

x 2 g(x)<br />

x 3 g(x)<br />

⎞<br />

⎟<br />

⎠ =<br />

⎛<br />

⎜<br />

⎝<br />

1 1 0 1 0 0 0<br />

0 1 1 0 1 0 0<br />

0 0 1 1 0 1 0<br />

0 0 0 1 1 0 1<br />

Secondo metodo<br />

Poichè gr(g(x)) = 3, <strong>di</strong>vi<strong>di</strong>amo per g(x) i monomi x 3 , x 4 , x 5 , x 6 . Si ottiene<br />

x 3 = (x 3 + x + 1) + (x + 1)<br />

x 4 = x(x 3 + x + 1) + (x 2 + x)<br />

x 5 = (x 2 + 1)(x 3 + x + 1) + (x 2 + x + 1)<br />

x 6 = (x 3 + x + 1)(x 3 + x + 1) + (x 2 + 1)<br />

⎞<br />

⎟<br />


3. POLINOMIO DI CONTROLLO E MATRICE DI CONTROLLO 71<br />

Allora i polinomi qi(x)g(x) sono parole <strong>di</strong> C ossia sono parole <strong>di</strong> C i polinomi<br />

1(x 3 + x + 1) = 1 + x + x 3 ; x(x 3 + x + 1) = x + x 2 + x 4 ; (x 2 + 1)(x 3 + x + 1) =<br />

1 + x + x 2 + x 5 ; (x 3 + x + 1)(x 3 + x + 1) = 1 + x 2 + x 6 .<br />

Considerando i polinomi resto, con il secondo metodo, si ottiene la matrice:<br />

⎛<br />

⎞<br />

−1 −1 0 1 0 0 0<br />

⎜<br />

¯G = ⎜ 0 −1 −1 0 1 0 0 ⎟<br />

⎝ −1 −1 −1 0 0 1 0 ⎠<br />

−1 0 −1 0 0 0 1<br />

3. Polinomio <strong>di</strong> controllo e matrice <strong>di</strong> controllo<br />

In un co<strong>di</strong>ce ciclico C, oltre al polinomio generatore g(x) c’è un altro polinomio<br />

<strong>di</strong> Rn[x] che in<strong>di</strong>vidua univocamente il co<strong>di</strong>ce. Questo polinomio gioca un ruolo<br />

analogo a quello della matrice <strong>di</strong> controllo per i co<strong>di</strong>ci lineari.<br />

Supponiamo che sia x n −1 = f1(x)f2(x) · · · fs(x) e sia g(x) un <strong>di</strong>visore <strong>di</strong> x n −1.<br />

Sia x n −1 = g(x)h(x) nell’anello Fq[x] e quin<strong>di</strong> g(x)h(x) = 0 in Rn[x]. Poichè h(x)<br />

è un <strong>di</strong>visore <strong>di</strong> x n − 1, esso genera un co<strong>di</strong>ce ciclico.<br />

Se g(x) = g0 + g1x + . . . + gn−k−1x n−k−1 + x n−k è <strong>di</strong> grado n − k, allora h(x)<br />

ha grado k ed è del tipo h(x) = x k + hk−1x k−1 + . . . + h1x + h0.<br />

Teorema 5.3.1. Una parola c appartiene al co<strong>di</strong>ce ciclico C generato da g(x)<br />

se e solo se c(x)h(x) = 0 in Rn[x], con g(x)h(x) = x n − 1 in Fq[x].<br />

Dimostrazione. Se c è una parola <strong>di</strong> C, allora il polinomio c(x) associato a<br />

c è un multiplo <strong>di</strong> g(x), cioè c(x) = p(x)g(x) da cui c(x)h(x) = p(x)g(x)h(x) =<br />

p(x)(x n − 1) in Fq[x]. Ciò significa c(x)h(x) = 0 in Rn[x].<br />

Viceversa, supponiamo c(x)h(x) = 0 in Rn[x]. Ciò significa che in Fq[x] è<br />

c(x)h(x) = p(x)(x n − 1) = p(x)g(x)h(x) da cui segue c(x) = p(x)g(x) e quin<strong>di</strong><br />

c(x) è una parola del co<strong>di</strong>ce. <br />

Definizione 5.3.2. Sia C ⊆ F n q un co<strong>di</strong>ce ciclico generato da g(x). Si definisce<br />

polinomio <strong>di</strong> controllo <strong>di</strong> C il polinomio h(x) tale che g(x)h(x) = (x n − 1) in<br />

Fq[x] ossia g(x)h(x) = 0 in Rn[x].<br />

Se <strong>di</strong>m C = k ( ossia gr(g(x)) = n−k e gr(h(x)) = k ) allora il co<strong>di</strong>ce generato<br />

da h(x) ha <strong>di</strong>mensione n − k che è la stessa <strong>di</strong>mensione del co<strong>di</strong>ce duale C ⊥ , ma in<br />

generale non coincide con esso. Questo perchè l’essere c(x)h(x) = 0 in Rn[x] non<br />

equivale all’ortogonalità <strong>dei</strong> vettori c ed h associati a c(x) ed h(x), rispettivamente.


3. POLINOMIO DI CONTROLLO E MATRICE DI CONTROLLO 72<br />

Però, in ogni caso, il co<strong>di</strong>ce generato da h(x) è equivalente a C ⊥ , come mostra il<br />

prossimo teorema.<br />

Teorema 5.3.3. Sia C un (n, k)-co<strong>di</strong>ce ciclico generato da g(x) ed avente come<br />

polinomio <strong>di</strong> controllo<br />

h(x) = h0 + h1x + . . . + hkx k .<br />

Allora la matrice <strong>di</strong> tipo (n − k) × n<br />

⎛<br />

hk<br />

⎜ 0<br />

H = ⎜<br />

⎝<br />

.<br />

hk−1<br />

hk<br />

.<br />

· · ·<br />

hk−1<br />

.<br />

· · ·<br />

· · ·<br />

.<br />

· · ·<br />

· · ·<br />

.<br />

h0<br />

0<br />

.<br />

0<br />

h0<br />

.<br />

· · ·<br />

· · ·<br />

.<br />

0<br />

0<br />

.<br />

0 0 0 · · · hk hk−1 · · · · · · h0<br />

è una matrice <strong>di</strong> controllo per C. Inoltre C ⊥ è un co<strong>di</strong>ce ciclico generato dal<br />

polinomio<br />

¯h = hk + hk−1x + . . . + h0x k .<br />

Dimostrazione. Le righe <strong>di</strong> H sono evidentemente in<strong>di</strong>pendenti. Sia G la<br />

matrice generatrice <strong>di</strong> C in<strong>di</strong>viduata dall’unico polinomio generatore c(x) per cui<br />

è c(x)h(x) = x n − 1. In c(x)h(x) sono allora nulli i coefficienti <strong>di</strong> x s , per ogni<br />

s = 0, n, e ciò implica che GH t = 0, cioè H è una matrice <strong>di</strong> controllo <strong>di</strong> C.<br />

Osserviamo ora che risulta<br />

¯h = x k h(x −1 ),<br />

¯c(x) = cn−k + cn−k−1x + cn−k−2x 2 + · · · + c1x n−k−1 + c0x n−k = x n−k c(x −1 ),<br />

1 − x n = x n (x −n − 1) = x n c(x −1 )h(x −1 ) = x k h(x −1 )x n−k c(x −1 ) = ¯ h(x)¯c(x),<br />

cioè ¯ h(x) <strong>di</strong>vide x n − 1. Dalla 5.3.1 segue allora che C ⊥ è ciclico con polinomio<br />

generatore ¯ h(x) e il teorema è completamente <strong>di</strong>mostrato.<br />

<br />

Definizione 5.3.4. Sia h(x) = h0 + h1x + . . . + hkx k polinomio <strong>di</strong> controllo<br />

del (n, k)-co<strong>di</strong>ce ciclico C. Si chiama polinomio reciproco <strong>di</strong> h(x) il polinomio<br />

¯h = hk + hk−1x + . . . + h0x k .<br />

Esempio 5.3.5. Sia C un co<strong>di</strong>ce ciclico binario <strong>di</strong> lunghezza 7 generato da<br />

g(x) = 1 + x + x 3 . Si ha:<br />

(1) C ha <strong>di</strong>mensione 4.<br />

(2) Il polinomio <strong>di</strong> controllo è h(x) = x7 +1<br />

g(x) = 1 + x + x2 + x4 ; esso genera<br />

un co<strong>di</strong>ce ciclico C1 <strong>di</strong> <strong>di</strong>mensione 3.<br />

⎞<br />

⎟<br />


4. SCHEMI DI CODIFICA 73<br />

(3) Una matrice generatrice <strong>di</strong> C (costruita con il primo metodo, teorema<br />

5.2.10) è<br />

⎛<br />

1<br />

⎜<br />

G = ⎜ 0<br />

⎝ 0<br />

1<br />

1<br />

0<br />

0<br />

1<br />

1<br />

1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

⎞<br />

0<br />

0 ⎟<br />

0 ⎠<br />

0 0 0 1 1 0 1<br />

(4) Una matrice <strong>di</strong> controllo <strong>di</strong> C è<br />

⎛<br />

1 0 1<br />

H = ⎝ 0 1 0<br />

1<br />

1<br />

1<br />

1<br />

0<br />

1<br />

⎞<br />

0<br />

0 ⎠<br />

0 0 1 0 1 1 1<br />

(5) Il polinomio reciproco <strong>di</strong> h(x) è il polinomio ¯ h(x) = x k h( 1<br />

x ) = x4 (1 + 1<br />

1<br />

x2 + 1<br />

x4 ) = x4 + x3 + x2 + 1.<br />

(6) Determiniamo una matrice generatrice <strong>di</strong> C nella forma standard G ′ =<br />

(A|Ik), utilizzando il secondo metodo (teorema 5.2.12). Le righe <strong>di</strong> G ′<br />

sono date dai coefficienti <strong>dei</strong> polinomi −ri(x)+xi , dove ri(x) è il resto della<br />

<strong>di</strong>visione <strong>di</strong> xi per g(x), essendo n − k ≤ i ≤ n − 1. La prima, la seconda,<br />

la terza, la quarta riga <strong>di</strong> G ′ sono date rispettivamente dai coefficienti <strong>dei</strong><br />

polinomi (x + 1) + x3 , (x2 + x) + x4 , (x2 + x + 1) + x5 , (x2 + 1) + x6 .<br />

Risulta pertanto:<br />

⎛<br />

G ′ =<br />

⎜<br />

⎝<br />

1 1 0 1 0 0 0<br />

0 1 1 0 1 0 0<br />

1 1 1 0 0 1 0<br />

1 0 1 0 0 0 1<br />

⎞<br />

⎟<br />

⎠ = (A|I4).<br />

(7) Se la matrice generatrice <strong>di</strong> C è G ′ allora la matrice <strong>di</strong> controllo è<br />

H = (I3| − A t ⎛<br />

⎞<br />

1 0 0 1 0 1 1<br />

) = ⎝ 0 1 0 1 1 1 0 ⎠<br />

0 0 1 0 1 1 1<br />

4. Schemi <strong>di</strong> co<strong>di</strong>fica<br />

Sia C un (n, k)-co<strong>di</strong>ce ciclico generato da g(x) <strong>di</strong> grado n − k.<br />

Primo schema <strong>di</strong> co<strong>di</strong>fica<br />

Al messaggio m = (m0, m1, . . . , mk−1) associamo il polinomio m(x) = m0 +<br />

m1x + . . . + mk−1x k−1 . Per 5.2.5 il messaggio m(x) può essere co<strong>di</strong>ficato nella<br />

parola c(x) = m(x)g(x).<br />

Secondo schema <strong>di</strong> co<strong>di</strong>fica<br />

x +


4. SCHEMI DI CODIFICA 74<br />

Per questo secondo schema, illustreremo due mo<strong>di</strong> <strong>di</strong> co<strong>di</strong>fica: il primo utilizza<br />

la matrice generatrice standard mentre il secondo opera solo con polinomi ossia<br />

non occorre scrivere la matrice generatrice. In entrambi i casi i posti <strong>di</strong><br />

informazione sono gli ultimi k posti ed è importante notare che in questi posti<br />

ritroviamo inalterati i k simboli <strong>di</strong> informazione del messaggio da co<strong>di</strong>ficare. Questo<br />

fatto assicura che per l’operazione <strong>di</strong> co<strong>di</strong>fica è sufficiente un algoritmo che<br />

determini le componenti <strong>dei</strong> soli n − k posti <strong>di</strong> controllo.<br />

1 ◦ modo - Sia m = (m0, m1, . . . , mk−1) il messaggio da co<strong>di</strong>ficare.<br />

Sia G = (A|Ik) la matrice generatrice standard <strong>di</strong> tipo k × n del (n, k)-co<strong>di</strong>ce<br />

C ottenuta a partire dal polinomio generatore g(x). Una matrice <strong>di</strong> questo tipo<br />

si può sempre costruire come illustrato nel paragrafo 2 <strong>di</strong> questo capitolo (ve<strong>di</strong><br />

teorema 5.2.12).<br />

• Si co<strong>di</strong>fica il messaggio m come c = mG.<br />

Poichè G è standard, si ha c = (c0, . . . , cn−k−1, m0, . . . mk−1) e dunque i simboli<br />

<strong>di</strong> informazione m0, m1, . . . mk−1 rimangono inalterati e occupano le ultime k<br />

posizioni mentre i simboli <strong>di</strong> controllo sono i primi n − k.<br />

2 ◦ modo - Sia m = (m0, m1, . . . , mk−1) il messaggio da co<strong>di</strong>ficare e sia m(x) =<br />

m0 + m1x + · · · + mk−1x k−1 il polinomio ad esso associato. Divi<strong>di</strong>amo il polinomio<br />

x n−k m(x) per il polinomio generatore g(x); si ottiene x n−k m(x) = q(x)g(x) + r(x)<br />

da cui c(x) = q(x)g(x) = −r(x) + x n−k m(x).Consideriamo c(x) or<strong>di</strong>nato secondo<br />

potenze crescenti,<br />

c(x) = −r0 − r1x − r2x 2 − . . . − rn−k−1x n−k−1 + mn−kx n−k + mn−1x n−1 .<br />

• Il messaggio m viene co<strong>di</strong>ficato nella parola<br />

c = (−r0, −r1, . . . , −rn−k−1, mn−k, . . . , mn−1).<br />

che ha i k simboli <strong>di</strong> informazione m0, m1, . . . mk−1 negli ultimi k posti e gli n − k<br />

simboli <strong>di</strong> controllo, che sono i coefficienti <strong>di</strong> −r(x), nelle prime n − k posizioni.<br />

Esempio 5.4.1. Sia C un co<strong>di</strong>ce ciclico binario <strong>di</strong> lunghezza 7 generato da<br />

g(x) = 1 + x + x 3 . Costruiamo la matrice generatrice standard come descritto nel<br />

teorema 5.2.12. Con l’algoritmo euclideo determiniamo:<br />

x 3 = 1 · (x 3 + x + 1) + (1 + x)<br />

x 4 = x · (x 3 + x + 1) + (x + x 2 )<br />

x 5 = (x 2 + 1) · (x 3 + x + 1) + (1 + x + x 2 )<br />

x 6 = (x 3 + x + 1) · (x 3 + x + 1) + (1 + x 2 )


4. SCHEMI DI CODIFICA 75<br />

Si ottiene così la seguente matrice generatrice (ve<strong>di</strong> anche esempio 5.2.13):<br />

⎛<br />

⎞<br />

⎛ ⎞<br />

1 1 0 1 0 0 0<br />

1 1 0<br />

⎜<br />

G = (A|Ik) = ⎜ 0 1 1 0 1 0 0 ⎟<br />

⎜<br />

⎟<br />

⎝ 1 1 1 0 0 1 0 ⎠ ; A = ⎜ 0 1 1 ⎟<br />

⎝ 1 1 1 ⎠<br />

1 0 1 0 0 0 1<br />

1 0 1<br />

Le righe <strong>di</strong> A corrispondono ai vettori <strong>dei</strong> coefficienti <strong>dei</strong> polinomi resto 1 +<br />

x; x + x 2 ; 1 + x + x 2 ; 1 + x 2 .<br />

Sia dato il messaggio m = (1110) e co<strong>di</strong>fichiamo utilizzando il secondo schema.<br />

• Co<strong>di</strong>fica con il secondo schema, 1 ◦ modo.<br />

Per co<strong>di</strong>ficare m utilizziamo la matrice standard G. Il messaggio viene<br />

co<strong>di</strong>ficato in c = mG = (0101110).<br />

• Co<strong>di</strong>fica con il secondo schema, 2 ◦ modo.<br />

Ad m si associa il polinomio m(x) = 1 + x + x 2 . Si considera il polinomio<br />

x n−k m(x) e si <strong>di</strong>vide per g(x); nel nostro caso si ottiene x 3 (1 + x + x 2 ) =<br />

(x + x 2 )(1 + x + x 3 ) + x, e pertanto la parola associata ad m(x) è c(x) =<br />

x n−k m(x)−r(x) = x 3 (1+x+x 2 )−x = x+x 3 +x 4 +x 5 , ossia c = (0101110).<br />

Algoritmo <strong>di</strong> Co<strong>di</strong>fica<br />

Descriviamo un algoritmo <strong>di</strong> co<strong>di</strong>fica per un (n, k)-co<strong>di</strong>ce ciclico basato su quanto<br />

esposto nel secondo schema, 2 ◦ modo (ve<strong>di</strong> [3] pag. 114.)<br />

DATI<br />

• Un (n, k)-co<strong>di</strong>ce ciclico C con polinomio generatore g(x) = g0 +g1x+· · ·+<br />

gn−k−1x n−k−1 + x n−k .<br />

• Un messaggio m = (m0 m1 · · · mk−1).<br />

DETERMINARE Un vettore c = (c0 c1 . . . cn−k−1) <strong>di</strong> simboli <strong>di</strong> controllo tale che<br />

m sia co<strong>di</strong>ficato in (c0 c1 . . . cn−k−1 m0 m1 . . . mk−1) ∈ C.<br />

Posto g = (g0 g1 . . . gn−k−1) l’algoritmo è il seguente.<br />

(1) Si pone c 0 j = 0 per 0 ≤ j ≤ n − k − 1.<br />

(2) Per ogni i, 1 ≤ i ≤ k, proce<strong>di</strong>amo come segue:<br />

1◦ caso : mk−i = c (i−1)<br />

n−k−1 . Allora si pone cij = c (i−1)<br />

j−1<br />

e c i 0 = 0.<br />

per n − k − 1 ≤ j ≤ 1<br />

2 ◦ caso : mk−i = c (i−1)<br />

n−k−1 . Allora si pone ci j = c (i−1)<br />

j−1 + gj per n − k − 1 ≤<br />

j ≤ 1 e c i 0 = g0.<br />

(3) Il vettore cercato è il vettore ottenuto per i = k.<br />

Il grande vantaggio <strong>di</strong> questo algoritmo è che non si richiede <strong>di</strong> memorizzare<br />

tutta la matrice generatrice G = (A|Ik) e nemmeno <strong>di</strong> calcolare a priori i polinomi<br />

ri(x).


4. SCHEMI DI CODIFICA 76<br />

Esempio 5.4.2. Consideriamo il (7, 4)-co<strong>di</strong>ce ciclico binario C generato da<br />

g(x) = 1+x+x 3 (ve<strong>di</strong> esempio 5.3.5 ed esempio 5.4.1). Sia m = (m0 m1 m2 m3) =<br />

(1 0 1 1) il messaggio da trasmettere. Determinare un vettore c = (c0 c1 c2) <strong>di</strong><br />

simboli <strong>di</strong> controllo tale che p = (c0 c1 c2 m0 m1 m2 m3) ∈ C.<br />

Soluzione - Consideriamo g = (g0 g1 g2) = (1 1 0) e calcoliamo<br />

i c i 0 c i 1 c i 2 m4−i<br />

0 0 0 0<br />

1 1 1 0 m3 = 1<br />

2 1 0 1 m2 = 1<br />

3 1 0 0 m1 = 0<br />

4 1 0 0 m0 = 1<br />

Primo passo i = 1: (c 0 0 c 0 1 c 0 2) = (0 0 0) e m3 = 1 = c 0 2 = 0 allora<br />

c 1 2 = c 0 1 + g2 = 0 + 0 = 0<br />

c 1 1 = c 0 0 + g1 = 0 + 1 = 1<br />

c 1 0 = g0 = 1<br />

Secondo passo i = 2: (c 1 0 c 1 1 c 1 2) = (1 1 0) e m2 = 1 = c 1 2 = 0 allora<br />

c 2 2 = c 1 1 + g2 = 1 + 0 = 1<br />

c 2 1 = c 1 0 + g1 = 1 + 1 = 0<br />

c 2 0 = g0 = 1<br />

Terzo passo i = 3: (c 2 0 c 2 1 c 2 2) = (1 0 1) e m1 = 0 = c 2 2 = 1 allora<br />

c 3 2 = c 2 1 + g2 = 0 + 0 = 0<br />

c 3 1 = c 2 0 + g1 = 1 + 1 = 0<br />

c 3 0 = g0 = 1<br />

Quarto passo i = 4: (c 3 0 c 3 1 c 3 2) = (1 0 0) e m0 = 1 = c 3 2 = 0 allora<br />

c 4 2 = c 3 1 + g2 = 0 + 0 = 0<br />

c 4 1 = c 3 0 + g1 = 1 + 1 = 0<br />

c 4 0 = g0 = 1<br />

Il vettore cercato è (1 0 0) e pertanto il messaggio viene co<strong>di</strong>ficato in<br />

p = (1 0 0 1 0 1 1) ∈ C.


5. DECODIFICA 77<br />

Esempio 5.4.3. Sia g(x) = 1 + x 4 + x 6 + x 7 + x 8 il polinomio generatore <strong>di</strong> un<br />

(15, 7)-co<strong>di</strong>ce ciclico binario C. Per co<strong>di</strong>ficare il messaggio<br />

m = (m0 m1 m2 m3 m4 m5 m6) = (1 0 1 1 0 1 1)<br />

consideriamo g = (g0 g1 g2 g3 g4 g5 g6 g7) = (1 0 0 0 1 0 1 1) e calcoliamo<br />

i c i 0 c i 1 c i 2 c i 3 c i 4 c i 5 c i 6 c i 7 m7−i<br />

0 0 0 0 0 0 0 0 0<br />

1 1 0 0 0 1 0 1 1 1 = m6<br />

2 0 1 0 0 0 1 0 1 1 = m5<br />

3 1 0 1 0 1 0 0 1 0 = m4<br />

4 0 1 0 1 0 1 0 0 1 = m3<br />

5 1 0 1 0 0 0 0 1 1 = m2<br />

6 1 1 0 1 1 0 1 1 0 = m1<br />

7 0 1 1 0 1 1 0 1 1 = m0<br />

Il vettore cercato è (0 1 1 0 1 1 0 1) e pertanto il messaggio m = (1 0 1 1 0 1 1) è<br />

co<strong>di</strong>ficato in p = (0 1 1 0 1 1 0 1 1 0 1 1 0 1 1) ∈ C.<br />

Come si è visto, per la co<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce ciclico è necessario moltiplicare<br />

e/o <strong>di</strong>videre polinomi a coefficienti in GF (q). Per fare questo vengono in aiuto<br />

degli apparecchi elettronici chiamati registri a scorrimento lineare ( linear shift<br />

register). Per la loro descrizione si rinvia a [1] pag. 206 − 215.<br />

5. Deco<strong>di</strong>fica<br />

Se il co<strong>di</strong>ce ciclico viene usato solo come co<strong>di</strong>ce rivelatore <strong>di</strong> errori, si procede<br />

come segue.<br />

Se si riceve un vettore y(x), il deco<strong>di</strong>ficatore deve stabilire se è oppure no un<br />

elemento del co<strong>di</strong>ce. Per fare ciò si può usare il polinomio <strong>di</strong> controllo e vedere<br />

se y(x)h(x) = 0 in Rn[x]. Inoltre, poichè h(x) = xn−1, la relazione y(x)h(x) = 0<br />

g(x)<br />

equivale a 0 = y(x)<br />

g(x) (xn − 1) che significa y(x)<br />

g(x) ≡ 0 mod (xn − 1). Pertanto se<br />

y(x)h(x) = 0, <strong>di</strong>videndo y(x) per g(x) si ottiene come resto 0. Allora, per vedere<br />

se ci sono errori, il deco<strong>di</strong>ficatore può <strong>di</strong>videre il vettore ricevuto per g(x), invece<br />

<strong>di</strong> moltiplicarlo per h(x).<br />

Gli schemi <strong>di</strong> deco<strong>di</strong>fica veri e propri <strong>di</strong>pendono dal singolo tipo <strong>di</strong> co<strong>di</strong>ce. In<br />

ogni caso anche la deco<strong>di</strong>fica <strong>di</strong> un co<strong>di</strong>ce ciclico può essere implementata in modo<br />

conciso in termini <strong>di</strong> polinomi.


5. DECODIFICA 78<br />

Fissiamo un (n, k)-co<strong>di</strong>ce ciclico C ⊆ F n q con polinomio generatore g(x). Per<br />

quanto visto precedentemente, è sempre possibile rappresentare l’operazione <strong>di</strong> co<strong>di</strong>fica<br />

me<strong>di</strong>ante una matrice generatrice G della forma G = (A|Ik). Di conseguenza<br />

la matrice <strong>di</strong> controllo <strong>di</strong> C deve essere del tipo<br />

H = (In−k| − A t ).<br />

In termini <strong>dei</strong> polinomi ri(x) si vede imme<strong>di</strong>atamente che<br />

H =<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0 ( ) x r<br />

r 1( x)<br />

Sia h(x) il polinomio <strong>di</strong> controllo <strong>di</strong> C e sia y una sequenza ricevuta. Poniamo<br />

s = yH t ; il vettore s è la sindrome associata ad y. Per costruzione la matrice <strong>di</strong><br />

controllo H è la matrice generatrice <strong>di</strong> un co<strong>di</strong>ce ciclico con polinomio generatore<br />

h(x). In particolare, il calcolo della sindrome corrisponde, in termini polinomiali,<br />

ad un prodotto del polinomio s(x) associato alla sequenza ricevuta y per il<br />

polinomio h(x), il tutto calcolato nell’anello F n−k<br />

q [x].<br />

Il seguente teorema mostra che c’è una particolare convenienza nello scegliere<br />

per C una matrice <strong>di</strong> controllo H del tipo H = (In−k| − At ).<br />

Teorema 5.5.1. Sia C ⊆ F n q un (n, k)-co<strong>di</strong>ce ciclico generato da g(x) e sia H<br />

una sua matrice <strong>di</strong> controllo del tipo H = (In−k| − A t ). Sia v ∈ F n q un vettore e<br />

in<strong>di</strong>chiamo con s la sua sindrome rispetto ad H. Siano v(x) e s(x) le rispettive<br />

rappresentazioni polinomiali. Allora s(x) è il resto della <strong>di</strong>visione <strong>di</strong> v(x) per g(x).<br />

Dimostrazione. Si rinvia a [3] pag. 116. <br />

In altre parole, il teorema assicura che la sindrome <strong>di</strong> una sequenza può essere<br />

determinata semplicemente eseguendo una <strong>di</strong>visione fra polinomi me<strong>di</strong>ante l’algoritmo<br />

euclideo. Questo può risultare molto più agevole da implementare che non<br />

l’usuale prodotto fra matrice e vettore.<br />

Esempio 5.5.2. Sia C il (7, 4)-co<strong>di</strong>ce ciclico binario generato dal polinomio<br />

g(x) = 1+x+x 3 . Una sua matrice generatrice del tipo G = (A|I4) è (ve<strong>di</strong> esempio<br />

5.2.13)<br />

G =<br />

⎛<br />

⎜<br />

⎝<br />

1 1 0 1 0 0 0<br />

0 1 1 0 1 0 0<br />

1 1 1 0 0 1 0<br />

1 0 1 0 0 0 1<br />

⎞<br />

⎟<br />

⎠<br />

r k−<br />

1( x)


6. CODICI BCH 79<br />

e pertanto una matrice <strong>di</strong> controllo è data da<br />

⎛<br />

⎞<br />

1 0 0 1 0 1 1<br />

H = ⎝ 0 1 0 1 1 1 0 ⎠ = (I3| − A<br />

0 0 1 0 1 1 1<br />

t )<br />

Supponiamo <strong>di</strong> aver ricevuto la sequenza r = (1 0 1 1 0 1 1). La sindrome <strong>di</strong> r è<br />

s = rH t = (0 0 1). Consideriamo la rappresentazione polinomiale <strong>di</strong> r : r(x) = 1+<br />

x 2 +x 3 +x 5 +x 6 . Dividendo r(x) per g(x) si ottiene : r(x) = (x 3 +x 2 +x+1)g(x)+x 2 .<br />

Come previsto, il polinomio associato alla sindrome <strong>di</strong> r è s(x) = x 2 .<br />

Per maggiori approfon<strong>di</strong>menti si rinvia a [3] pag. 117 − 123.<br />

6. Co<strong>di</strong>ci BCH<br />

I co<strong>di</strong>ci BCH, dalle iniziali <strong>dei</strong> loro inventori R. C. Bose, D. K. Ray-Chaudhuri,<br />

A. Hocquenghem (1959-60), sono co<strong>di</strong>ci ciclici pluri-correttori.<br />

Scegliendo ′′ opportunamente ′′ il polinomio generatore, si può fare in modo che,<br />

entro certi limiti, la <strong>di</strong>stanza minima del co<strong>di</strong>ce sia maggiore <strong>di</strong> un intero prefissato.<br />

Fissato un campo Fq, si vuole costruire un co<strong>di</strong>ce su Fq che abbia <strong>di</strong>stanza<br />

minima d ≥ δ, dove δ è un intero arbitrario. L’idea base è quella <strong>di</strong> lavorare in<br />

un’estensione algebrica <strong>di</strong> Fq.<br />

Definizione 5.6.1. Un co<strong>di</strong>ce ciclico <strong>di</strong> lunghezza n su Fq è detto co<strong>di</strong>ce<br />

BCH con <strong>di</strong>stanza garantita δ se è generato da un polinomio g(x) che è il<br />

minimo comune multiplo <strong>dei</strong> polinomi minimi (su Fq) degli elementi<br />

α l , α l+1 , . . . , α l+δ−2<br />

con α ra<strong>di</strong>ce primitiva n-esima dell’unità e l ≥ 0 intero fissato.<br />

Poichè l’elemento α è una ra<strong>di</strong>ce n-esima dell’unità, anche ogni sua potenza α j<br />

è ra<strong>di</strong>ce n-esima dell’unità. Pertanto<br />

x − α j<br />

<strong>di</strong>vide sempre x n − 1; perciò il polinomio g(x) della definizione 5.6.1 deve, anche<br />

esso, <strong>di</strong>videre x n − 1 e il co<strong>di</strong>ce generato ha lunghezza n e <strong>di</strong>mensione n−gr(g(x)).<br />

Dalla definizione segue che il polinomio g(x) che genera il co<strong>di</strong>ce BCH è il<br />

polinomio <strong>di</strong> grado minimo su GF (q) avente α l , α l+1 , . . . , α l+δ−2 come ra<strong>di</strong>ci.<br />

Definizione 5.6.2. Sia C un co<strong>di</strong>ce BCH <strong>di</strong> lunghezza n su Fq, con <strong>di</strong>stanza<br />

garantita δ. C è detto BCH in senso stretto se nella definizione 5.6.1 si ha l = 1.


6. CODICI BCH 80<br />

In generale, con il simbolo BCHq(n, δ) in<strong>di</strong>cheremo un co<strong>di</strong>ce BCH in senso<br />

stretto q-ario <strong>di</strong> lunghezza n e <strong>di</strong>stanza garantita δ.<br />

Il numero δ non è necessariamente la <strong>di</strong>stanza minima del co<strong>di</strong>ce BCH, ma<br />

ne dà una limitazione inferiore, come afferma il seguente teorema <strong>di</strong> cui, per la<br />

<strong>di</strong>mostrazione, si rinvia a [3] pag. 159.<br />

Teorema 5.6.3 (Limitazione BCH). Sia C un co<strong>di</strong>ce BCH sopra Fq <strong>di</strong> <strong>di</strong>stanza<br />

garantita δ. Allora C ha <strong>di</strong>stanza minima d ≥ δ.<br />

Ricor<strong>di</strong>amo che per determinare una ra<strong>di</strong>ce primitiva n-esima dell’unità, in<br />

generale, si deve trovare l’estensione algebrica Fq m ⊇ Fq definita dal più piccolo<br />

intero m tale che n <strong>di</strong>vida q m − 1. Determinato m, sia q m − 1 = kn e sia ξ un<br />

elemento primitivo <strong>di</strong> Fq m. Poichè ξqm −1 = ξ nk = 1, si ha che α = ξ k è una ra<strong>di</strong>ce<br />

primitiva n-esima dell’unità.<br />

Esempio 5.6.4. Costruiamo un co<strong>di</strong>ce C = BCH2(9, 2). Per poterlo costruire<br />

ci serve anzittutto una ra<strong>di</strong>ce primitiva nona dell’unità su F2. Il campo <strong>di</strong> spezzamento<br />

<strong>di</strong> x 9 − 1 è F 2 6 perchè il più piccolo intero tale che 9|2 m − 1 è m = 6.<br />

In<strong>di</strong>chiamo con ξ un generatore del gruppo moltiplicativo <strong>di</strong> F 2 6 e sia<br />

x 6 + x 4 + x 3 + x + 1<br />

il polinomio minimo <strong>di</strong> ξ in GF (2) (è irriducibile e ha grado 6 perchè determina<br />

l’estensione F 6 2 <strong>di</strong> F2). Il periodo <strong>di</strong> ξ è 2 6 − 1 = 63. Ne segue che α = ξ 63/9 = ξ 7 è<br />

una ra<strong>di</strong>ce primitiva nona dell’unità. Poichè l + δ − 2 = l + 2 − 2 = l, per costruire<br />

il co<strong>di</strong>ce BCH richiesto occorre una ra<strong>di</strong>ce ra<strong>di</strong>ce nona dell’unità; consideriamo<br />

pertanto la ra<strong>di</strong>ce α. Essa ha polinomio minimo<br />

x 6 + x 3 + 1.<br />

Il co<strong>di</strong>ce BCH cercato, essendo generato dal minimo comune multiplo <strong>dei</strong> polinomi<br />

minimi, in questo caso, è generato da g(x) = (x6 + x3 + 1) e poichè gr(g(x)) =<br />

n − k = 6, la <strong>di</strong>mensione del co<strong>di</strong>ce cercato è 9 − 6 = 3. Da g(x) = x6 + x3 + 1<br />

possiamo scrivere esplicitamente una matrice generatrice per C :<br />

⎛<br />

G = ⎝<br />

1 0 0 1 0 0 1 0 0<br />

0 1 0 0 1 0 0 1 0<br />

0 0 1 0 0 1 0 0 1<br />

Le otto parole <strong>di</strong> C sono date da<br />

• il vettore nullo (peso 0);<br />

• le tre righe della matrice G (peso 3);<br />

• le tre combinazioni delle righe <strong>di</strong> G a due a due (peso 6);<br />

• il vettore ottenuto sommando tutte e tre le righe <strong>di</strong> G (peso 9).<br />

⎞<br />


6. CODICI BCH 81<br />

Ne segue che il co<strong>di</strong>ce C ha <strong>di</strong>stanza minima 3, strettamente maggiore della <strong>di</strong>stanza<br />

garantita.<br />

Per costruire un co<strong>di</strong>ce BCH si deve lavorare contemporaneamente su due<br />

campi, potenzialmente <strong>di</strong>stinti: il campo Fq cui appartengono le componenti delle<br />

parole del co<strong>di</strong>ce e su cui è definito lo spazio vettoriale che viene considerato, C ⊆<br />

F n q , e il campo Fqm in cui giacciono le ra<strong>di</strong>ci dell’unità utilizzate nella costruzione<br />

e detto campo <strong>di</strong> calcolo del co<strong>di</strong>ce.<br />

Esempio 5.6.5. Mostriamo come si può ottenere il co<strong>di</strong>ce BCH2(15, 7).<br />

La lunghezza del co<strong>di</strong>ce è 15, pertanto serve una ra<strong>di</strong>ce 15-esima dell’unità:<br />

in<strong>di</strong>chiamo con α questa ra<strong>di</strong>ce. Poichè 15 = 2 4 − 1, possiamo scegliere come α<br />

un elemento primitivo <strong>di</strong> F 2 4. Poichè 16 = 2 4 , possiamo scegliere una ra<strong>di</strong>ce del<br />

seguente polinomio <strong>di</strong> grado 4, irriducibile in GF (2):<br />

x 4 + x + 1<br />

Per avere δ = 7, occorre considerare un polinomio g(x) generatore del co<strong>di</strong>ce BCH<br />

che abbia come ra<strong>di</strong>ci sei potenze consecutive <strong>di</strong> α.<br />

(1) In GF (2 4 ) gli elementi α, α 2 , α 3 , α 4 , α 5 , α 6 sono ra<strong>di</strong>ci 15-esime dell’unità.<br />

Le ra<strong>di</strong>ci α, α 2 , α 4 hanno come polinomio minimo irriducibile su GF (2) il<br />

polinomio p(x) = 1 + x + x 4 ; α 5 ha come polinomio minimo irriducibile<br />

su GF (2) il polinomio q(x) = 1 + x + x 2 ; α 6 ha come polinomio minimo<br />

irriducibile su GF (2) il polinomio r(x) = 1 + x + x 2 + x 3 + x 4 . Il co<strong>di</strong>ce<br />

BCH cercato è allora generato dal minimo comune multiplo <strong>dei</strong> polinomi<br />

p(x), q(x), r(x) ossia è generato dal polinomio g(x) = 1 + x + x 2 + x 4 +<br />

x 5 + x 8 + x 1 0. Poichè g(x) è una parola del co<strong>di</strong>ce <strong>di</strong> peso 7, si ha che in<br />

questo caso d = δ. Inoltre, poichè l = 1, il co<strong>di</strong>ce è BCH in senso stretto.<br />

(2) In GF (2 4 ) gli elementi α 9 , α 10 , α 11 , α 12 , α 13 , α 14 sono sei potenze consecutive<br />

<strong>di</strong> α e sono ra<strong>di</strong>ci 15-esime dell’unità. Le ra<strong>di</strong>ci α 9 , α 12 hanno come polinomio<br />

minimo irriducibile su GF (2) il polinomio p(x) = 1+x+x 2 +x 3 +x 4 ;<br />

α 10 ha come polinomio minimo irriducibile su GF (2) il polinomio q(x) =<br />

1 + x + x 2 ; α 11 , α 13 , α 14 hanno come polinomio minimo irriducibile su<br />

GF (2) il polinomio r(x) = 1 + x 3 + x 4 . Il co<strong>di</strong>ce BCH cercato è allora<br />

generato dal minimo comune multiplo <strong>dei</strong> polinomi p(x), q(x), r(x) ossia è<br />

generato dal polinomio g(x) = 1+x 2 +x 5 +x 6 +x 8 +x 9 +x 1 0. Poichè g(x)<br />

è una parola del co<strong>di</strong>ce <strong>di</strong> peso 7, come nel caso precedente si ha d = δ<br />

ma il co<strong>di</strong>ce non è BCH in senso stretto perchè l = 9.<br />

Per costruire un co<strong>di</strong>ce BCH, è <strong>di</strong> grande utilità considerare le classi ciclotomiche<br />

del campo <strong>di</strong> calcolo del co<strong>di</strong>ce; infatti con queste si determinano imme<strong>di</strong>atamente<br />

i polinomi minimi con cui ottenere il polinomio generatore del<br />

co<strong>di</strong>ce.


6. CODICI BCH 82<br />

Esempio 5.6.6. Si vuole costruire un BCH co<strong>di</strong>ce binario <strong>di</strong> lunghezza 15. Sia<br />

α un elemento primitivo <strong>di</strong> GF (2 4 ), ne segue che α è una ra<strong>di</strong>ce primitiva 15-esima<br />

dell’unità. Le classi ciclotomiche modulo 15 su GF (2) sono:<br />

C0 = {0}, C1 = {1, 2, 4, 8}, C3 = {3, 6, 9, 12}, C5 = {5, 10}, C7 = {7, 11, 13, 14}.<br />

Se mi(x) è il polinomio minimo <strong>di</strong> α i , ossia mi(x) = m α i(x), mi(α i ) = 0, otteniamo:<br />

m0(x) = (x − 1)<br />

m1(x) = (x − α)(x − α 2 )(x − α 4 )(x − α 8 )<br />

m3(x) = (x − α 3 )(x − α 6 )(x − α 9 )(x − α 12 )<br />

m5(x) = (x − α 5 )(x − α 10 )<br />

m7(x) = (x − α 7 )(x − α 11 )(x − α 13 )(x − α 14 ) .<br />

Ovviamente ogni mi(x) è <strong>di</strong>visore <strong>di</strong> x 15 − 1 e perciò se g(x) è il prodotto <strong>di</strong> un<br />

certo numero <strong>di</strong> polinomi mi(x), allora g(x) è un <strong>di</strong>visore <strong>di</strong> x 15 −1 e quin<strong>di</strong> genera<br />

un co<strong>di</strong>ce ciclico. Se g(x) ha δ − 1 potenze consecutive <strong>di</strong> α come ra<strong>di</strong>ci, allora il<br />

co<strong>di</strong>ce C da esso generato ha <strong>di</strong>stanza garantita δ.<br />

Se costruiamo l’ampliamento GF (2 4 ) <strong>di</strong> GF (2) tramite il polinomio 1 + x + x 4 ,<br />

ossia 1 + α + α 4 = 0, otteniamo<br />

m1(x) = (x 2 + α 2 x + αx + α 3 )(x 2 + α 8 x + α 4 x + α 12 ) =<br />

= x 4 + (α 8 + α 4 + α 2 + α)x 3 + (α 12 + α 10 + α 9 + α 6 + α 5 + α 3 )x 2 +<br />

+(α 14 + α 13 + α 11 + α 7 )x + 1<br />

= x 4 + x + 1 ;<br />

analogamente<br />

m3(x) = x 4 + x 3 + x 2 + x + 1<br />

m5(x) = x 2 + x + 1<br />

m7(x) = x 4 + x 3 + 1 .<br />

• Se fissiamo g(x) = m3(x)m5(x)m7(x), le potenze α 9 , α 10 , α 11 , α 12 , α 13 , α 14<br />

sono ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive e perciò g(x) genera un co<strong>di</strong>ce<br />

BCH con <strong>di</strong>stanza garantita δ = 7 perchè 9 + δ − 2 = 14. In questo caso<br />

si tratta <strong>di</strong> un (15, 5)-co<strong>di</strong>ce perchè g(x) ha grado 10.<br />

• Se fissiamo g(x) = m1(x)m3(x)m5(x), le potenze α, α 2 , α 3 , α 4 , α 5 , α 6 sono<br />

ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive e perciò otteniamo ancora un (15, 5)co<strong>di</strong>ce<br />

con <strong>di</strong>stanza garantita δ = 7 perchè 1 + δ − 2 = 6.<br />

• Se fissiamo g(x) = m1(x)m3(x) otteniamo un (15, 7)-co<strong>di</strong>ce ciclico, avendo<br />

g(x) grado 8. Inoltre, essendo α, α 2 , α 3 , α 4 ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive,<br />

C è un BCH co<strong>di</strong>ce con <strong>di</strong>stanza garantita δ = 5.<br />

Si ha g(x) = m1(x)m3(x) = x 8 + x 7 + x 6 + x 4 + 1 ed essendo 5 il peso <strong>di</strong><br />

g(x), si ha d(C) = δ = 5.<br />

• Se fissiamo g(x) = m0(x)m1(x)m3(x), otteniamo ancora un (15, 6)-co<strong>di</strong>ce<br />

con <strong>di</strong>stanza garantita δ = 6.


6. CODICI BCH 83<br />

In generale, se g(x) ha come ra<strong>di</strong>ce α e genera un BCH co<strong>di</strong>ce con <strong>di</strong>stanza<br />

garantita δ, il co<strong>di</strong>ce generato da m0(x)g(x) ha <strong>di</strong>stanza garantita δ + 1.<br />

Esempio 5.6.7. Si vuole costruire un BCH co<strong>di</strong>ce ternario <strong>di</strong> lunghezza 8. Sia<br />

α un elemento primitivo <strong>di</strong> GF (3 2 ), ne segue che α è una ra<strong>di</strong>ce primitiva ottava<br />

dell’unità. Le classi ciclotomiche modulo 8 su GF (3) sono:<br />

C0 = {0}, C1 = {1, 3}, C2 = {2, 6}, C4 = {4}, C5 = {5, 7}.<br />

Se denotiamo con mi(x) il polinomio minimo <strong>di</strong> α i , si ha:<br />

m0(x) = (x − 1)<br />

m1(x) = (x − α)(x − α 3 )<br />

m2(x) = (x − α 2 )(x − α 6 )<br />

m4(x) = (x − α 4 )<br />

m5(x) = (x − α 5 )(x − α 7 ) .<br />

Se fissiamo g(x) = m2(x)m5(x), otteniamo un BCH co<strong>di</strong>ce C con <strong>di</strong>stanza garantita<br />

δ = 4, essendo α 5 , α 6 , α 7 ra<strong>di</strong>ci <strong>di</strong> g(x) potenze consecutive. Inoltre poichè g(x)<br />

ha peso esattamente 4, si ha d(C) = δ = 4. Il co<strong>di</strong>ce C è un (8, 4)-co<strong>di</strong>ce perchè il<br />

grado <strong>di</strong> g(x) è 4.<br />

Esempio 5.6.8. Si vuole costruire un BCH co<strong>di</strong>ce ternario <strong>di</strong> lunghezza 13. Il<br />

minimo or<strong>di</strong>ne m <strong>di</strong> un ampliamento algebrico <strong>di</strong> GF (3) tale che 3 m − 1 = 13k è<br />

3, infatti 3 3 − 1 = 2 · 13.<br />

Sia α un elemento primitivo <strong>di</strong> GF (3 3 ), ad esempio α sia ra<strong>di</strong>ce del polinomio<br />

x 3 + 2x 2 + 1; allora β = α k = α 2 è ra<strong>di</strong>ce 13-esima primitiva dell’unità.<br />

Le classi ciclotomiche modulo 13 su GF (3) sono:<br />

C0 = {0}, C1 = {1, 3, 9}, C2 = {2, 5, 6}, C4 = {4, 10, 12}, C7 = {7, 8, 11}.<br />

Se denotiamo con mi(x) il polinomio minimo <strong>di</strong> β i , si ha:<br />

m0(x) = (x − 1)<br />

m1(x) = (x − β)(x − β 3 )(x − β 9 ) = x 3 + 2x 2 + 2x + 2<br />

m2(x) = (x − β 2 )(x − β 5 )(x − β 6 ) = x 3 + 2x + 2<br />

m4(x) = (x − β 4 )(x − β 10 )(x − β 12 ) = x 3 + 2x 2 + x + 2<br />

m7(x) = (x − β 7 )(x − β 8 )(x − β 11 ) = x 3 + x 2 + 2 .<br />

• Se fissiamo g(x) = m0(x)m1(x)m2(x) = x 7 + x 6 + 2x 5 + x 4 + 2x + 2,<br />

otteniamo un BCH co<strong>di</strong>ce C con <strong>di</strong>stanza garantita δ = 5.<br />

• Se fissiamo g(x) = m1(x)m2(x), otteniamo un BCH co<strong>di</strong>ce C con <strong>di</strong>stanza<br />

garantita δ = 4.


6. CODICI BCH 84<br />

Una limitazione superiore per la <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce BCH è data dal<br />

seguente teorema che riportiamo senza <strong>di</strong>mostrazione.<br />

Teorema 5.6.9. Sia C un co<strong>di</strong>ce BCH primitivo binario <strong>di</strong> <strong>di</strong>stanza garantita<br />

δ. Allora la <strong>di</strong>stanza minima d <strong>di</strong> C sod<strong>di</strong>sfa<br />

δ ≤ d ≤ 2δ − 1.


CAPITOLO 6<br />

Co<strong>di</strong>ci <strong>di</strong> Hamming<br />

I co<strong>di</strong>ci <strong>di</strong> Hamming sono co<strong>di</strong>ci lineari 1-correttori perfetti e per questo particolarmente<br />

adatti a situazioni in cui è necessaria la correzione <strong>di</strong> un singolo errore.<br />

Costituiscono una famiglia <strong>di</strong> co<strong>di</strong>ci molto importante perchè per essi è facile sia<br />

la co<strong>di</strong>fica che la deco<strong>di</strong>fica.<br />

Scoperti dallo stesso Hamming nel 1950, l’approccio da noi seguito non è quello<br />

originale ma è geometrico basato sull’insieme <strong>dei</strong> sottospazi 1-<strong>di</strong>mensionali <strong>di</strong> uno<br />

spazio vettoriale.<br />

1. Definizioni e Proprietà<br />

Parliamo <strong>dei</strong> co<strong>di</strong>ci <strong>di</strong> Hamming descrivendoli tramite una loro matrice <strong>di</strong><br />

controllo.<br />

Occorre costruire una matrice H <strong>di</strong> un (n, k)-co<strong>di</strong>ce 1-correttore. Per in<strong>di</strong>viduare<br />

sempre un errore, nessuna colonna <strong>di</strong> H deve essere nulla (altrimenti un<br />

errore nella posizione corrispondente a tale colonna non darebbe contributo alla<br />

sindrome e quin<strong>di</strong> l’errore non sarebbe rivelato). Inoltre le colonne devono essere<br />

a due a due <strong>di</strong>stinte, altrimenti, se ci fosse un errore in una delle due posizioni<br />

corrispondenti alle due colonne uguali, non si potrebbe decidere in quale <strong>dei</strong> due<br />

posti è l’errore. D’altra parte, se le colonne sono tutte non nulle e <strong>di</strong>verse fra loro,<br />

il singolo errore nella i-esima componente viene scoperto perchè la sindrome, in<br />

questo caso, uguaglia proprio la i-esima colonna <strong>di</strong> H (cfr. 4.6.5).<br />

La matrice <strong>di</strong> controllo H è una matrice <strong>di</strong> tipo (n−k)×n avente rango (n−k).<br />

Sia n − k = r e determiniamo il numero massimo <strong>di</strong> r-ple a due a due linearmente<br />

in<strong>di</strong>pendenti che si possono costruire con q elementi. Il numero <strong>di</strong> r-ple <strong>di</strong>stinte<br />

non nulle che si ottengono con q elementi è q r − 1 ; ma per ogni r-pla fissata<br />

ci sono (q − 2) altre r-ple linearmente <strong>di</strong>pendenti da essa e pertanto l’insieme<br />

<strong>di</strong> tutte le r-ple si sud<strong>di</strong>vide in sottoinsiemi ad ognuno <strong>dei</strong> quali appartengono<br />

(q − 1) r-ple a due a due linearmente <strong>di</strong>pendenti. Quin<strong>di</strong> delle (q r − 1) r-ple non<br />

nulle, esattamente (q r − 1)/(q − 1) sono a due a due linearmente in<strong>di</strong>pendenti.<br />

Ne segue che il massimo numero <strong>di</strong> r-ple a due a due linearmente in<strong>di</strong>pendenti è<br />

n = (q r − 1)/(q − 1); inoltre da r = n − k segue k = n − r = [(q r − 1)/(q − 1)] − r.<br />

85


1. DEFINIZIONI E PROPRIETÀ 86<br />

Definizione 6.1.1. Sia n = qr−1 , k = n − r. Un co<strong>di</strong>ce C è definito co<strong>di</strong>ce <strong>di</strong><br />

q−1<br />

Hamming <strong>di</strong> or<strong>di</strong>ne r su Fq se è un (n, n − r)- co<strong>di</strong>ce la cui matrice <strong>di</strong> controllo<br />

H è una matrice r × n tale che ogni colonna è linearmente in<strong>di</strong>pendente da ogni<br />

altra colonna.<br />

La definizione ora data ha senso in quanto il numero <strong>di</strong> sottospazi 1-<strong>di</strong>mensionali<br />

<strong>di</strong> F r q è esattamente (q r − 1)/(q − 1). A priori un co<strong>di</strong>ce <strong>di</strong> Hamming <strong>di</strong>pende dalla<br />

scelta <strong>di</strong> opportuni rappresentanti per i sottospazi <strong>di</strong> F r q , ma, come si può verificare,<br />

i co<strong>di</strong>ci ottenuti selezionando rappresentanti <strong>di</strong>versi <strong>dei</strong> medesimi spazi risultano<br />

fra loro equivalenti e pertanto un co<strong>di</strong>ce <strong>di</strong> Hamming è, a meno <strong>di</strong> equivalenza,<br />

univocamente in<strong>di</strong>viduato dai suoi parametri.<br />

Per k ≥ 2 il rango della matrice <strong>di</strong> controllo H è sempre 2 perchè due qualunque<br />

colonne c1, c2 sono linearmente in<strong>di</strong>pendenti, ma il sottospazio generato da c1 + c2<br />

è, a sua volta, rappresentato in H. Per il corollario 4.5.12 ne segue che tutti<br />

i co<strong>di</strong>ci <strong>di</strong> Hamming con r ≥ 2 hanno <strong>di</strong>stanza minima d = 3 e sono<br />

pertanto in grado <strong>di</strong> correggere automaticamente 1 errore in ogni blocco ricevuto<br />

o, alternativamente, <strong>di</strong> identificarne 2.<br />

Un metodo semplice per scrivere una matrice <strong>di</strong> controllo <strong>di</strong> un co<strong>di</strong>ce q-ario <strong>di</strong><br />

Hamming è quello <strong>di</strong> scegliere come colonne tra le r-ple non nulle possibili, quelle<br />

che hanno il primo elemento non nullo uguale ad 1. Ovviamente ciò equivale a<br />

scegliere una r-pla in ogni sottoinsieme <strong>di</strong> (q − 1) r-ple a due a due linearmente<br />

in<strong>di</strong>pendenti.<br />

Per la definizione data, le colonne <strong>di</strong> una matrice <strong>di</strong> controllo H <strong>di</strong> un co<strong>di</strong>ce <strong>di</strong><br />

Hamming sono tutte le r-ple <strong>di</strong> elementi <strong>di</strong> Fq a due a due linearmente in<strong>di</strong>pendenti.<br />

Segue che, data una matrice <strong>di</strong> controllo H <strong>di</strong> un ( qr−1 q−1 , qr−1 − r)-co<strong>di</strong>ce, tutte le<br />

q−1<br />

altre si possono ottenere da H tramite trasformazioni elementari su righe e colonne.<br />

Allora, a meno <strong>di</strong> equivalenze, i co<strong>di</strong>ci <strong>di</strong> Hamming sono co<strong>di</strong>ci lineari in<strong>di</strong>viduati<br />

univocamente dai loro parametri.<br />

Esempio 6.1.2. Sia q = 3, r = 2. Il co<strong>di</strong>ce <strong>di</strong> Hamming che si ottiene è un<br />

( 32−1 3−1 , 32−1 − 2) = (4, 2)-co<strong>di</strong>ce ternario. Per scrivere una matrice <strong>di</strong> controllo,<br />

3−1<br />

<strong>di</strong>amo la rappresentazione in base 3 <strong>dei</strong> numeri compresi fra 1 e 8.<br />

1 = 1 · 3 0 = 0 1 2 = 2 · 3 0 = 0 2<br />

3 = 1 · 3 1 + 0 · 3 0 = 1 0 4 = 1 · 3 1 + 1 · 3 0 = 1 1<br />

5 = 1 · 3 1 + 2 · 3 0 = 1 2 6 = 2 · 3 1 + 0 · 3 0 = 2 0<br />

7 = 2 · 3 1 + 1 · 3 0 = 2 1 8 = 2 · 3 1 + 2 · 3 0 = 2 2<br />

Si osservi che la coppia (0 2) è proporzionale alla coppia (0 1); così come (2 0) è<br />

proporzionale a (1 0); (1 2) è proporzionale a (2 1); (2 2) è proporzionale a (1 1),


1. DEFINIZIONI E PROPRIETÀ 87<br />

ovviamente nell’aritmetica modulo 3. Una matrice <strong>di</strong> controllo del (4, 2)-co<strong>di</strong>ce<br />

ternario <strong>di</strong> Hamming è allora<br />

<br />

0<br />

H =<br />

1<br />

1<br />

0<br />

1<br />

1<br />

<br />

1<br />

2<br />

La deco<strong>di</strong>fica <strong>dei</strong> co<strong>di</strong>ci q-ari <strong>di</strong> Hamming viene fatta usando lo schema <strong>di</strong><br />

deco<strong>di</strong>fica descritto nel paragrafo 4.6 per i co<strong>di</strong>ci lineari 1-correttori.<br />

Esempio 6.1.3. Se q = 5 ed r = 2 si ha un (6, 4)-co<strong>di</strong>ce <strong>di</strong> Hamming <strong>di</strong> or<strong>di</strong>ne<br />

5 avente come matrice <strong>di</strong> controllo<br />

<br />

0<br />

H =<br />

1<br />

1<br />

0<br />

1<br />

1<br />

1<br />

2<br />

1<br />

3<br />

<br />

1<br />

4<br />

Supponiamo <strong>di</strong> ricevere y = (2 0 3 0 3 1). Si ha yH t = (2 3) = 2(1 4). Si deduce<br />

che l’errore è nella sesta componente e la ′′ grandezza ′′ <strong>di</strong> tale errore è 2 per cui la<br />

parola trasmessa è<br />

x = y − (0 0 0 0 0 2) = (2 0 3 0 3 4).<br />

Teorema 6.1.4. I co<strong>di</strong>ci <strong>di</strong> Hamming sono 1-correttori perfetti.<br />

Dimostrazione. Si veda [1] pag. 161 oppure [3] pag. 83. <br />

I parametri <strong>dei</strong> co<strong>di</strong>ci perfetti sopra alfabeti con un numero primo <strong>di</strong> simboli<br />

sono stati completamente determinati, si veda [3] pag. 242.<br />

Esempio 6.1.5. Il co<strong>di</strong>ce <strong>di</strong> Hamming <strong>di</strong> or<strong>di</strong>ne r = 3 sopra F2 è definito dalla<br />

seguente matrice <strong>di</strong> controllo<br />

⎛<br />

1<br />

H = ⎝ 0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

1<br />

0<br />

1<br />

1<br />

0<br />

⎞<br />

1<br />

1 ⎠<br />

0 0 1 0 1 1 1<br />

E’ un (7, 4)-co<strong>di</strong>ce con <strong>di</strong>stanza minima d = 3. Calcoliamo l’enumeratore <strong>dei</strong> pesi:<br />

il co<strong>di</strong>ce ha <strong>di</strong>mensione 4 e perciò contiene 2 4 = 16 parole. Poichè il co<strong>di</strong>ce è<br />

lineare A0 = 1. Poichè la <strong>di</strong>stanza minima è almeno 3, si ha A1 = A2 = 0. Il<br />

numero <strong>di</strong> entrate non nulle in ogni riga della matrice <strong>di</strong> controllo è pari, dunque<br />

(1 1 1 1 1 1 1) è una parola del co<strong>di</strong>ce per cui A7 = 1. Poichè il co<strong>di</strong>ce è lineare <strong>di</strong><br />

<strong>di</strong>mensione 4, se x è una parola del co<strong>di</strong>ce <strong>di</strong> peso p allora (1 1 1 1 1 1 1) − x è una<br />

parola del co<strong>di</strong>ce <strong>di</strong> peso 7 − p; ne segue A5 = A1 = 0, A6 = A2 = 0. Rimangono<br />

A3 = A7 = 1. Il polinomio enumeratore del co<strong>di</strong>ce risulta dunque<br />

1 + 7x 3 + 7x 4 + x 7 .


2. CODICI DI HAMMING BINARI 88<br />

Altri co<strong>di</strong>ci perfetti, oltre a quelli <strong>di</strong> Hamming, sono stati scoperti nel 1949 da<br />

Golay. Uno è un (23, 12)-co<strong>di</strong>ce binario 3-correttore con <strong>di</strong>stanza d = 7; l’altro è<br />

un (11, 6)-co<strong>di</strong>ce ternario 2-correttore con <strong>di</strong>stanza d = 5.<br />

I co<strong>di</strong>ci <strong>di</strong> Golay e i co<strong>di</strong>ci <strong>di</strong> Golay estesi sono co<strong>di</strong>ci spora<strong>di</strong>ci associati ai<br />

<strong>di</strong>segni <strong>di</strong> Mathieu ; insieme ai co<strong>di</strong>ci <strong>di</strong> Hamming sono gli unici co<strong>di</strong>ci lineari<br />

perfetti non banali. Sono particolarmente interessanti non solo perchè sono co<strong>di</strong>ci<br />

perfetti, ma anche perchè hanno una struttura algebrica molto ricca e perciò si<br />

prestano ad essere deco<strong>di</strong>ficati con facilità tanto che le prime sonde interplanetarie<br />

utilizzavano co<strong>di</strong>ci <strong>di</strong> Golay per la trasmissione <strong>dei</strong> dati.<br />

Si può <strong>di</strong>mostrare che un co<strong>di</strong>ce q-ario <strong>di</strong> Hamming <strong>di</strong> lunghezza (q r −1)/(q−1)<br />

è equivalente ad un co<strong>di</strong>ce ciclico se r e (q − 1) sono primi tra loro.<br />

Nel teorema 6.2.3 mostreremo invece che ogni co<strong>di</strong>ce binario <strong>di</strong> Hamming è<br />

equivalente ad un co<strong>di</strong>ce ciclico.<br />

2. Co<strong>di</strong>ci <strong>di</strong> Hamming binari<br />

Un caso particolarmente interessante <strong>di</strong> co<strong>di</strong>ci <strong>di</strong> Hamming è quello binario.<br />

In questo caso la matrice <strong>di</strong> controllo H contiene tutti e soli i vettori non nulli <strong>di</strong><br />

F r 2 . In altre parole<br />

si definisce co<strong>di</strong>ce binario <strong>di</strong> Hamming un (2 r −1, 2 r −1−r)-co<strong>di</strong>ce avente come<br />

matrice <strong>di</strong> controllo una matrice H le cui colonne sono tutte le r-ple non nulle <strong>di</strong><br />

elementi <strong>di</strong> GF (2).<br />

Ad esempio per r = 2 si ottiene un (3, 1)-co<strong>di</strong>ce; per r = 3 si ottiene un<br />

(7, 4)-co<strong>di</strong>ce; per r = 4 si ottiene un (15, 11)-co<strong>di</strong>ce.<br />

Esempio 6.2.1. Per avere la matrice <strong>di</strong> controllo <strong>di</strong> un (7, 4)-co<strong>di</strong>ce <strong>di</strong> Hamming<br />

è sufficiente scrivere una matrice le cui colonne sono la rappresentazione in base<br />

due <strong>dei</strong> numeri 1, 2, 3, 4, 5, 6, 7. Si ha<br />

⎛<br />

H = ⎝<br />

0 0 0 1 1 1 1<br />

0 1 1 0 0 1 1<br />

1 0 1 0 1 0 1<br />

Verifichiamo che un co<strong>di</strong>ce binario <strong>di</strong> Hamming è 1-correttore provando il<br />

seguente teorema.<br />

Teorema 6.2.2. La <strong>di</strong>stanza minima <strong>di</strong> un co<strong>di</strong>ce C binario <strong>di</strong> Hamming è<br />

esattamente tre.<br />

⎞<br />


2. CODICI DI HAMMING BINARI 89<br />

Dimostrazione. Dalla definizione <strong>di</strong> co<strong>di</strong>ce binario <strong>di</strong> Hamming sopra ricordata<br />

segue che d(C) ≥ 3. Inoltre d(C) = 3, perchè in C esistono parole <strong>di</strong> peso 3,<br />

come ad esempio la parola avente soltanto le prime tre componenti non nulle, se<br />

le colonne <strong>di</strong> H sono or<strong>di</strong>nate in senso crescente cioè la prima, la seconda, . . . , la<br />

(2 r − 1)-esima colonna sono rispettivamente la rappresentazione in base due <strong>dei</strong><br />

numeri 1, 2, . . . , 2 r − 1. <br />

Prima <strong>di</strong> <strong>di</strong>mostrare il prossimo teorema, ricor<strong>di</strong>amo alcuni noti risultati <strong>di</strong><br />

algebra:<br />

• Sia K un campo <strong>di</strong> caratteristica p e sia α un elemento non nullo <strong>di</strong> K.<br />

Un polinomio monico m(x) a coefficienti in GF (p) <strong>di</strong> grado minimo tale<br />

che m(α) = 0 è detto polinomio minimo <strong>di</strong> α rispetto a GF (p) e si denota<br />

con mα(x).<br />

• Il polinomio minimo <strong>di</strong> un elemento non nullo α <strong>di</strong> GF (q) = GF (ph ) è<br />

mα(x) = <br />

(x − β).<br />

β∈C(α)<br />

• Se f(x) ∈ GF (p)[x] è tale che f(α) = 0, α ∈ GF (p h ), allora mα(x) <strong>di</strong>vide<br />

f(x).<br />

Teorema 6.2.3. I (2 r − 1, 2 r − 1 − r)-co<strong>di</strong>ci C binari <strong>di</strong> Hamming sono co<strong>di</strong>ci<br />

ciclici generati dal polinomio minimo mα(x) <strong>di</strong> un elemento primitivo a <strong>di</strong> GF (2 r ).<br />

Dimostrazione. Sia α un elemento primitivo del campo GF (2 r ). Dalla definizione<br />

<strong>di</strong> co<strong>di</strong>ce binario <strong>di</strong> Hamming segue che una sua matrice <strong>di</strong> controllo <strong>di</strong><br />

lunghezza 2 r − 1 si può rappresentare come<br />

H = 1 α α 2 · · · α 2r −2 <br />

Per 4.5.7 un vettore c = (c0, c1, . . . , cn−1) è in C se e solo se cH t = 0 e, passando ai<br />

polinomi, c(x) = c0+c1x+. . .+cn−1x n−1 è in C se e solo se c0+c1α+. . .+cn−1α n−1 =<br />

0, cioè se e solo se c(α) = 0. Dalle proprietà algebriche prima ricordate, segue<br />

che mα(x) <strong>di</strong>vide ogni polinomio-parola c(x) ∈ C, quin<strong>di</strong> mα(x) è il polinomio<br />

generatore <strong>di</strong> C. <br />

Nota 6.2.4. Il co<strong>di</strong>ce duale <strong>di</strong> un co<strong>di</strong>ce <strong>di</strong> Hamming binario è un co<strong>di</strong>ce<br />

equi<strong>di</strong>stante ossia è un co<strong>di</strong>ce in cui tutte le parole <strong>di</strong>verse da 0 hanno il medesimo<br />

peso che è 3 (ve<strong>di</strong> [3] pag. 84 − 85).


CAPITOLO 7<br />

Co<strong>di</strong>ci <strong>di</strong> Goppa<br />

I co<strong>di</strong>ci <strong>di</strong> Goppa sono co<strong>di</strong>ci lineari <strong>di</strong> cui ci limitiamo a dare la definizione.<br />

Per una loro trattazione si rinvia a [2] pag. 427.<br />

Il motivo per cui, prima <strong>di</strong> concludere la parte de<strong>di</strong>cata ai co<strong>di</strong>ci, si vogliono<br />

citare i co<strong>di</strong>ci Goppa, è che nella teoria <strong>dei</strong> co<strong>di</strong>ci essi aprono la strada all’uso <strong>di</strong><br />

idee e tecniche <strong>di</strong> geometria algebrica.<br />

Definizione 7.0.5. Sia Fq un campo finito, sia m un intero positivo e f(x)<br />

un polinomio monico <strong>di</strong> grado t > 0 su Fqm. Sia inoltre L = {γ1, γ2, . . . , γn} un<br />

insieme <strong>di</strong> n elementi <strong>di</strong>stinti <strong>di</strong> Fqm tali che f(γh) = 0, per h = 1, . . . , n. Il co<strong>di</strong>ce<br />

<strong>di</strong> Goppa C(L, f(x))q,m è il sottoinsieme delle n-ple (c1, c2, . . . , cn) <strong>di</strong> elementi <strong>di</strong><br />

Fq tali che<br />

n ci<br />

≡ (mod f(x)).<br />

x − γi<br />

i=1<br />

90


CAPITOLO 8<br />

Co<strong>di</strong>ci correttori e gruppi <strong>di</strong> permutazioni<br />

Nella teoria <strong>dei</strong> co<strong>di</strong>ci, l’uso <strong>di</strong> insiemi <strong>di</strong> permutazioni è stato stu<strong>di</strong>ato fin<br />

dagli anni ′ 70. Solo negli ultimi anni ha preso vigore anche lo stu<strong>di</strong>o <strong>di</strong> co<strong>di</strong>ci<br />

correttori che sono gruppi <strong>di</strong> permutazioni, si veda ad esempio il lavoro <strong>di</strong><br />

R.F.Bailey Error-correcting codes from permutation groups, Discrete Mathematics<br />

309, 4253 − 4265, 2009.<br />

1. Gruppi come co<strong>di</strong>ci e <strong>di</strong>stanza <strong>di</strong> Hamming<br />

Considerato un co<strong>di</strong>ce le cui parole hanno lunghezza n, <strong>di</strong>re che il co<strong>di</strong>ce è<br />

un gruppo significa considerare un sottogruppo del gruppo simmetrico Sn e le<br />

parole del co<strong>di</strong>ce sono permutazioni dell’alfabeto A = {1, 2, . . . , n}. Ogni parola<br />

del co<strong>di</strong>ce può allora essere rappresentata con una stringa i cui elementi sono,<br />

rispettivamente, le immagini degli elementi 1, 2, . . . , n considerati nel loro or<strong>di</strong>ne<br />

naturale. Ad esempio, in S9, la stringa<br />

123456789<br />

rappresenta la permutazione identità, mentre la stringa<br />

in<strong>di</strong>ca la seguente permutazione <strong>di</strong> S9<br />

231794685<br />

1 2 3 4 5 6 7 8 9<br />

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓<br />

2 3 1 7 9 4 6 8 9<br />

Se le parole <strong>di</strong> un co<strong>di</strong>ce C sono permutazioni su n elementi, risulta molto utile<br />

interpretare la <strong>di</strong>stanza <strong>di</strong> Hamming in termini <strong>di</strong> punti fissi.<br />

Teorema 8.1.1. Siano g, h ∈ Sn, allora si ha<br />

d(g, h) = n − |F ix(gh −1 )|<br />

dove Fix(g) denota l’insieme <strong>dei</strong> punti fissi <strong>di</strong> g.<br />

91


2. GRUPPI STRETTAMENTE K-TRANSITIVI 92<br />

Dimostrazione. Moltiplicando per h −1 sia g che h si ottiene<br />

d(g, h) = d(gh −1 , id.)<br />

ossia la <strong>di</strong>stanza <strong>di</strong> Hamming fra g ed h è il numero <strong>di</strong> posti in cui gh −1 <strong>di</strong>fferisce<br />

dall’identità e questo numero è proprio n − |F ix(gh −1 )|. <br />

Dal teorema precedente segue che la <strong>di</strong>stanza minima <strong>di</strong> un insieme C <strong>di</strong><br />

permutazioni è uguale a<br />

d(C) = ming,h∈C,g=h {n − |F ix(gh −1 )|} = n − maxg,h∈C,g=h |F ix(gh −1 )|.<br />

Quando l’insieme <strong>di</strong> permutazioni forma un gruppo G, la relazione soprascritta<br />

<strong>di</strong>venta<br />

d(G) = n − maxg,h∈C,g=h |F ix(gh −1 )|.<br />

2. Gruppi strettamente k-transitivi<br />

Un ovvio punto <strong>di</strong> partenza per questa teoria sono i gruppi strettamente ktransitivi<br />

perchè la <strong>di</strong>stanza minima <strong>di</strong> questi gruppi è facile da calcolare. Se G<br />

è un gruppo <strong>di</strong> permutazioni su A = {1, . . . , n}, ossia G <strong>di</strong> grado n, si <strong>di</strong>ce che<br />

G è strettamente k-transitivo se comunque prese due k-ple or<strong>di</strong>nate <strong>di</strong> elementi<br />

<strong>di</strong>stinti <strong>di</strong> A, esiste uno ed un solo elemento <strong>di</strong> G che manda la prima k-pla nella<br />

seconda. Nel seguito, poichè l’applicazione è ai co<strong>di</strong>ci, si supporrà sempre k ≥ 2.<br />

I gruppi strettamente k-transitivi, k ≥ 2, sono tutti classificati:<br />

k ≥ 6 : Sk, Sk+1, Ak+2.<br />

k = 5 : S5, S6, A7, il gruppo <strong>di</strong> Mathieu M12.<br />

k = 4 : S4, S5, A6, il gruppo <strong>di</strong> Mathieu M11.<br />

k = 3 :<br />

• Il gruppo proiettivo lineare su GF (q) ∪ {∞}<br />

P GL(2, q) = {α : x → ax+b,<br />

a, b, c, d ∈ GF (q), ad − bc = 0}.<br />

cx+d<br />

• Il gruppo Gσ su GF (q) ∪ {∞}, q = p2m , p = 2 così definito<br />

Gσ =<br />

α : x → ax+b<br />

cx+d , a, b, c, d ∈ GF (q), ad − bc ∈ H∗ ;<br />

β : x → aσ(x)+b<br />

cσ(x)+d , a, b, c, d ∈ GF (q), ad − bc ∈ GF (q)∗ \ H ∗<br />

dove σ : x → xpm è l’automorfismo involutorio <strong>di</strong> GF (q), H∗ gruppo <strong>dei</strong><br />

quadrati non nulli <strong>di</strong> GF (q).


k = 2 : Il gruppo delle affinità sulla retta affine<br />

dove F è un quasicorpo finito.<br />

3. UNCOVERINGS 93<br />

AG(1, F ) = {α :→ ax + b, a, b ∈ F, a = 0},<br />

Teorema 8.2.1. Sia G un gruppo <strong>di</strong> permutazioni strettamente k-transitivo <strong>di</strong><br />

grado n. Allora la <strong>di</strong>stanza minima <strong>di</strong> G è n − k + 1.<br />

Dimostrazione. Per definizione <strong>di</strong> stretta k-transitività, solo l’identità fissa<br />

k punti e pertanto il massimo numero <strong>di</strong> punti fissati da un elemento <strong>di</strong> G che non<br />

sia l’identità è k − 1. Quin<strong>di</strong> la <strong>di</strong>stanza minima è n − (k − 1) = n − k + 1. <br />

Esempio 8.2.2. Il gruppo simmetrico Sn è sia strettamente n-transitivo che<br />

strettamente (n−1)-transitivo, mentre il gruppo alterno An è strettamente (n−2)transitivo.<br />

Pertanto la <strong>di</strong>stanza minima <strong>di</strong> Sn è n − (n − 1) + 1 = 2, mentre la<br />

<strong>di</strong>stanza minima <strong>di</strong> An è n − (n − 2) + 1 = 3.<br />

Se considerato come co<strong>di</strong>ce, il gruppo simmetrico non è molto utile perchè può<br />

correggere h = ⌊(d − 1)/2⌋ = ⌊(2 − 1)/2⌋ = 0 errori. Il gruppo alterno può invece<br />

correggere 1 errore.<br />

3. Uncoverings<br />

Considerato come co<strong>di</strong>ce, la capacità correttiva <strong>di</strong> un gruppo strettamente<br />

k-transitivo G <strong>di</strong> grado n è<br />

d − 1 − k + 1) − 1 n − k<br />

h = ⌊ ⌋ = ⌊(n ⌋ = ⌊ ⌋.<br />

2 2<br />

2<br />

Per cui il metodo <strong>di</strong> deco<strong>di</strong>fica presentato da Bailey e qui riportato, assume come<br />

con<strong>di</strong>zione iniziale che si siano verificati al più h errori, cioè che almeno n−h simboli<br />

siano corretti.Per la stretta k-transitività, ogni k-pla <strong>di</strong> simboli corretti identifica<br />

unicamente la parola del co<strong>di</strong>ce, tuttavia, non sappiamo in quali t posizioni siano gli<br />

errori, c’è quin<strong>di</strong> bisogno <strong>di</strong> un metodo per scegliere un insieme <strong>di</strong> k-ple in modo da<br />

poter essere certi che almneno una non contenga errori. Ovvero, abbiamo bisogno<br />

<strong>di</strong> un insieme <strong>di</strong> k-sottoinsiemi <strong>di</strong> A = {1, 2, . . . , n} tali che ogni t-sottoinsieme sia<br />

<strong>di</strong>sgiunto da almeno un k-sottoinsieme.<br />

Definizione 8.3.1. Un insieme U <strong>di</strong> k-sottoinsiemi <strong>di</strong> A = {1, 2, . . . , n} è detto<br />

un (n, k, h)-uncovering se per ogni h-sottoinsieme R ⊂ A, esiste S ∈ U tale che<br />

R ∩ S = ∅.


4. ALGORITMO DI DECODIFICA PER GRUPPI STRETTAMENTE k-TRANSITIVI 94<br />

Purchè sia k ≤ n − h, un uncovering esisterà sempre, basta prendere l’insieme<br />

<strong>di</strong> tutti i k-sottoinsiemi <strong>di</strong> A. Il problema <strong>di</strong>venta quin<strong>di</strong> quello <strong>di</strong> trovare il più<br />

piccolo uncovering possibile per un dato insieme <strong>di</strong> parametri, ossia un minimo<br />

(n, k, h)-uncovering.<br />

Il problema complementare, ossia quello <strong>di</strong> trovare un insieme <strong>di</strong> m-sottoinsiemi<br />

<strong>di</strong> A tale che ogni h-sottoinsieme <strong>di</strong> A (con h < m) sia contenuto in almeno un<br />

m-sottoinsieme, è molto interessante e stu<strong>di</strong>ato nell’ambito della teoria <strong>dei</strong> <strong>di</strong>segni.<br />

Un tale insieme è noto come (n, m, h)covering design, e gli insiemi <strong>di</strong> m elementi<br />

sono detti blocchi del <strong>di</strong>segno. Ne segue che prendendo i complementari <strong>dei</strong> blocchi<br />

<strong>di</strong> un (n, m, h) covering design si ottiene un (n, n − m, h)-uncovering. Per questo<br />

motivo chiameremo coblocchi gli elementi <strong>di</strong> un uncovering.<br />

Per quanto detto, per la ricerca degli uncoverings è utile la letteratura sui<br />

coverings design. Ad esempio, esiste in internet una raccolta <strong>di</strong> coverings design per<br />

piccoli parametri: la Jolla Covering Repository 1 . Molte delle costruzioni contenute<br />

nella raccolta sono descritte in un articolo <strong>di</strong> Gordon 2 , mentre un quadro più<br />

generale si trova nel lavoro <strong>di</strong> MacWilliams-Mullin 3<br />

Esempio 8.3.2. Consideriamo il gruppo P GL(2, 7) strettamente 3-transitivo su<br />

A = {1, 2, 3, 4, 5, 6, 7, 8}, si ha n = 8, k = 3, h = ⌊(8 − 3)/2⌋ = 2. Se consideriamo<br />

U = {(1, 2, 3), (4, 5, 6), (2, 3, 7), (1, 7, 8)}, esso è un (8, 3, 2)-uncovering. Infatti per<br />

ogni (a, b) con a, b ∈ A, in U esiste almeno un elemento che ha intersezione vuota<br />

con (a, b).<br />

4. Algoritmo <strong>di</strong> deco<strong>di</strong>fica per gruppi strettamente k-transitivi<br />

Algoritmo <strong>di</strong> deco<strong>di</strong>fica<br />

Sia G un gruppo <strong>di</strong> permutazioni strettamente k-transitivo su A, |A| = n. Sia<br />

h = ⌊(n − k)/2⌋ e sia U un uncovering <strong>di</strong> G.<br />

Supponiamo <strong>di</strong> ricevere la parola w = w1w2 . . . wn. Consideriamo S1 ∈ U e<br />

per i ∈ S1 analizziamo le componenti wi della parola ricevuta (ricor<strong>di</strong>amo che S1<br />

è un k-sottoinsieme <strong>di</strong> A). Innanzitutto controlliamo che, in quelle posizioni, non<br />

ci siano simboli ripetuti. Se non ce ne sono, per la stretta k-transitività <strong>di</strong> G,<br />

esiste un’unica permutazione <strong>di</strong> G che manda wi nel posto i, per ogni i ∈ S1, ossia<br />

c’è una sola parola del co<strong>di</strong>ce con componente wi nel posto i, per ogni i ∈ S1.<br />

1Gordon, D.M.,La Jolla Covering Repository, htpp://www.ccrwest.org/cover.html<br />

2Gordon D., Kuperberg G., Patashnik O., New constructions for covering designs, J. Comb.<br />

Des., 3, 1995, 269 − 284.<br />

3MacWilliams F., Mullin R.,Coverings and packings, Contemporary Design Theory: A<br />

collection of survey, New York, John Wiley et Sons, 1992.


4. ALGORITMO DI DECODIFICA PER GRUPPI STRETTAMENTE k-TRANSITIVI 95<br />

Cerchiamo questa parola tra gli elementi <strong>di</strong> G, sia p, e calcoliamo la sua <strong>di</strong>stanza<br />

dalla parola w ricevuta. Se la <strong>di</strong>stanza è d(p, w) ≤ h allora p è la parola corretta<br />

ossia deco<strong>di</strong>fichiamo w con la parola p e terminiamo la procedura <strong>di</strong> deco<strong>di</strong>fica.<br />

Se invece d(p, w) > h, consideriamo un altro elemento S2 ∈ U e ripetiamo la<br />

procedura. Ovviamente se in qualche passo t le componenti <strong>di</strong> w in<strong>di</strong>viduate da<br />

St ∈ U presentano un simbolo ripetuto, è certo che nella trasmissione si è verificato<br />

un errore e consideriamo imme<strong>di</strong>atamente un altro elemento <strong>di</strong> c<br />

Il seguente schema descrive l’Algoritmo <strong>di</strong> deco<strong>di</strong>fica sopra riportato.<br />

START<br />

Scelta <strong>di</strong> una<br />

k-upla <strong>di</strong><br />

Ricerca della parola p<br />

in<strong>di</strong>viduata dalla k-upla<br />

La <strong>di</strong>stanza <strong>di</strong> p dalla<br />

parola ricevuta è ≤ h<br />

SI<br />

STOP<br />

Scelta <strong>di</strong> un’altra<br />

k-upla <strong>di</strong><br />

EsempioFigura 8.4.1. widht Sia 11.5 G = cm P GL(2, per 9.0 7) cm e consideriamo l’uncovering U dell’esempio<br />

8.3.2. Supponiamo <strong>di</strong> trasmettere la parola (permutazione)<br />

e che venga ricevuta la parola<br />

NO<br />

g = 1 2 3 4 5 6 7 8<br />

w = 4 2 3 6 5 6 7 8 .<br />

Consideriamo S1 = (1, 2, 3) ∈ U e troviamo l’elemento <strong>di</strong> P GL(2, 7) che manda la<br />

terna (1, 2, 3) in (w1, w2, w3) = (4, 2, 3). E’ la parola<br />

p = 4 2 3 6 8 7 5 1.<br />

Poichè d(p, w) = 4, la parola p non si accetta. Consideriamo un altro elemento<br />

dell’uncovering, sia S2 = (4, 5, 6) ∈ U, in w le componenti relative ai posti in<strong>di</strong>cati<br />

da S2 sono (w4, w5, w6) = (6, 5, 6) perciò non può esservi nessuna permutazione <strong>di</strong>


4. ALGORITMO DI DECODIFICA PER GRUPPI STRETTAMENTE k-TRANSITIVI 96<br />

G con quei valori essedoci una ripetizione. Consideriamo quin<strong>di</strong> un altro elemento<br />

dell’uncovering, sia S3 = (2, 3, 7) ∈ U, in w nelle posizioni in<strong>di</strong>cate da S3 troviamo<br />

le componenti (2, 3, 7); in G la permutazione che manda (2, 3, 7) in (2, 3, 7) è la<br />

permutazione<br />

g = 1 2 3 4 5 6 7 8,<br />

poichè d(g, w) = 2 la parola è quella corretta per deco<strong>di</strong>ficare w.<br />

Per tutti i gruppi strettamente k-transitivi è possibile trovare degli uncoverings,<br />

fatta eccezione per il gruppo simmetrico Sn perchè la sua capacità correttiva è zero<br />

.<br />

Costruzione <strong>di</strong> un uncovering per il gruppo alterno.<br />

Consideriamo come co<strong>di</strong>ce il gruppo alterno An, esso è strettamente (n − 2)transitivo<br />

e pertanto è 1-correttore poichè risulta h = ⌊(n − k)/2⌋ = 1. Sia<br />

Ω = {1, 2, . . . , n}, per costruire un uncovering occorre determinare un insieme U i<br />

cui elementi sono degli (n−2)-sottoinsiemi <strong>di</strong> Ω con la proprietà che ogni elemento<br />

<strong>di</strong> Ω non appartenga ad almeno uno <strong>dei</strong> sottoinsiemi elementi <strong>di</strong> U.<br />

Sia T l’insieme i cui elementi sono coppie <strong>di</strong> elementi <strong>di</strong> Ω e definito come<br />

segue:<br />

• Se n è pari, consideriamo T costituito dalle 1n<br />

coppie <strong>di</strong>sgiunte <strong>di</strong> elementi<br />

2<br />

<strong>di</strong> Ω.<br />

• Se n è <strong>di</strong>spari, consideriamo T costituito dalle 1(n<br />

− 1) coppie <strong>di</strong>sgiunte<br />

2<br />

<strong>di</strong> elementi <strong>di</strong> Ω e dalla coppia formata dal rimanente elemento <strong>di</strong> Ω e da<br />

un qualsiasi altro elemento.<br />

Costruiamo il (n, n − 2, 1)-uncovering U considerando gli (n − 2)-sottoinsiemi <strong>di</strong> Ω<br />

che sono i complementari delle coppie appartenenti a T .<br />

Esempio 8.4.2. Consideriamo il gruppo alterno A7, il (7, 5, 1)-uncovering <strong>di</strong><br />

A7 costruito con il metodo precedente è il seguente<br />

U = {(3, 4, 5, 6, 7), (1, 2, 5, 6, 7), (1, 2, 3, 4, 7), (2, 3, 4, 5, 6)}.<br />

Supponiamo <strong>di</strong> trasmettere la permutazione<br />

e che venga ricevuta la parola<br />

g = 2 3 1 4 6 7 5<br />

w = 2 3 1 4 4 7 5<br />

in cui è presente un errore nella quinta posizione. Deco<strong>di</strong>fichiamo utilizzando<br />

l’uncovering U. Consideriamo S1 = (3, 4, 5, 6, 7) ∈ U e cerchiamo in A7 l’elemento<br />

che nei posti (3, 4, 5, 6, 7) ha come componenti rispettivamente (1, 4, 4, 7, 5) (ossia<br />

la permutazione che manda (3, 4, 5, 6, 7) rispettivamente in (1, 4, 4, 7, 5)). Poichè


5. I GRUPPI DI MATHIEU M11 E M12 97<br />

le componenti che stanno nel quarto e quinto posto sono uguali, in A7 non può<br />

esservi nessuna permutazione con quelle componenti.<br />

Consideriamo ora S2 = (1, 2, 5, 6, 7) ∈ U e cerchiamo in A7 l’elemento che<br />

nei posti (1, 2, 5, 6, 7) ha come componenti rispettivamente (2, 3, 4, 7, 5) (ossia la<br />

permutazione che manda (1, 2, 5, 6, 7) rispettivamente in (2, 3, 4, 7, 5)). E’ la permutazione<br />

p = 2 3 6 1 4 7 5<br />

(l’unica altra possibilità <strong>di</strong> permutazione su Ω sarebbe stata p ′ = 2 3 1 6 4 7 5 che<br />

è <strong>di</strong> classe <strong>di</strong>spari e dunque non appartenente ad A7).<br />

Poichè d(p, w) = 2(> h) la parola p non è accettata.<br />

Consideriamo ora S3 = (1, 2, 3, 4, 7) ∈ U e cerchiamo in A7 l’elemento che<br />

nei posti (1, 2, 3, 4, 7) ha come componenti rispettivamente (2, 3, 1, 4, 5) (ossia la<br />

permutazione che manda (1, 2, 3, 4, 7) rispettivamente in (2, 3, 1, 4, 5)). E’ la permutazione<br />

p = 2 3 1 4 6 7 5.<br />

Poichè d(p, w) = 1(≤ h) la parola p è accettata ossia deco<strong>di</strong>fichiamo w con p che<br />

è proprio la parola g trasmessa.<br />

Nota 8.4.3. Il metodo <strong>di</strong> deco<strong>di</strong>fica descritto con l’algoritmo presentato in<br />

questo paragrafo, non è il metodo <strong>di</strong> deco<strong>di</strong>fica noto come permutation deco<strong>di</strong>ng .<br />

5. I gruppi <strong>di</strong> Mathieu M11 e M12<br />

I gruppi <strong>di</strong> Mathieu sono cinque gruppi finiti scoperti dal matematico francese<br />

Emile Mathieu (1835 − 1890). Questi gruppi vengono denotati con Mn, per i<br />

valori n = 11, 12, 22, 23, 24. In particolare, M12 è strettamente 5-transitivo e ha<br />

grado 12; M11 è lo stabilizzatore <strong>di</strong> un elemento <strong>di</strong> M12 e pertanto è strettamente<br />

4-transitivo e <strong>di</strong> grado 11. Esistono vari meto<strong>di</strong> per costruirli, ma, per M12, quello<br />

presentato per il seguente schema è sicuramente il più semplice da ricordare 4<br />

4 Le origini <strong>di</strong> questo <strong>di</strong>agramma sono nella teoria <strong>di</strong> Groethen<strong>di</strong>eck ′′ dessin d’enfants ′′ . G.<br />

Jones,1998; Characters and syrfaces: a survey. The Atlas of finite Groups: Ten Years On<br />

(eds Curtis e Wilson), London Mathematical Society Lecture Notes Series (249). Cambridge<br />

University Press .


5. I GRUPPI DI MATHIEU M11 E M12 98<br />

1 2<br />

10 12<br />

Figura widht 4.0 cm per 7.0 cm<br />

9<br />

3<br />

4<br />

7<br />

8<br />

5 6<br />

11<br />

Generatori per M12<br />

Il gruppo M12 è generato dalle due permutazioni ottenute nel seguente modo:<br />

• Una permutazione è la composizione <strong>dei</strong> 2-cicli formati dai numeri che<br />

sono alle estremità <strong>dei</strong> segmenti rappresentati con ◮—◭ ossia<br />

(1 2)(3 4)(5 6)(7 8)(9 10)(11 12).<br />

• L’altra permutazione è la composizione <strong>dei</strong> 3-cicli ottenuti leggendo in<br />

senso antiorario i numeri posti attorno ai punti rappresentati con • ossia<br />

(1 3 2)(4 7 5)(8 9 11).<br />

M12 è strettamente 5-transitivo su n = 12 elementi, ha <strong>di</strong>stanza minima d =<br />

12 − 5 + 1 = 8 e pertanto è 3-correttore.<br />

M11 è strettamente 4-transitivo su n = 11 elementi, ha <strong>di</strong>stanza minima d =<br />

11 − 4 + 1 = 8 e pertanto è 3-correttore.<br />

Se i gruppi M12 e M11 sono utilizzati come co<strong>di</strong>ci, essendo strettamente transitivi,<br />

per la loro deco<strong>di</strong>fica si può usare il metodo degli uncoverings. Riportiamo <strong>di</strong><br />

seguito un (12, 5, 3)-uncovering per M12 e un (11, 4, 3)-uncovering per M11.<br />

(12, 5, 3)-uncovering per M12<br />

(11, 4, 3)-uncovering per M11<br />

1 2 3 4 5 1 2 3 4<br />

1 2 6 11 12 1 2 5 6<br />

1 3 7 8 9 3 4 5 6<br />

1 4 6 7 10 7 8 9 10<br />

1 5 8 9 11 7 8 9 11<br />

2 4 8 9 12 7 8 10 11<br />

2 5 7 10 11 7 9 10 11<br />

3 4 7 11 12 8 9 10 11<br />

3 5 6 10 12<br />

3 6 8 9 11<br />

6 7 8 9 10


6. ESTENSIONE A GRUPPI NON STRETTAMENTE k-TRANSITIVI 99<br />

6. Estensione a gruppi non strettamente k-transitivi<br />

L’algoritmo presentato nel paragrafo 8.4 vale per i gruppi strettamente ktransitivi,<br />

tuttavia è possibile darne una generalizzazione applicabile ai gruppi<br />

non strettamente k-transitivi.<br />

Definizione 8.6.1. Sia G un gruppo su un insieme finito A. Una base per G<br />

è un insieme B = {x1, . . . , xb} ⊆ A tale che G(x1,...,xb) =< 1 >, ossia lo stabilizzatore<br />

<strong>di</strong> B è l’elemento identità. Una base non ridondante è una base tale che<br />

G(x1,...,xi,xi+1) = G(x1,...,xi) per i = 1, . . . , b − 1.<br />

Esempio 8.6.2. In un gruppo G strettamente k-transitivo su A, ogni k-pla <strong>di</strong><br />

elementi <strong>di</strong> A costituisce una base non ridondante.<br />

Esempio 8.6.3. Sia G = GL(n, q) il gruppo generale lineare che agisce sui<br />

vettori non nulli <strong>di</strong> F n q . Una base dello spazio vettoriale F n q costituisce una base<br />

non ridondante per G.<br />

Teorema 8.6.4. Sia G un gruppo e sia (x1, . . . , xb) una sua base. Considerati<br />

due elementi g, h ∈ G, se (x1, . . . , xb) g = (x1, . . . , xb) h allora g = h, ossia<br />

l’azione <strong>di</strong> un elemento g ∈ G su una base (x1, . . . , xb) determina univocamente<br />

quell’elemento.<br />

Dimostrazione. Siano g, h ∈ G e sia (x1, . . . , xb) una base <strong>di</strong> G. Se x g<br />

i =<br />

x h i per ogni i = 1, . . . , b, allora x gh−1<br />

i = xi per ogni i = 1, . . . , b, ossia gh −1 ∈<br />

G(x1,...,xb) =< 1 >, e pertanto gh −1 = 1 da cui segue g = h. <br />

Il teorema ora <strong>di</strong>mostrato assicura che se un gruppo G viene utilizzato come<br />

co<strong>di</strong>ce e nella trasmissione si riceve una parola contenente errori in posizioni <strong>di</strong>verse<br />

da quelle in<strong>di</strong>viduate da una base, nella operazione <strong>di</strong> deco<strong>di</strong>fica gli errori vengono<br />

corretti. Ne consegue che per generalizzare l’algoritmo <strong>di</strong> deco<strong>di</strong>fica presentato nel<br />

paragrafo 8.4 per i gruppi strettamente k-transitivi, basta sostituire ′′ k-pla ′′ con<br />

′′ base ′′ . La nozione <strong>di</strong> ′′ uncovering ′′ dovrà invece essere sostituita con quella più<br />

generale <strong>di</strong> ′′ uncovering-by-bases ′′ .<br />

Definizione 8.6.5. Sia G un gruppo su A, |A| = n, con capacità correttiva h.<br />

Si <strong>di</strong>ce che U è un uncovering-by-bases per G se U è un insieme <strong>di</strong> basi per G<br />

tali che ogni h-sottoinsieme <strong>di</strong> A è <strong>di</strong>sgiunto da almeno una base.


6. ESTENSIONE A GRUPPI NON STRETTAMENTE k-TRANSITIVI 100<br />

Chiaramente, nel caso in cui G sia un gruppo strettamente k-transitivo, un<br />

uncovering-by-bases è un (n, k, h)-uncovering.<br />

L’algoritmo che utilizza gli uncovering-by-bases si <strong>di</strong>fferenzia da quello che<br />

utilizza gli uncovering per due aspetti<br />

• ammette la possibilità che le basi dell’uncovering abbiano <strong>di</strong>mensioni<br />

<strong>di</strong>verse;<br />

• l’esistenza <strong>di</strong> un elemento del gruppo che, nelle posizioni in<strong>di</strong>viduate da<br />

una data base, concor<strong>di</strong> con la parola ricevuta non assicura la correttezza<br />

e pertanto l’algoritmo include un controllo <strong>di</strong> non esistenza.<br />

Algoritmo <strong>di</strong> deco<strong>di</strong>fica<br />

Sia G un gruppo <strong>di</strong> permutazioni su A, |A| = n. Sia U un uncovering-by-bases <strong>di</strong><br />

G.<br />

Supponiamo <strong>di</strong> ricevere la parola w = w1w2 . . . wn. Consideriamo una base<br />

B1 ∈ U e per i ∈ B1 analizziamo le componenti wi della parola ricevuta . Innanzitutto<br />

controlliamo che, in quelle posizioni, non ci siano simboli ripetuti. Supposto<br />

che queste componenti siano tutte <strong>di</strong>stinte, verifichiamo se in G esiste un elemento<br />

che manda wi nel posto i, per ogni i ∈ B1, ossia se c’è una parola del co<strong>di</strong>ce con<br />

componente wi nel posto i, per ogni i ∈ B1. Se questa parola esiste, sia p. Calcoliamo<br />

la sua <strong>di</strong>stanza dalla parola w ricevuta. Se la <strong>di</strong>stanza è d(p, w) ≤ h allora<br />

possiamo concludere che la parola trasmessa è p ossia deco<strong>di</strong>fichiamo w con la parola<br />

p e terminiamo la procedura <strong>di</strong> deco<strong>di</strong>fica. Se invece d(p, w) > h, consideriamo<br />

un’altra base B2 ∈ U e ripetiamo la procedura. Ovviamente se in qualche passo t<br />

le componenti <strong>di</strong> w in<strong>di</strong>viduate da St ∈ U presentano un simbolo ripetuto, è certo<br />

che nella trasmissione si è verificato un errore e consideriamo imme<strong>di</strong>atamente<br />

un’altra base.<br />

Non è detto che per un qualunque gruppo G esista sempre un uncovering-bybases,<br />

ma, come assicura il prossimo teorema, ciò è vero per ogni gruppo finito.<br />

Teorema 8.6.6. Per ogni gruppo finito G su un insieme A, |A| = n, esiste<br />

sempre un uncovering-by-bases.<br />

Dimostrazione. Sia d la <strong>di</strong>stanza minima <strong>di</strong> G, h = ⌊(d−1)/2⌋. Supponiamo<br />

per assurdo che esista un h-sottoinsieme R ⊆ A che intersechi ogni base <strong>di</strong> G. Allora<br />

lo stabilizzatore puntuale <strong>di</strong> ¯ R = A\R non è banale perchè ¯ R non contiene una<br />

base. Esiste pertanto g ∈ G, g <strong>di</strong>verso dall’ identità, che fissa ¯ R punto per punto<br />

e perciò |F ix(g)| ≥ | ¯ R| = n − r. Ma il massimo numero <strong>di</strong> punti fissati da un<br />

elemento che non sia l’identità è n − d < n − r e pertanto si ha un assurdo. <br />

Si noti che il teorema ora <strong>di</strong>mostrato assicura solo l’esistenza <strong>di</strong> un uncoveringby-bases<br />

ma non fornisce nessuna in<strong>di</strong>cazione costruttiva.


7. SIMBOLI RIPETUTI 101<br />

7. Simboli ripetuti<br />

Supponiamo <strong>di</strong> usare un gruppo come co<strong>di</strong>ce e <strong>di</strong> trasmettere pertanto come<br />

parola una permutazione. Se la parola ricevuta contiene errori, allora potrebbe non<br />

essere più una permutazione, ossia potrebbe contenere uno o più simboli ripetuti.<br />

Esaminiamo come i simboli ripetuti possono aiutare nella deco<strong>di</strong>fica, in particolare<br />

possono essere <strong>di</strong> aiuto nel ridurre il numero <strong>di</strong> passi da eseguire. Per illustrare<br />

questo, utilizziamo il caso del gruppo <strong>di</strong> Mathieu M12. La <strong>di</strong>mensione <strong>di</strong> questo<br />

co<strong>di</strong>ce è tale che le possibilità in cui possono presentarsi gli errori sono in numero<br />

sufficientemente piccolo da poterle esaminare una ad una. Per co<strong>di</strong>ci più gran<strong>di</strong>,<br />

si può comunque applicare quanto illustreremo per M12, basta isolare nelle parole<br />

alcune cifre dove sappiamo esserci un errore e applicare un algoritmo simile alle<br />

rimanenti cifre per in<strong>di</strong>viduare errori e in un numero minore <strong>di</strong> passi.<br />

Consideriamo il gruppo M12, ricor<strong>di</strong>amo che M12 ha capacità correttiva 3. Per<br />

la deco<strong>di</strong>fica, se una parola ricevuta è una permutazione allora applichiamo l’Algoritmo<br />

presentato nel paragrafo 8.4. Se si riceve una parola che non è una permutazione,<br />

si può migliorare l’algoritmo andando a considerare i posti dove figurano<br />

simboli ripetuti. Ad esempio, se i tre errori sono tre repliche dello stesso simbolo<br />

(il simbolo si presenta quin<strong>di</strong> quattro volte), allora sappiamo che i rimanenti<br />

otto simboli sono corretti e perciò (essendo il gruppo strettamente 5-transitivo)<br />

possiamo imme<strong>di</strong>atamente trovare l’unica parola del co<strong>di</strong>ce in<strong>di</strong>viduata da una<br />

qualunque 5-pla presa fra gli otto simboli corretti. In un solo passo si è così giunti<br />

a deco<strong>di</strong>ficare correttamente la parola ricevuta, un notevole miglioramento.<br />

Analizziamo nel dettaglio il caso del gruppo M12 quando la parola ricevuta non<br />

è una permutazione. Supponiamo venga trasmessa la parola identità<br />

1 2 3 4 5 6 7 8 9 10 11 12<br />

1 ◦ caso: la parola ricevuta contiene tre errori.<br />

• Un simbolo ripetuto, due simboli spostati:<br />

esempio: 1 1 4 3 5 6 7 8 9 10 11 12<br />

Occorre un (10, 5, 2)-uncovering perchè sappiamo che almeno uno <strong>dei</strong> due<br />

1 è un errore.<br />

• Due <strong>di</strong>versi simboli ripetuti, un simbolo spostato:<br />

esempio: 1 1 3 3 2 6 7 8 9 10 11 12<br />

Occorre un (8, 5, 1)-uncovering.<br />

• Tre <strong>di</strong>versi simboli ripetuti:<br />

esempio: 1 1 3 3 5 5 7 8 9 10 11 12<br />

Sappiamo che ci sono tre errori nelle prime sei posizioni, possiamo quin<strong>di</strong><br />

considerare cinque qualsiasi delle ultime sei posizioni per in<strong>di</strong>viduare la<br />

parola del co<strong>di</strong>ce trasmessa.


7. SIMBOLI RIPETUTI 102<br />

• Un simbolo ripetuto tre volte:<br />

esempio: 1 1 1 1 5 6 7 8 9 10 11 12<br />

Possiamo considerare cinque qualsiasi delle ultime otto posizioni per in<strong>di</strong>viduare<br />

la parola del co<strong>di</strong>ce trasmessa.<br />

• Un simbolo ripetuto due volte, un altro simbolo ripetuto:<br />

esempio: 1 1 1 4 4 6 7 8 9 10 11 12<br />

Possiamo considerare cinque qualsiasi delle ultime sette posizioni per<br />

in<strong>di</strong>viduare la parola del co<strong>di</strong>ce trasmessa.<br />

• Un simbolo ripetuto due volte, un simbolo spostato:<br />

esempio: 1 1 1 2 5 6 7 8 9 10 11 12<br />

Occorre un (9, 5, 1)-uncovering.<br />

• Un simbolo ripeturo due volte, entrambi in posizioni non corrette, un<br />

simbolo spostato:<br />

esempio: 3 3 1 4 5 6 7 8 9 10 11 12<br />

Occorre un (10, 5, 2)-uncovering.<br />

2 ◦ caso: la parola ricevuta contiene due errori.<br />

• Due simboli ripetuti:<br />

esempio: 1 1 3 3 5 6 7 8 9 10 11 12<br />

Occorre un (8, 5, 1)-uncovering perchè sappiamo che almeno uno <strong>dei</strong> due<br />

1 è un errore.<br />

• Un simbolo ripetuto due volte:<br />

esempio: 1 1 1 4 5 6 7 8 9 10 11 12<br />

Occorre un (9, 5, 1)-uncovering.<br />

3 ◦ caso: la parola ricevuta contiene un errore.<br />

• Un simbolo ripetuto:<br />

esempio: 1 1 3 4 5 6 7 8 9 10 11 12<br />

Occorre un (10, 5, 1)-uncovering.<br />

Riportiamo gli uncovering che, dall’analisi fatta, occorrono per la deco<strong>di</strong>fica.


8. OTTIMIZZAZIONE 103<br />

(12, 5, 3)-uncovering per M12<br />

(10, 5, 2)-uncovering per M12<br />

1 2 3 4 5 1 2 3 4 5<br />

1 2 6 11 12 1 2 7 8 10<br />

1 3 7 8 9 1 5 6 7 9<br />

1 4 6 7 10 2 3 6 8 9<br />

1 5 8 9 11 3 4 7 9 10<br />

2 4 8 9 12 4 5 6 8 10<br />

2 5 7 10 11<br />

3 4 7 11 12<br />

3 5 6 10 12<br />

3 6 8 9 11<br />

6 7 8 9 10<br />

(9, 5, 1)-uncovering per M12<br />

(8, 5, 1)-uncovering per M12<br />

1 2 3 4 5 1 2 3 4 5<br />

1 6 7 8 9 1 2 6 7 8<br />

5 6 7 8 9 4 5 6 7 8<br />

8. Ottimizzazione<br />

Fino ad ora, quando si è considerato un uncovering-by-bases non si è tenuto<br />

conto in quale or<strong>di</strong>ne prendere le basi. Tuttavia, applicando l’algoritmo <strong>di</strong> deco<strong>di</strong>fica,<br />

l’or<strong>di</strong>ne con cui si considerano le basi è importante perchè influisce sui tempi<br />

<strong>di</strong> prestazione. Sebbene gli uncovering siano sempre stati presentati in or<strong>di</strong>ne lessicografico,<br />

non c’è ragione per cui questo or<strong>di</strong>namento debba essere usato nella<br />

pratica. Ve<strong>di</strong>amo come or<strong>di</strong>nare un uncovering-by-bases in modo ottimale.<br />

Sia G un gruppo <strong>di</strong> grado n e capacità correttiva h. Sia U, |U| = u, un<br />

uncovering-by-bases così or<strong>di</strong>nato: (B1, B2, . . . , Bu). Per un dato insieme E, |E| ≤<br />

h, <strong>di</strong> posizioni d’errore, in<strong>di</strong>chiamo con i il numero delle prove che si devono effettuare<br />

per trovare la prima base <strong>di</strong>sgiunta da E (quin<strong>di</strong> i è il numero <strong>di</strong> volte in<br />

cui deve essere eseguito l’algoritmo). Possiamo allora calcolare il numero me<strong>di</strong>o <strong>di</strong><br />

prove, che <strong>di</strong>penderà dall’or<strong>di</strong>ne con cui si prendono le basi.<br />

Per contare il numero me<strong>di</strong>o delle prove necessarie per j ≤ h errori, definiamo<br />

la successione sj = (s1j, s2j, . . . , suj), dove sij è il numero <strong>di</strong> sottoinsiemi <strong>di</strong> or<strong>di</strong>ne


8. OTTIMIZZAZIONE 104<br />

j <strong>di</strong> {1, 2, . . . , n} <strong>di</strong>sgiunti da Bi ma non da B1, . . . , Bi−1. Pertanto il numero me<strong>di</strong>o<br />

<strong>di</strong> prove è<br />

aj =<br />

u i=1 isij<br />

n j<br />

.<br />

Esempio 8.8.1. Si consideri il gruppo <strong>di</strong> Mathieu M12, esso ha grado 12 e capacità<br />

correttiva 3. Consideriamo il (12, 5, 3)-uncovering del paragrafo precedente<br />

in or<strong>di</strong>ne lessicografico. Supponiamo che si verifichino tre errori e <strong>di</strong> ricevere la<br />

sequenza<br />

35, 31, 30, 23, 17, 21, 20, 15, 17, 8, 3<br />

Utilizzando la formula precedente troviamo che il numero me<strong>di</strong>o <strong>di</strong> prove è a3 =<br />

1016<br />

220 .<br />

Un modo per ottimizzare l’or<strong>di</strong>ne con cui considerare gli elementi <strong>di</strong> un uncovering,<br />

è quello <strong>di</strong> minimizzare il numero ah. In generale non è un problema <strong>di</strong><br />

facile risoluzione, tuttavia, esiste un metodo relativamente semplice per migliorare<br />

l’efficienza <strong>di</strong> un dato or<strong>di</strong>namento.<br />

Algoritmo <strong>di</strong> deco<strong>di</strong>fica ′′ ottimizzato ′′<br />

Consideriamo l’uncovering nell’or<strong>di</strong>ne (B1, B2, . . . , Bu) che determina la successione<br />

s = (s1, s2, . . . , su). Assumiamo j = h e supponiamo s1 ≥ s2 ≥ . . . ≥ sl e<br />

che sia<br />

sl < sl+1<br />

ovvero che sia il primo punto in cui la successione si incrementa. Otteniamo un<br />

nuovo or<strong>di</strong>namento (B ′ 1, B ′ 2, . . . , B ′ u) scambiando Bl e Bl+1 e lasciando inalterati<br />

tutti gli altri elementi. In questo modo abbiamo<br />

B ′ 1 = B1, . . . , B ′ l−1 = Bl−1<br />

B ′ l = Bl+1, B ′ l+1 = Bl<br />

B ′ l+2 = Bl+2, . . . , B ′ u = Bu<br />

Questo nuovo or<strong>di</strong>namento genera la successione s = (s ′ 1, . . . , s ′ u. Osserviamo<br />

che:<br />

• s ′ 1 = s1, . . . , s ′ l−1 e s′ l+2 = sl+2, . . . , s ′ u = su;<br />

• s ′ l ≥ sl+1 e s ′ l+1 ≤ sl;<br />

• s ′ l + s′ l+1 = sl + sl+1.<br />

Questo nuovo or<strong>di</strong>ne è effettivamente un miglioramento, come assicura il seguente<br />

teorema.<br />

.


8. OTTIMIZZAZIONE 105<br />

Teorema 8.8.2. Con riferimento alle notazioni sopra riportate, si ha<br />

u<br />

is ′ u<br />

i < isi.<br />

i=1<br />

Dimostrazione. Poichè s ′ 1 = s1, . . . , s ′ l−1 e s′ l+2 = sl+2, . . . , s ′ u = su, è sufficiente<br />

mostrare che<br />

i=1<br />

ls ′ l + (l + 1)s ′ l+1 < lsl + (l + 1)sl+1.<br />

Dalle <strong>di</strong>suguaglianze sl < sl+1, s ′ l ≥ sl+1 e s ′ l+1 ≤ sl, si ha sl < sl+1 ≤ s ′ l , pertanto<br />

s ′ l = sl + d per qualche d > 0. Ricordando che s ′ l + s′ l+1 = sl + sl+1, otteniamo<br />

s ′ l − sl = sl+1 − s ′ l+1 = d.<br />

Pertanto si ha che l(s ′ l − sl = l(sl+1 − s ′ l+1 ) < (l + 1)(sl+1 − s ′ l+1 ), da cui otteniamo<br />

ls ′ l + (l + 1)s ′ l+1 < lsl + (l + 1)sl+1.<br />

Rimane dunque provato che l’algoritmo <strong>di</strong> deco<strong>di</strong>fica ′′ ottimizzato ′′ precedentemente<br />

riportato, riduce effettivamente il numero me<strong>di</strong>o <strong>di</strong> prove. Possiamo<br />

pertanto iterarlo per ottenere una successione decrescente.<br />

Esempio 8.8.3. Consideriamo l’uncovering dell’esempio 8.8.1. Il quinto termine<br />

della successione ottenuta è più piccolo del sesto e perciò cambiamo l’or<strong>di</strong>ne<br />

nell’uncovering scambiando la quinta base con la sesta, otteniamo<br />

(12, 5, 3)-uncovering per M12<br />

1 2 3 4 5<br />

1 2 6 11 12<br />

1 3 7 8 9<br />

1 4 6 7 10<br />

2 4 8 9 12<br />

1 5 8 9 11<br />

2 5 7 10 11<br />

3 4 7 11 12<br />

3 5 6 10 12<br />

3 6 8 9 11<br />

6 7 8 9 10<br />

Questo nuovo or<strong>di</strong>ne genera la seguente successione:<br />

35, 31, 30, 23, 23, 15, 20, 15, 17, 8, 3.


8. OTTIMIZZAZIONE 106<br />

Iteriamo poi l’algoritmo <strong>di</strong> deco<strong>di</strong>fica ′′ ottimizzato ′′ finchè non otteniamo il seguente<br />

or<strong>di</strong>ne:<br />

(12, 5, 3)-uncovering per M12<br />

1 2 3 4 5<br />

1 2 6 11 12<br />

1 3 7 8 9<br />

1 4 6 7 10<br />

2 4 8 9 12<br />

2 5 7 10 11<br />

3 5 6 10 12<br />

3 4 7 11 12<br />

1 5 8 9 11<br />

3 6 8 9 11<br />

6 7 8 9 10<br />

che genera la seguente successione decrescente:<br />

35, 31, 30, 23, 23, 23, 20, 13, 11, 8, 3.<br />

Con questo or<strong>di</strong>ne il numero me<strong>di</strong>o <strong>di</strong> prove (per tre errori) è ora 988<br />

220 .<br />

Si noti che il teorema 8.8.2 non assicura l’esistenza <strong>di</strong> or<strong>di</strong>namento migliore,<br />

ma assicura che il miglior or<strong>di</strong>namento possibile eve generare una successione decrescente.<br />

Un’esaustiva ricerca fatta utilizzando GAP, ha rivelato che per M12 il<br />

valore minimo per il numero me<strong>di</strong>o <strong>di</strong> prove è 959 e che 288 degli 11! possibili<br />

220<br />

or<strong>di</strong>namenti generano quel valore. possibili or<strong>di</strong>namenti generano quel valore.


CAPITOLO 9<br />

Elementi <strong>di</strong> Crittografia<br />

Da sempre, soprattutto in tempi <strong>di</strong> guerra, si è sentita la necessità <strong>di</strong> trovare<br />

stratagemmi per inviare messaggi in modo da non farli scoprire all’avversario. Un<br />

modo può essere quello <strong>di</strong> nascondere il messaggio: questa tecnica prende il nome<br />

<strong>di</strong> stenografia. Un altro modo per spe<strong>di</strong>re un messaggio senza che il nemico lo<br />

possa capire, si ottiene nascondendo non il messaggio ma il suo significato: in<br />

questo caso si parla <strong>di</strong> crittografia.<br />

1. Introduzione<br />

Compito primario della crittografia è quello <strong>di</strong> fornire strumenti che permettano<br />

la trasmissione <strong>di</strong> informazioni in modo che solo persone autorizzate siano in grado<br />

<strong>di</strong> capirle.<br />

Il problema <strong>di</strong> sviluppare meto<strong>di</strong> efficienti per comunicare in modo segreto e sicuro<br />

è <strong>di</strong>ventato estremamente attuale con lo sviluppo <strong>dei</strong> sistemi <strong>di</strong> comunicazione<br />

(in particolare <strong>di</strong> quelli elettronici e informatici).<br />

GLOSSARIO <strong>di</strong> CRITTOGRAFIA<br />

Testo in chiaro, messaggio in chiaro: Messaggio originale che si vuole<br />

mandare in modo segreto, oppure stringa <strong>di</strong> simboli che rappresenta il messaggio<br />

o il testo che si vuole cifrare.<br />

Testo cifrato, messaggio cifrato: Versione alterata, nascosta del testo in<br />

chiaro.<br />

Crittare, cifrare, crittografare: Passare dal testo in chiaro al testo cifrato.<br />

Decifrare : Passare dal testo cifrato al testo in chiaro.<br />

Cifratura : Metodo usato per mo<strong>di</strong>ficare il testo in chiaro nel testo cifrato.<br />

107


1. INTRODUZIONE 108<br />

Decifratura : Passaggio dal testo cifrato al testo in chiaro, si tratta del<br />

processo inverso della cifratura.<br />

Chiave : Determina una ben precisa trasformazione <strong>di</strong> cifratura, ma anche la<br />

regola inversa <strong>di</strong> decifratura, fra tutte quelle possibili che si possono usare: nel<br />

primo caso si parla <strong>di</strong> chiave per cifrare, nel secondo <strong>di</strong> chiave per decifrare.<br />

Crittologia : Scienza della cifratura <strong>dei</strong> messaggi.<br />

Crittoanalisi : Scienza dell’interpretazione <strong>di</strong> messaggi cifrati.<br />

Compito del crittologo è <strong>di</strong> inventare sistemi (detti crittosistemi) per trasformare<br />

un messaggio in chiaro in un messaggio cifrato. Compito del crittoanalista<br />

è <strong>di</strong> contrastare questa operazione trovando <strong>dei</strong> mo<strong>di</strong> per interpretare i messaggi<br />

cifrati riportandoli in chiaro senza autorizzazione.<br />

Messaggi Unitari : Generalmente i messaggi, sia quelli in chiaro sia quelli<br />

cifrati, vengono spezzati in messaggi unitari che possono essere costituiti da una<br />

singola lettera o da blocchi <strong>di</strong> lettere. Il vantaggio <strong>di</strong> <strong>di</strong>videre un messaggio in<br />

blocchi <strong>di</strong> lunghezza prefissata è quello <strong>di</strong> evitare la possibilità <strong>di</strong> riconoscere facilmente<br />

inizio e fine <strong>di</strong> parole, rendendo così più <strong>di</strong>fficile la crittoanalisi basata sulle<br />

frequenze.<br />

Crittografia simmetrica : Sin dall’antichità, i meto<strong>di</strong> classici per cifrare<br />

sono costruiti in modo che mittente e destinatario abbiano una chiave comune con<br />

la quale il mittente cifra e il destinatario decifra; un algoritmo <strong>di</strong> questo tipo si<br />

<strong>di</strong>ce simmetrico.<br />

Crittografia asimmetrica o a Chiave Pubblica : Occorrono più <strong>di</strong> due<br />

millenni per arrivare ad una grande svolta nella crittografia, ciò avviene nel 1975<br />

con l’introduzione <strong>di</strong> algoritmi in cui solo il destinatario ha bisogno <strong>di</strong> una chiave<br />

segreta; questo tipo <strong>di</strong> algoritmo è detto asimmetrico o a chiave pubblica. I sistemi<br />

asimmetrici furono proposti da W.Diffie e M. Hellman dell’Università <strong>di</strong> Stanford<br />

in un lavoro del 1976 dal titolo New <strong>di</strong>rections in Cryptography.<br />

In un cifrario a chiave pubblica, per calcolare in un tempo ragionevolmente<br />

breve la decifratura <strong>di</strong> un messaggio, è necessario essere in possesso <strong>di</strong> altre informazioni<br />

oltre a quelle rese pubbliche, ossia, per decifrare senza avere opportune<br />

informazioni aggiuntive occorre un tempo <strong>di</strong> calcolo incre<strong>di</strong>bilmente lungo. Anche<br />

i sistemi asimmetrici sono comunque attaccabili e nella prospettiva <strong>di</strong> computer<br />

con capacità <strong>di</strong> calcolo molto più avanzate rispetto a quelle attuali, la crittografia<br />

si sta orientando verso nuove metodologie che trovano riferimento nella crittografia<br />

quantistica.


2. CRITTOSISTEMI A CHIAVE PUBBLICA 109<br />

Crittografia Quantistica : La crittografia quantistica rappresenta, dopo<br />

quella a chiave pubblica, una seconda vera rivoluzione perchè, ad oggi, risulta<br />

inattaccabile. La crittografia quantistica sfrutta delle peculiarità della meccanica<br />

quantistica nella fase dello scambio delle chiavi per evitare che queste possano<br />

essere intercettate da un attaccante senza che i due interlocutori se ne accorgano.<br />

Il principio che sta alla base della crittografia quantistica è il principio <strong>di</strong> indeterminazione<br />

<strong>di</strong> Heisenberg. Questo principio afferma che non è possibile conoscere,<br />

simultaneamente e con precisione assoluta, alcune particolari coppie <strong>di</strong> caratteristiche<br />

<strong>di</strong> un oggetto quantistico, come ad esempio la posizione e la velocità <strong>di</strong> un<br />

elettrone. Se si cerca <strong>di</strong> misurare esattamente la posizione, si perde la possibilità<br />

<strong>di</strong> verificare la velocità dell’elettrone. Se invece si misura con precisione assoluta<br />

la velocità, si perdono inevitabilmente informazioni sul luogo in cui l’elettrone si<br />

trova.<br />

Secondo la meccanica quantistica, per quante tecniche nuove e più precise si<br />

possano sviluppare per eseguire queste misure, il limite rimane e non è concettualmente<br />

eliminabile.<br />

Realizzando una chiave quantistica (cioè realizzata con elementi come i fotoni<br />

che rispondono alle leggi della meccanica quantistica) chi volesse, non autorizzato,<br />

cercare <strong>di</strong> decriptare il messaggio, mo<strong>di</strong>ficherebbe inevitabilmente la chiave,<br />

oltretutto in maniera puramente casuale quin<strong>di</strong> incontrollabile e verrebbe quin<strong>di</strong><br />

certamente scoperto. Nell’ambito della crittografia quantistica, un algoritmo che<br />

permette lo scambio <strong>di</strong> una chiave tra due utenti e garantisce che questa non possa<br />

essere intercettata da terzi senza che i due interlocutori se ne accorgano, è chiamato<br />

BB84, dal nome <strong>dei</strong> suoi ideatori: Bennet e Brassard che lo realizzarono nel<br />

1984.<br />

2. Crittosistemi a chiave pubblica<br />

I sistemi <strong>di</strong> crittografia a chiave pubblica, come già detto, sono stati ideati da<br />

Diffie e Hellman nel 1975. Essi utilizzano una chiave pubblica che permette la cifratura<br />

ma non la decifratura <strong>di</strong> un messaggio. Ogni utente pubblica la propria chiave<br />

<strong>di</strong> cifratura per permettere a chiunque voglia comunicare con lui segretamente <strong>di</strong><br />

poterlo fare.<br />

Per descrivere i cifrari a chiave pubblica, supponiamo che ogni partecipante P<br />

al sistema <strong>di</strong> cifratura abbia una coppia <strong>di</strong> chiavi:<br />

• una chiave pubblica C = CP per cifrare;<br />

• una chiave privata (segreta) D = DP per decifrare;


3. VANTAGGI, SVANTAGGI, APPLICAZIONI DEI CRITTOSISTEMI A CHIAVE PUBBLICA110<br />

con la proprietà che non è possibile calcolare DP conoscendo CP . Tutte le chiavi<br />

pubbliche sono utilizzabili pubblicamente, esse possono essere raccolte in un archivio<br />

pubblico al pari <strong>di</strong> un elenco telefonico. Al contrario le chiavi private sono<br />

note solo ai loro proprietari.<br />

Per como<strong>di</strong>tà denotiamo con C(m) il testo cifrato ottenuto dal messaggio m<br />

usando la chiave C.<br />

Supponiamo che ogni partecipante ad un sistema <strong>di</strong> cifratura asimmetrica abbia<br />

sia la chiave pubblica sia quella privata:<br />

(1) Se P1 vuole mandare il messaggio m a P2, allora P1<br />

• trova la chiave pubblica CP2 <strong>di</strong> P2,<br />

• cifra il messaggio m usando CP2,<br />

• manda CP2(m) a P2.<br />

(2) P2 è in grado <strong>di</strong> decifrare il testo cifrato CP2(m) poichè P2 (e solo P2)<br />

conosce la chiave DP2 :<br />

DP2(CP2(m)) = m.<br />

(3) Nessun altro partecipante può decifrare CP2(m), perchè nessuno può dedurre<br />

DP2 nè da CP2 nè da CP2(m).<br />

3. Vantaggi, svantaggi, applicazioni <strong>dei</strong> crittosistemi a chiave pubblica<br />

Vantaggi<br />

I vantaggi offerti dai sistemi <strong>di</strong> cifratura a chiave pubblica sono molteplici.<br />

• Non è necessario nessun scambio <strong>di</strong> chiavi tra i partecipanti. Si può mandare<br />

un messaggio segreto senza nessun bisogno <strong>di</strong> scegliere prima, insieme<br />

al destinatario, una chiave segreta.<br />

• Occorre un numero <strong>di</strong> chiavi relativamente piccolo. Usando sistemi simmetrici,<br />

ogni coppia <strong>di</strong> partecipanti deve avere una chiave segreta personale,<br />

quin<strong>di</strong> se ci sono n partecipanti occorrono n(n−1)<br />

2<br />

chiavi <strong>di</strong>verse. Invece,<br />

usando un algoritmo asimmetrico, ogni partecipante ha bisogno <strong>di</strong> sole<br />

due chiavi e solo una <strong>di</strong> queste deve essere tenuta segreta, quin<strong>di</strong> con n<br />

partecipanti il numero delle chiavi è solo 2n.<br />

• Nuovi utenti possono entrare nel sistema senza alcun problema per i vecchi.<br />

Invece con un sistema simmetrico, se entra un nuovo utente, tutti i<br />

vecchi partecipanti devono scambiare una chiave segreta con lui. In un<br />

sistema asimmetrico, i vecchi utenti non devono scambiare alcun dato con<br />

il neoutente.


4. IL SISTEMA RSA 111<br />

Svantaggi<br />

• Nessun algoritmo asimmetrico è inattaccabile e allo stesso tempo veloce.<br />

• Un algoritmo a chiave pubblica richiede la custo<strong>di</strong>a <strong>di</strong> chiavi e pertanto<br />

ci deve essere la garanzia che le chiavi pubbliche siano autentiche.<br />

Applicazioni<br />

Le applicazioni <strong>dei</strong> sistemi a chiave pubblica sono molteplici, ad esempio:<br />

• l’autentica elettronica della firma;<br />

• l’accesso ad archivi segreti o a sistemi <strong>di</strong> sicurezza;<br />

• l’accesso a servizi come carte <strong>di</strong> cre<strong>di</strong>to, programmi televisivi a pagamento,<br />

ecc. .<br />

4. Il sistema RSA<br />

RSA è un sistema <strong>di</strong> crittografia a chiave pubblica ideato da Diffie e Hellman<br />

ma chiamato sistema RSA dai nomi <strong>di</strong> coloro che, nel 1977, per primi lo hanno<br />

realizzato : R. Rivest, A.Shamir, L.Adleman.<br />

Negli anni, sono stati realizzati altri algoritmi asimmetrici ma l’algoritmo RSA<br />

è certamente il più conosciuto e quello stu<strong>di</strong>ato in modo più approfon<strong>di</strong>to.<br />

RICHIAMI <strong>di</strong> MATEMATICA<br />

• In<strong>di</strong>catore <strong>di</strong> Eulero φ(n). Dato un numero naturale n, con φ(n) (in<strong>di</strong>catore<br />

<strong>di</strong> Eulero) si in<strong>di</strong>ca il numero <strong>dei</strong> numeri naturali minori <strong>di</strong> n e<br />

primi con n. Esempio: φ(1) = 1, φ(2) = 1, φ(3) = 2, φ(4) = 2, φ(6) =<br />

2, φ(10) = 4, φ(15) = 8.<br />

• Se p è un numero primo, allora : φ(p) = p − 1.<br />

• Se p e q sono due numeri primi <strong>di</strong>stinti, allora : φ(pq) = (p − 1)(q − 1).<br />

• Teorema <strong>di</strong> Eulero : Se m ed n sono due numeri naturali primi fra loro,<br />

m < n, allora m φ(n) ≡ 1 mod n.<br />

• Teorema : Se a e b sono due interi primi tra loro, allora esiste un intero<br />

c tale che b · c mod a = 1.<br />

Teorema 9.4.1. Sia n prodotto <strong>di</strong> numeri primi <strong>di</strong>stinti. Se a, b ∈ N ∗ sono<br />

tali che ab − 1 è <strong>di</strong>visibile per p − 1 per ogni p|n, allora<br />

m ab ≡ m mod n<br />

per ogni intero m (anche se m non è primo con n).


4. IL SISTEMA RSA 112<br />

Dimostrazione. Sia n = p1p2 · · · pr con pi numero primo per ogni i = 1, 2, . . . , r<br />

e pi = pj per i = j. Iniziamo con il <strong>di</strong>mostrare che per ogni m ∈ N ∗ risulta<br />

m ab ≡ mod p1.<br />

Distinguiamo due casi.<br />

1 ◦ caso - Gli interi m e p1 non sono primi fra loro. Allora m è multiplo <strong>di</strong> p1<br />

perchè p1 è un numero primo; ovviamente anche m ab è multiplo <strong>di</strong> p1 e pertanto<br />

si ha<br />

m ≡ 0 mod p1, m ab ≡ 0 mod p1<br />

da cui segue<br />

m ab ≡ m mod p1.<br />

2 ◦ caso - Gli interi m e p1 sono primi fra loro. Allora:<br />

(1) φ(p1) = p1 − 1 perchè p1 è primo, inoltre ab − 1 è <strong>di</strong>visibile per (p1 − 1),<br />

ossia ab ≡ 1 mod φ(p1), allora si ha<br />

ab = 1 + kφ(p1) = 1 + k(p1 − 1).<br />

(2) Da (1) si ha m ab = m · m kφ(p1) = m · (m p1−1 ) k ; dal Teorema <strong>di</strong> Eulero<br />

precedentemente richiamato si ha m φ(p1) ≡ 1 mod p1, m p1−1 ≡ 1 mod p1.<br />

Ne segue che m ab ≡ m · 1 k mod p1 ossia<br />

Rimane così provato che<br />

per ogni m ∈ N ∗ .<br />

m ab ≡ m mod p1.<br />

m ab ≡ m mod p1<br />

Quanto <strong>di</strong>mostrato per il numero primo p1, vale per ogni numero primo<br />

pi tale che ab − 1 è <strong>di</strong>visibile per pi − 1 e pertanto, poichè n = p1p2 · · · pr è<br />

prodotto <strong>di</strong> numeri primi <strong>di</strong>stinti sod<strong>di</strong>sfacenti la proprietà richiesta, per<br />

ogni i = 1, 2, . . . , r si ha che pi <strong>di</strong>vide l’intero m ab − m e, per i = j, anche<br />

il prodotto pipj <strong>di</strong>vide m ab − m. Ne segue che per n = p1p2 · · · pr si ha<br />

per ogni m ∈ N ∗ .<br />

GENERAZIONE delle CHIAVI<br />

m ab ≡ m mod n<br />

Poichè ogni partecipante al sistema RSA deve essere fornito <strong>di</strong> due chiavi, prima<br />

<strong>di</strong> descrivere l’algoritmo ve<strong>di</strong>amo come si generano le chiavi pubbliche e le chiavi<br />

private.


4. IL SISTEMA RSA 113<br />

E’ consigliabile affidare ad un centro addetto questa operazione. Per ogni<br />

partecipante il centro sceglie due numeri primi <strong>di</strong>stinti p e q ognuno <strong>dei</strong> quali sia<br />

<strong>di</strong> almeno 100 cifre e li moltiplica ottenendo n = pq.<br />

Successivamente calcola φ(n) = φ(pq) = (p − 1)(q − 1) e infine il centro sceglie<br />

un numero naturale e primo con φ(n), ossia MCD(e, p − 1) = MCD(e, q − 1) = 1,<br />

e calcola d tale che<br />

e · d mod φ(n) = 1.<br />

Ora il partecipante al sistema riceve le sue due chiavi:<br />

- Chiave pubblica: la coppia <strong>di</strong> numeri (n, e).<br />

- Chiave privata: il numero d.<br />

Osservazioni<br />

• Nessun partecipante ha bisogno <strong>di</strong> conoscere i numeri p, q, φ(n). Anche<br />

per questo è consigliabile non lasciare al singolo il compito <strong>di</strong> scegliere<br />

la sua chiave ma lasciare il compito ad un centro addetto che poi cancellerà<br />

imme<strong>di</strong>atamente i dati usati per il calcolo delle chiavi, ciò eviterà<br />

che qualcuno possa impadronirsi <strong>di</strong> p, q, φ(n) e quin<strong>di</strong> calcolare la chiave<br />

segreta.<br />

• Il numero e può essere scelto in modo opportuno affinchè sia facile calcolare<br />

me mod n. Con questo scopo:<br />

– E’ stato proposto <strong>di</strong> scegliere sempre come numero e il quarto numero<br />

<strong>di</strong> Fermat F4 = 224+1 = 65537 perchè la sua rappresentazione binaria<br />

è semplicemente 10000000000000001 e quin<strong>di</strong> è relativamente facile<br />

calcolare me . Ovviamente l’altro numero della chiave pubblica, ossia<br />

il numero n, è <strong>di</strong>verso per ogni partecipante al sistema e questo è<br />

sufficiente per garantire che le chiavi segrete siano tutte <strong>di</strong>verse.<br />

– Un altro modo è quello <strong>di</strong> prendere un numero primo che non <strong>di</strong>vida<br />

φ(n).<br />

– Un terzo modo <strong>di</strong> procedere è quello <strong>di</strong> scegliere a caso un numero e,<br />

calcolare MCD(e, φ(n)) usando l’algoritmo <strong>di</strong> Euclide, e poi <strong>di</strong>videre<br />

e per questo MCD. A questo punto si calcola il numero d (chiave<br />

segreta) corrispondente ad e usando l’algoritmo <strong>di</strong> Euclide. Ovviamente<br />

calcolare φ(n) non è un problema perchè p e q sono primi fra<br />

loro.<br />

• Con la chiave pubblica si può trovare la chiave segreta solo se si riesce a<br />

fattorizzare n nei suoi fattori primi p e q, ma ad oggi non si conoscono<br />

algoritmi per fattorizzare numeri gran<strong>di</strong> in tempi ragionevoli. Si tenga<br />

conto che RSA utilizza numeri primi che hanno da 100 a 200 cifre e quin<strong>di</strong>,<br />

anche con gli algoritmi più evoluti, risulta davvero <strong>di</strong>fficile riuscire a<br />

fattorizzare n in tempi ragionevoli.


ALGORITMO RSA<br />

4. IL SISTEMA RSA 114<br />

L’algoritmo RSA è una <strong>di</strong>retta applicazione del Teorema <strong>di</strong> Eulero precedentemente<br />

richiamato.<br />

Supponiamo che A voglia inviare un messaggio a B. Anzittutto A deve conoscere<br />

la chiave pubblica <strong>di</strong> B che supponiamo sia la coppia (n, e).<br />

• Il messaggio deve essere co<strong>di</strong>ficato in una sequenza <strong>di</strong> uno o più interi<br />

positivi mi tali che per ogni i sia mi < n e MCD(mi, n) = 1.<br />

In realtà la richiesta che sia MCD(mi, n) = 1 è una con<strong>di</strong>zione che semplifica la<br />

procedura, ma non è necessaria, come <strong>di</strong>mostra il Teorema 9.4.1 . La richiesta non<br />

fa perdere in generalità.<br />

Per co<strong>di</strong>ficare in modo che i messaggi mi sod<strong>di</strong>sfino alle richieste soprascritte,<br />

esistono vari mo<strong>di</strong>; nella maggior parte <strong>dei</strong> computers si usa il sistema ASCII (ve<strong>di</strong><br />

esempio 2.5.4). Senza soffermarci sulla procedura <strong>di</strong> co<strong>di</strong>fica, supponiamo che il<br />

messaggio sia stato co<strong>di</strong>ficato nell’intero positivo m con m < n e MCD(m, n) = 1.<br />

CIFRATURA<br />

Nota la chiave pubblica (n, e) del destinatario B, al testo in chiaro m si applica<br />

la formula<br />

m e mod n = t<br />

in questo modo A ottiene il testo cifrato t da trasmettere a B.<br />

DECIFRATURA<br />

Il signor B riceve t e decifra applicando la sua chiave privata con la formula<br />

t d mod n = m.<br />

Questo metodo per cifrare e decifrare funziona perchè applica il Teorema <strong>di</strong><br />

Eulero e il Teorema 9.4.1. Infatti da t ≡ m e mod n segue t d ≡ m ed mod n.<br />

Da ed ≡ 1 mod φ(n) si ha ed = 1 + kφ(n) e pertanto m ed = m 1+kφ(n) da cui<br />

t d ≡ m 1+kφ(n) mod n. Poichè MCD(m, n) = 1 e m < n, per il Teorema <strong>di</strong> Eulero<br />

si ha m 1+kφ(n) ≡ m mod n e quin<strong>di</strong><br />

t d ≡ m mod n.<br />

Poichè m < n non c’è ambiguità nella determinazione del numero congruo a<br />

t d mod n perchè fra 0 e n − 1 ce ne è uno solo.<br />

Esempio 9.4.2. Supponiamo che Carla voglia inviare un messaggio a Ugo con<br />

il metodo RSA.


4. IL SISTEMA RSA 115<br />

(1) Generiamo le chiavi <strong>di</strong> Ugo. Scegliamo due numeri primi molto gran<strong>di</strong> p e<br />

q. Come già detto, solitamente questi vengono scelti dal centro <strong>di</strong> calcolo<br />

e poi cancellati. Nel nostro esempio, per ragioni <strong>di</strong> calcolo, scegliamo<br />

numeri piccoli: sia p = 17 e q = 11.<br />

(2) Calcoliamo n = pq = 17 · 11 = 187 e scegliamo un numero naturale e tale<br />

che sia primo con φ(n) = (p − 1)(q − 1) = 160, sia e = 7.<br />

(3) Calcoliamo d tale che e · d mod φ(n) = 1, ossia tale che 7 · d mod 160 = 1,<br />

pertanto d = 23.<br />

Ugo ha come chiave pubblica la coppia (n, e) = (187, 7) e come chiave<br />

privata d = 23.<br />

(4) Per cifrare il messaggio, Carla deve prima trasformare il messaggio in<br />

un numero m. Supponiamo che Carla utilizzi il sistema ASCII e, per<br />

semplicità, supponiamo che il messaggio sia costituito dalla sola lettera<br />

V . Questa lettera nel co<strong>di</strong>ce ASCII è rappresentata dal numero 86 ossia<br />

m = 86 (e risulta 86 < 187).<br />

(5) Carla per cifrare il messaggio m = 86, prende la chiave pubblica <strong>di</strong> Ugo che<br />

è (n, e) = (187, 7) e calcola t = 86 7 mod 187. Per eseguire questo calcolo<br />

conviene usare le proprietà del calcolo modulare esponenziale. Poichè<br />

7 = 1 + 2 + 2 2 = 1 + 2 + 4, si ha<br />

86 7 mod 187 = (86 1 mod 187) · (86 2 mod 187) · (86 4 mod 187)<br />

e poichè 86 2 = 7396 ≡ 103 mod 187 e 86 4 = 54700816 ≡ 137 mod 187,<br />

si ha<br />

86 7 = 86 · 103 · 137 = 1213546 ≡ 103 mod 187.<br />

Il messaggio che Carla invia e Ugo riceve è t = 103.<br />

(6) Una eventuale spia, vedendo il messaggio t = 103 non riesce a capire cosa<br />

è stato inviato (nel co<strong>di</strong>ce ASCII t = 103 corrisponde alla virgola). Ugo,<br />

invece, avendo la chiave privata, riesce a decifrarlo.<br />

(7) Per decifrare il messaggio e ottenere m, Ugo deve solo calcolare la congruenza<br />

t d mod n ossia 103 23 mod 187.<br />

Poichè 23 = 1 + 2 + 2 2 + 2 4 = 1 + 2 + 4 + 16, si deve calcolare<br />

{(103 1 mod187) · (103 2 mod187) · (103 4 mod187) · (103 16 mod187)} mod 187<br />

e poichè<br />

103 2 mod 187 = 137, 103 4 mod 187 = 69, 103 16 mod 187 = 103<br />

si ha<br />

{(103 · 137 · 69 · 103} mod 187, 100286877 mod 187 = 86<br />

e dunque Ugo decifra che il messaggio inviatogli da Carla è m = 86 che<br />

nel co<strong>di</strong>ce ASCII è la lettera V.


4. IL SISTEMA RSA 116<br />

Esempio 9.4.3. Carla e Francesco utilizzano il sistema RSA per scambiarsi un<br />

messaggio. Francesco ha ricevuto da Carla questo messaggio: qual è il corso che<br />

ti è piaciuto <strong>di</strong> più ?<br />

Francesco vuole rispondere con il seguente messaggio<br />

algebra<br />

Per inviare la risposta a Carla, Francesco dovrà procedere come segue.<br />

(1) Trasforma ogni lettera del messaggio in un intero in base all’equivalenza<br />

numerica a due cifre <strong>di</strong> cui alla tabella sotto riportata (la corrispondenza<br />

lettera-numero assegna ad ogni lettera un numero <strong>di</strong> due cifre ).<br />

Tabella - Equivaleza lettere-numeri a due cifre o binari<br />

a → 00 = 00000 j → 09 = 01001 s → 18 = 10010<br />

b → 01 = 00001 k → 10 = 01010 t → 19 = 10011<br />

c → 02 = 00010 l → 11 = 01011 u → 20 = 10100<br />

d → 03 = 00011 m → 12 = 01100 v → 21 = 10101<br />

e → 04 = 00100 n → 13 = 01101 w → 22 = 10110<br />

f → 05 = 00101 o → 14 = 01110 x → 23 = 10111<br />

g → 06 = 00110 p → 15 = 01111 y → 24 = 11000<br />

h → 07 = 00111 q → 16 = 10000 z → 25 = 11001<br />

i → 08 = 01000 r → 17 = 10001<br />

La sequenza <strong>di</strong> numeri corrispondenti al messaggio algebra è<br />

00 11 06 04 01 17 00<br />

(2) Guarda l’elenco delle chiavi pubbliche e trova<br />

Chiave pubblica <strong>di</strong> Carla (nC, eC) = (1003, 3).<br />

(3) Ora Francesco deve sud<strong>di</strong>videre il messaggio da inviare in messaggi unitari<br />

mi in modo che l’intero associato ad ogni messaggio unitario sia minore<br />

<strong>di</strong> nC = 1003 e relativamente primo con 1003. Osserva che <strong>di</strong>videndo<br />

il messaggio algebra in blocchi <strong>di</strong> due lettere (ossia <strong>di</strong>grafi) nel modo<br />

seguente<br />

al ge br ax,<br />

i numeri corrispondenti ai singoli messaggi unitari sono<br />

0011 0604 0117 0023,<br />

ossia, rispettivamente, i numeri m1 = 11, m2 = 604, m3 = 117, m4 = 23<br />

che sono tutti minori <strong>di</strong> 1003 e relativamente primi con 1003. Per trovare<br />

il MCD tra questi numeri e 1003, Francesco utilizzerà l’algoritmo euclideo<br />

delle <strong>di</strong>visioni successive perchè non conosce la fattorizzazione <strong>di</strong> nC in<br />

fattori primi. Si noti che Francesco ha dovuto aggiungere al messaggio<br />

unitario finale la lettera x, in modo da farlo <strong>di</strong>ventare un <strong>di</strong>grafo. Se<br />

avesse pensato <strong>di</strong> <strong>di</strong>videre il messaggio in blocchi <strong>di</strong> tre lettere anzichè <strong>di</strong>


4. IL SISTEMA RSA 117<br />

due, ci sarebbero <strong>dei</strong> messaggi unitari mi cui corrispondono degli interi<br />

maggiori <strong>di</strong> nC:<br />

alg → m1 = 606 < 1003,<br />

ebr → m2 = 40117 > 1003,<br />

axx → m3 = 2323 > 1003,<br />

e pertanto non varrebbe MCD(mi, nC) = 1 che è una con<strong>di</strong>zione che<br />

semplifica la procedura.<br />

Dunque si considera la sud<strong>di</strong>visione del messaggio algebra in blocchi <strong>di</strong><br />

due lettere e pertanto i messaggi unitari in chiaro saranno rappresentati<br />

dai seguenti numeri:<br />

m1 = 11, m2 = 604, m3 = 117, m4 = 23.<br />

(4) Ora inizia l’operazione <strong>di</strong> cifratura vera e propria per l’invio del messaggio<br />

a Carla in modo tale che quest’ultima lo possa decifrare e sia l’unica a<br />

poterlo fare in un tempo ragionevole. Per cifrare il messaggio da spe<strong>di</strong>re<br />

a Carla, Francesco eleva ogni mi alla potenza eC. Il messaggio cifrato<br />

che Francesco invia sarà dunque rappresentato dai seguenti numeri ti, i =<br />

1, 2, 3, 4.<br />

t1 = m eC<br />

1 mod nC = 11 3 mod 1003 = 328,<br />

t2 = m eC<br />

2 mod nC = 604 3 mod 1003 = 797,<br />

t3 = m eC<br />

3 mod nC = 117 3 mod 1003 = 825,<br />

t4 = m eC<br />

4 mod nC = 23 3 mod 1003 = 131.<br />

A questo punto Francesco ha terminato la sua operazione e invia a Carla<br />

il messaggio cifrato costituito dai messaggi unitari<br />

t1 = 328, t2 = 797, t3 = 825, t4 = 131,<br />

(5) Carla ha ricevuto il messaggio e deve procedere alla decifratura, cioè per<br />

ogni ti deve scoprire il messaggio originario mi sapendo che<br />

ti = m eC<br />

i<br />

mod nC.<br />

Carla, e solo lei, ha la chiave segreta dC che, ricor<strong>di</strong>amo, sod<strong>di</strong>sfa alle<br />

proprietà<br />

• 1 ≤ dC < φ(nC) = (p − 1)(q − 1),<br />

• dC è soluzione della congruenza eCdC ≡ 1 (modφ(nC)).<br />

Inoltre, la congruenza soprascritta ha un’unica soluzione perchè<br />

MCD(eC, φ(nC)) = 1. Nel nostro caso la soluzione, chiave segreta <strong>di</strong><br />

Carla, è<br />

dC = 619<br />

infatti nC = 1003 = 17 · 59, φ(1003) = 16 · 58 = 928, e pertanto la<br />

soluzione della congruenza 3x ≡ 1 mod 928, è dC = 619.<br />

(6) Per decifrare, Carla eleva ogni ti a dC = 619, cioè calcola<br />

328 619 , 797 619 , 825 619 , 131 619 .


4. IL SISTEMA RSA 118<br />

L’esponente 619 è grande allora per il calcolo Carla scrive 619 in base 2:<br />

619 = (1001101011)2 = 512 + 64 + 32 + 8 + 2 + 1.<br />

Allora, per ogni i = 1, 2, 3, 4, si ha<br />

t 619<br />

i<br />

= t 512<br />

i<br />

· t 64<br />

i · t 32<br />

i · t 8 i · t 2 i · t 1 i .<br />

Per i = 1 le potenze si calcolano facilmente utilizzando la seguente tabella<br />

relativa a t1 = 328 :<br />

k C k 1 mod 1003<br />

1 328<br />

2 328 2 mod 1003 = 263<br />

2 2 = 4 263 2 mod 1003 = 965<br />

2 3 = 8 965 2 mod 1003 = 441<br />

2 4 = 16 441 2 mod 1003 = 902<br />

2 5 = 32 902 2 mod 1003 = 171<br />

2 6 = 64 171 2 mod 1003 = 154<br />

2 7 = 128 154 2 mod 1003 = 647<br />

2 8 = 256 647 2 mod 1003 = 358<br />

2 9 = 512 358 2 mod 1003 = 783<br />

Dai calcoli riportati nella tabella, si ottiene<br />

328 619 = 328 512 · 328 64 · 328 32 · 328 8 · 328 2 · 328 1 ≡<br />

≡ 783 · 154 · 171 · 441 · 263 · 328 ≡ 11 mod 1003.<br />

Si noti che, elevando t1 = 328 all’esponente dC = 619, si ottiene il numero<br />

11 = m1, cioè il numero corrispondente al messaggio originario. Carla<br />

procede allo stesso modo con gli altri tre blocchi del messaggio e, in<br />

definitiva, ottiene<br />

328 619 mod 1003 = 11, 797 619 mod 1003 = 604,<br />

825 619 mod 1003 = 117, 131 619 mod 1003 = 23.<br />

Questi numeri vanno pensati a quattro cifre, ossia<br />

0011, 0604, 0117, 0023,<br />

e corrispondono ai quattro blocchi <strong>di</strong> messaggio originali che erano <strong>dei</strong><br />

<strong>di</strong>grafi e pertanto Carla deve <strong>di</strong>videre ciascuno in due parti e ciascuna delle<br />

due parti rappresenta una lettera. Utilizzando la tabella dell’equivalenza<br />

lettere-numeri riportata al punto (1), Carla ottiene<br />

00 11 06 04 01 17 00 23<br />

a l g e b r a x<br />

e quin<strong>di</strong> riesce a capire quale è il corso che è piaciuto <strong>di</strong> più a Francesco.


4. IL SISTEMA RSA 119<br />

Nota 9.4.4. Abbiamo detto che il messaggio unitario deve essere minore <strong>di</strong><br />

n. Dimostriamo con un esempio che la con<strong>di</strong>zione è necessaria. Consideriamo il<br />

messaggio<br />

no<br />

e supponiamo <strong>di</strong> inviarlo a Francesco che ha come chiave pubblica la coppia (nF =<br />

77, eF = 13). Consideriamo l’intera parola no come messaggio unitario (<strong>di</strong>grafo):<br />

(1) trasformiamo il messaggio in un numero associando ad ogni lettera il suo<br />

equivalente numerico (ve<strong>di</strong> Tabella al punto (1) dell’esempio 9.4.3). Il<br />

numero associato risulta essere<br />

1314<br />

che è maggiore <strong>di</strong> nF = 77;<br />

(2) per cifrare eleviamo 1314 alla potenza eF = 13. Si ottiene<br />

(3) Francesco riceve il messaggio<br />

1314 13 ≡ 26 mod 77 , t = 26.<br />

26<br />

Per decifrare questo messaggio Francesco utilizza la sua chiave segreta che<br />

è dF = 37 ( soluzione della congruenza 13 · dF ≡ 1 mod φ(77), cioè 13 ·<br />

dF ≡ 1 mod 60).<br />

Elevando 26 alla potenza 37 e calcolando mod 77, si ottiene 5 che<br />

Francesco interpreta come<br />

f<br />

e quin<strong>di</strong> non ritrova il messaggio che gli era stato inviato (ve<strong>di</strong> tabella<br />

equivalenza lettere-numeri riportata nell’esempio 9.4.3).<br />

Dunque è necessario che il messaggio unitario sia minore <strong>di</strong> nF , altrimenti<br />

è impossibile decifrare il messaggio.<br />

Nota 9.4.5. Nell’esempio 9.4.3 abbiamo visto che per inviare a Carla il messaggio<br />

algebra, Francesco lo ha sud<strong>di</strong>viso in <strong>di</strong>grafi. Per fare ciò ha dovuto procedere<br />

per tentativi, verificando che i numeri corrispondenti ai singoli <strong>di</strong>grafi fossero tutti<br />

minori <strong>di</strong> nC e primi con esso.<br />

C’è però un metodo migliore per scegliere in che modo sud<strong>di</strong>videre il messaggio.<br />

Non conviene <strong>di</strong>videre il messaggio originario algebra, ma conviene <strong>di</strong>videre<br />

il messaggio numerico ottenuto associando un numero a due cifre ad ogni lettera.<br />

Anzi, c’è un modo naturale <strong>di</strong> sud<strong>di</strong>viderlo, ve<strong>di</strong>amo quale.<br />

Dopo che si è trasformato il messaggio in una serie <strong>di</strong> numeri, ciascuno a due cifre,<br />

consideriamo il numero (detto messaggio numerico) costituito dalla successione<br />

<strong>di</strong> tutte le cifre. Sud<strong>di</strong>vi<strong>di</strong>amo questo numero in blocchi <strong>di</strong> k cifre dove<br />

k = numero <strong>di</strong> cifre <strong>di</strong> nC <strong>di</strong>minuito <strong>di</strong> una unità .


4. IL SISTEMA RSA 120<br />

In questo modo, senza dover esaminare il messaggio, il singolo messaggio numerico<br />

unitario è automaticamente minore <strong>di</strong> nC. Non solo, questo modo <strong>di</strong> procedere è<br />

noto a tutti perchè tutti conoscono nC e sanno che il mittente del messaggio <strong>di</strong>vide<br />

il messaggio numerico in blocchi ottenuti in questo modo.<br />

Ve<strong>di</strong>amo un esempio.<br />

Esempio 9.4.6. Supponiamo che Francesco debba inviare a Carla il messaggio<br />

vieni qui<br />

(1) Per prima cosa Francesco trasforma il messaggio, trascurando la spaziatura,<br />

nella sequenza <strong>di</strong> numeri <strong>di</strong> due cifre (Tabella dell’esempio 9.4.3)<br />

che scriveremo come<br />

21 08 04 13 08 16 20 08<br />

2108041308162008.<br />

Ciò non crea ambiguità perchè sappiamo che ogni numero associato ad una<br />

lettera del messaggio originario è costituito da due cifre. Quello ottenuto<br />

è il messaggio numerico.<br />

(2) Come già scritto nell’esempio 9.4.3, le chiavi pubblica e privata <strong>di</strong> Carla<br />

sono, rispettivamente, (nC = 1003, eC = 3) e dC = 619. Osservato<br />

che il numero nC = 1003 ha quattro cifre, Francesco spezza il messaggio<br />

numerico in gruppi <strong>di</strong> 4 − 1 = 3 cifre, ossia in trigrafi, come segue:<br />

210 804 130 816 200 823.<br />

Si noti che Francesco ha aggiunto 23, corrispondente alla lettera x, in<br />

modo che tutti i messaggi numerici unitari siano costituiti da tre cifre.<br />

In questo modo ha spezzato il messaggio numerico in messaggi numerici<br />

unitari che sono <strong>dei</strong> trigrafi e ogni messaggio unitario è sicuramente minore<br />

<strong>di</strong> nC = 1003. Si osservi che questa sud<strong>di</strong>visione non è una sud<strong>di</strong>visione del<br />

messaggio originario vieni qui perchè i blocchi numerici unitari <strong>di</strong> tre cifre<br />

non corrispondono a nessun gruppo <strong>di</strong> lettere. Occorre inoltre controllare<br />

che ogni mi sia relativamente primo con 1003. E’ facile verificare che<br />

l’unica eccezione è quella <strong>di</strong> 816. Ciò però non ha importanza perchè vale<br />

il Teorema 9.4.1 che ci assicura che la con<strong>di</strong>zione MCD(mi, 1003) è solo<br />

<strong>di</strong> utilità ma non strettamente necessaria. In definitiva i singoli messaggi<br />

numerici unitari sono<br />

m1 = 210, m2 = 804, m3 = 130, m4 = 816, m5 = 200, m6 = 823.<br />

Si noti che le operazioni fin qui fatte non corrispondono a nessun tipo <strong>di</strong><br />

cifratura, infatti la trasformazione <strong>di</strong> un messaggio in una successione <strong>di</strong><br />

numeri è standard così come la ripartizione dello stesso in gruppi <strong>di</strong> tre<br />

cifre, che <strong>di</strong>pende dal valore <strong>di</strong> nC che è pubblico.


5. LA FIRMA ELETTRONICA, AUTENTICAZIONE CON IL SISTEMA RSA 121<br />

(3) Si cifrano i messaggi numerici unitari e si ottiene:<br />

t1 = m eC<br />

1 mod nC, 210 3 mod 1003 = 301, t1 = 301,<br />

t2 = m eC<br />

2 mod nC, 804 3 mod 1003 = 975, t2 = 975,<br />

t3 = m eC<br />

3 mod nC, 130 3 mod 1003 = 430, t3 = 430,<br />

t4 = m eC<br />

4 mod nC, 816 3 mod 1003 = 357, t4 = 357,<br />

t5 = m eC<br />

5 mod nC, 200 3 mod 1003 = 72, t5 = 72,<br />

t6 = m eC<br />

6 mod nC, 823 3 mod 1003 = 445, t6 = 445.<br />

(4) Carla riceve la seguente successione <strong>di</strong> messaggi unitari:<br />

t1 = 301, t2 = 975, t3 = 430, t4 = 357, t5 = 72, t6 = 445.<br />

Per decifrare, Carla eleva ogni ti alla sua chiave segreta dC = 619, ossia<br />

calcola<br />

301 619 , 975 619 , 430 619 , 357 619 , 72 619 , 445 619 .<br />

In definitiva, Carla trova<br />

301 619 mod 1003 = 210 = m1, 975 619 mod 1003 = 804 = m2,<br />

430 619 mod 1003 = 130 = m3, 357 619 mod 1003 = 816 = m4,<br />

72 619 mod 1003 = 200 = m5, 445 619 mod 1003 = 823 = m6.<br />

Questi gruppi <strong>di</strong> tre cifre, raggruppati a due a due, danno<br />

21, 08, 04, 13, 08, 16, 20, 08, 23<br />

e quin<strong>di</strong> Carla riesce a leggere il messaggio vieni quix che capisce significa<br />

vieni qui.<br />

5. La firma elettronica, autenticazione con il sistema RSA<br />

Il sistema RSA consente <strong>di</strong> risolvere il problema della autenticazione elettronica<br />

<strong>di</strong> una firma. Ad esempio, se Francesco riceve un messaggio da una persona che<br />

si firma Carla, deve essere certo che sia stata proprio Carla ad inviarglielo. Se<br />

(nC, eC) e dC sono la chiave, rispettivamente, pubblica e privata <strong>di</strong> Carla, per<br />

risolvere questo problema si procede come segue.<br />

(1) Carla scrive il messaggio m1 contenente la sua firma F e, perchè la firma<br />

possa essere autenticata, aggiunge il messaggio m2 con m2 = F dC ( mod nC),<br />

(ricor<strong>di</strong>amo che dC è la sua chiave segreta che solo lei conosce). Poi, con<br />

le solite modalità <strong>di</strong> cifratura, invia a Francesco il messaggio cifrato.<br />

(2) Francesco, con le solite modalità, decifra il messaggio e per verificare<br />

l’autenticità della firma calcola m eC<br />

2 (mod nC).


6. SICUREZZA DEL SISTEMA RSA 122<br />

(3) Se m eC<br />

2 (mod nC) = F, allora la firma è autentica (e solo in questo caso)<br />

perchè<br />

m eC<br />

2 ≡ (F dC ) eC = F dCeC ≡ F( mod nC).<br />

La firma è quella <strong>di</strong> Carla perchè solo lei conosce la propria chiave privata<br />

che è la sola compatibile con eC e nC utilizzati da Francesco.<br />

Notiamo che per l’autentica della firma sono state usate solo le chiavi relative<br />

a colui che spe<strong>di</strong>sce il messaggio (ovviamente per cifrare e decifrare il messaggio<br />

occorreranno, al solito, anche le chiavi del destinatario).<br />

Esempio 9.5.1. Carla invia un documento firmato a Francesco.<br />

• Chiave pubblica <strong>di</strong> Carla : (nC = 77, eC = 13),<br />

• Chiave privata <strong>di</strong> Carla : dC = 37.<br />

(Poichè 77 = 11·7, la chiave privata <strong>di</strong> Carla è dC = 37 perchè 37·13 ≡ 1(mod 60),<br />

dove 60 = φ(77).)<br />

Supponiamo che la firma <strong>di</strong> Carla sia F = 5.<br />

(1) Nell’inviare il messaggio a Francesco, Carla ha autenticato la sua firma<br />

aggiungendo il messaggio<br />

47 (ottenuto calcolando 5 37 mod 77).<br />

(2) Francesco verifica l’autenticità della firma calcolando<br />

47 13 mod 77 (= 5).<br />

(3) La firma è autentica perchè Francesco ottiene 5 che è la firma <strong>di</strong> Carla .<br />

6. Sicurezza del sistema RSA<br />

La sicurezza del sistema RSA sta nel fatto che non esiste a tutt’oggi un algoritmo<br />

efficiente per fattorizzare numeri gran<strong>di</strong>. Se A invia a B un messaggio m,<br />

un estraneo che tentasse <strong>di</strong> decifrarlo abusivamente dovrebbe trovare la fattorizzazione<br />

della chiave pubblica nB <strong>di</strong> B. Nel caso che nB sia prodotto <strong>di</strong> due numeri<br />

primi ciascuno con 100 e più cifre, anche utilizzando i più sofisticati algoritmi e<br />

i calcolatori più veloci, occorrerebbero anni <strong>di</strong> calcolo per fattorizzare nB e pertanto<br />

si ritiene che la fattorizzazione <strong>di</strong> nB sia impossibile per un estraneo non<br />

autorizzato. Questo però è vero in generale, ma non sempre, come ha mostrato il<br />

seguente episo<strong>di</strong>o.<br />

Nell’agosto 1977, dalle colonne della pagina Mathematical Games <strong>di</strong> M. Gardner,<br />

i tre inventori del sistema RSA sfidarono i lettori della rivista Scientific American<br />

a decifrare un messaggio corrispondente ad un numero a 129 cifre, operazione


6. SICUREZZA DEL SISTEMA RSA 123<br />

che secondo loro avrebbe richiesto miliar<strong>di</strong> <strong>di</strong> anni. Offrivano 100 dollari <strong>di</strong> premio<br />

a chi avesse trovato la soluzione. Per decifrare il loro messaggio originale era<br />

necessario fattorizzare il numero<br />

n = 11438162575788886766923577997614661201021829672124236256256184293<br />

5706935245733897830597123563958705058989075147599290026879543541,<br />

che era stato pubblicato assieme al numero e = 9007, ossia (n, e) era la chiave<br />

pubblica <strong>di</strong> Rivest, Shamir e Adleman. Per garantire che il messaggio proveniva<br />

proprio dai tre stu<strong>di</strong>osi, fu aggiunta la seguente autenticazione della loro firma<br />

ottenuta usando la chiave segreta dell’algoritmo<br />

1671786115038084424601527138916839824543690103235831121783503844<br />

6929062655448792237114490509578608655662496577974840004057020373.<br />

Elevando questo numero alla potenza 9007 e riducendo modulo n si otteneva il<br />

numero<br />

0609181920001915122205180023091419001<br />

5140500082114041805040004151212011819<br />

corrispondente alla frase<br />

First solver wins one hundred dollars,<br />

che era la garanzia che il messaggio proveniva proprio da Rivest, Shamir, Adleman.<br />

Diciassette anni dopo il matematico Arjen K. Lenstra insieme ad un gruppo<br />

<strong>di</strong> qualche centinaio <strong>di</strong> persone, in soli otto mesi riuscì a trovare la soluzione. La<br />

tecnica usata per affrontare il problema è quella che prende il nome <strong>di</strong> crivello<br />

quadratico polinomiale multiplo, una tecnica che permette <strong>di</strong> sud<strong>di</strong>videre il lavoro<br />

in tante parti più piccole. Per organizzare questo lavoro, Lenstra si servì <strong>di</strong> centinaia<br />

<strong>di</strong> collaboratori in tutto il mondo impegnando migliaia <strong>di</strong> calcolatori, il tutto<br />

coor<strong>di</strong>nato via internet. Ognuno <strong>di</strong> questi collaboratori mandò a Lenstra i risultati<br />

della parte <strong>di</strong> lavoro da loro svolta. Unendo il tutto, con un supercalcolatore in<br />

due giorni furono trovati i due fattori, uno <strong>di</strong> 64 cifre e uno <strong>di</strong> 65 cifre. Questo<br />

permise a Lenstra <strong>di</strong> decifrare il messaggio <strong>di</strong> Rivest, Shamir e Adleman.<br />

Il messaggio <strong>di</strong>ceva<br />

the magic words are sqeamish ossifrage.<br />

A detta degli stessi autori, si tratta <strong>di</strong> parole senza senso, ma essi non si aspettavano<br />

che le parole potessero mai essere decifrate. Quella che sembrava una sfida<br />

impossibile, dopo 17 anni si era invece rivelata possibile. Si può allora concludere<br />

che la crittografia è ancora una scienza sperimentale. Un sistema ritenuto sicuro<br />

oggi può non esserlo domani!


CAPITOLO 10<br />

Gruppi e Insiemi <strong>di</strong> Permutazioni Equi<strong>di</strong>stanti<br />

Si rinvia al materiale fornito dal docente.<br />

124

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!