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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!