Codici Introduzione Sia A un insieme finito di simboli e C=A n l insieme di tutte le parole composte da n simboli di A Esempio A={0,1}, C=A 2 ={00,01,10,11} Sia C un insieme finito di N oggetti avente cardinalità C =N Esempio C ={quadri,picche,cuori,fiori}, C =4
Introduzione Codifica/Decodifica Si chiama Codifica, l operazione che associa ad un elemento di C una parola di C (f: C C) Esempio quadri 00, picche 01, cuori 10, fiori 11 Si chiama Decodifica l operazione inversa che, a partire da una parola di C, individua l elemento C cui essa è associata (g:c C ) Esempio 00 quadri, 01 picche, 10 cuori, 11 fiori Classificazione dei codici Un codice si dice non ambiguo se ogni elemento di C corrisponde ad una e solo una parola di C ed elementi diversi di C sono associati a parole diverse Se C è composto da parole formate da n bit, allora, C =2 n Il valore minimo di n, sia esso m, tale che il codice sia non ambiguo è tale che 2 m N e 2 m-1 < N, ossia m=intsup(log 2 N) Se I è un intero ed F un valore frazionario, intsup(i+f)=i se F=0, I+1 altrimenti Se n=m il codice si dice irridontante Se n>m il codice è detto ridontante Se n<m il codice è detto ambiguo (non ha importanza pratica)
Esempio codici ridondanti vs non ridondanti Sia C =[ A, B, C, D] Consideriamo due codici binari a parola di lunghezza fissa 2 e 3 in entrambi i casi il codice è non ambiguo. Codice 1 Codice 2 A => 00 000 B => 01 010 C => 10 100 D => 11 111 8 > 4 => Codice ridondante 4 = 4 => Codice irridondante Se le rimanenti rappresentazioni 011, 001, 110, 101 non appartengono al codice Si parla di rappresentazioni non legali Codice BCD (Binary Coded Decimal) Binario Decimale BCD 0 0 0000 1 1 0001 10 2 0010 11 3 0011 100 4 0100 101 5 0101 110 6 0110 111 7 0111 1000 8 1000 1001 9 1001 145 decimale BCD 0001 0100 0101 Binario 10010001
Codice ASCII Codifica ASCII (American Standard Code for Information Interchange), 7 bit 4 gruppi: Controllo (0-31) Punteggiatura e cifre (32-63) Caratteri alfanumerici maiuscoli (64-95) Caratteri alfanumerici minuscoli (96-127) ASCII ( a )-ASCII( A )=32 Altri codici EBCIDC (Extended Binary-Coded Decimal Interchange Code) estensione del BCD ad 8 bit sviluppata dall IBM Unicode 16-bit 65.536 code points Parte di un consorzio di aziende Impiegato in Java
Codici ridondanti Sfruttando opportunamente la ridondanza è possibile riconoscere o correggere errori in una parola del codice Definiamo le distanza d(x,y) fra due parole x ed y di C il numero di posizioni in corrispondenza delle quali i bit differiscono d( 10010, 01001 ) = 4 d( 11010, 11001 ) = 2 Distanza di Hamming di un codice è il valore h della distanza minima fra tutte le coppie di parole h=1 (codice irridonante) h>1 ridondante Codici per la rilevazione degli errori Sono usati per stabilire se si è verificato un errore Un codice con distanza h può riconoscere la presenza di h-1 errori Esempio 00000000 PAROLE LEGALI 00001111 11110000 11111111 Distanza di Hamming 4 Un errore su 3 bit porta ad una parola illegale
Codici per la rilevazione degli errori codice di parità Codice con h=2 d 1 d 2 d 3.. d m p = 0 parità pari oppure d 1 d 2 d 3.. d m p = 1 parità dispari Dove e l operatore di anticoincidenza o somma modulo 2 (0+0=1+1=0, 1+0=0+1=1) e p il bit di parita, da aggiungere a quelli di informazione per costruire parole del codice Bit d informazione Parità Pari Parità Dispari 000 000 0 000 1 001 001 1 001 0 010 010 1 010 0 011 011 0 011 1 100 100 1 100 0 101 101 0 101 1 110 110 0 110 1 111 111 1 111 0 E un codice di distanza minima pari a 2 che permette di rilevare errori su un singolo bit Codici per la correzione degli errori Codice per la correzione di un errore Con m bit dati, r bit di controllo ed n=m+r bit di codice come costruire un codice per la correzione degli errori? In questo esempio, siamo interessati alla correzione di errori singoli Le parole legali del codice sono 2 m Le parole totali del codice sono 2 n Ogni parola di codice legale, composta da n bit, è circondata da n parole illegali Pertanto, ogni parola legale richiede n+1 parole di codice: 2 m (n+1) 2 n m+r+1 2 r
Esempio Due parole a distanza 3 001010 001110 001100 001001 001101 101111 001000 001111 000000 101000 011111 001011 011000 000111 Esempio Due parole a distanza 3 001010 001110 001100 1 2 001001 001101 3 101111 d = 3 001000 001111 000000 101000 011111 001011 011000 000111
Codici di Hamming Codice per correggere un singolo errore (distanza 3) Consideriamo una parola composta da m bit Aggiungiamo r bit di controllo (parità) La parola codificata avrà m+r bit, le cui posizioni sono numerate da 1 ad m+r, da sinistra a destra I bit in posizione k=2 i sono bit di parità Il bit in posizione b è controllato dai bit in posizione b 1,b 2,..,b j tale che b 1 +b 2 +..b j =b Codici di Hamming In caso di errore, la posizione del bit errato è data dalla somma delle posizioni dei bit di parità errati