Perché questo codice è unicamente decodificabile?


21

Alfabeto sorgente: {un',B,c,d,e,f}

Alfabeto codice: {0,1}

  • un':0101
  • B:1001
  • c:10
  • d:000
  • e:11
  • f:100

Ho pensato che per essere decodificabile in modo univoco, un codice doveva essere privo di prefissi. Ma in questo codice, la codeword c è il prefisso della codeword f per esempio, quindi non è priva di prefissi. Tuttavia il mio libro di testo mi dice che il suo rovescio è privo di prefisso (non lo capisco), e quindi è unicamente decodificabile. Qualcuno può spiegare cosa significa questo o perché è unicamente decodificabile? So che soddisfa la disuguaglianza di Kraft, ma questa è solo una condizione necessaria, non una condizione sufficiente.


10
Senza prefisso implica una decodifica univoca, ma che non è un'istruzione "if and only if". Vedi, per esempio, qui .
dkaeae

Va bene lo vedo, ma il mio libro di testo dice questo: il codice A è decodificabile in modo univoco poiché il suo contrario è privo di prefissi, quindi decodificabile in modo univoco Capisci cosa significano con il suo contrario?
2000

1
Probabilmente semplicemente il codice ottenuto invertendo tutte le parole in codice.
dkaeae

e perché ciò implica una decodificabilità unica, non capisco
2000mroliver

1
cpuò essere un prefisso di be f, ma i suffissi rimasti non esistono nel codice. Quando si inverte il codice, i suffissi diventano prefissi e quindi diventano privi di prefisso.
Barmar

Risposte:


26

Il tuo codice ha la proprietà che se inverti tutte le parole in codice, otterrai un prefisso. Ciò implica che il tuo codice è unicamente decodificabile.

In effetti, considera qualsiasi codice C=X1,...,Xn cui rovescio CR: =X1R,...,XnR è unicamente decodificabile. Sostengo che ancheC sia unicamente decodificabile. Questo perché

w=Xio1...Xiom se e solo se wR=XiomR...Xio1R.
In parole, decomposizioni di w in parole di codice di C sono in uno-a-uno corrispondenza con decomposizioni di wR in parole di codice di CR . Poiché i secondi sono unici, lo sono anche i primi.

Poiché i codici prefisso sono decodificabili in modo univoco, ne consegue che anche il retro di un codice prefisso è decodificabile in modo univoco. Questo è il caso nel tuo esempio.

La disuguaglianza di McMillan afferma che se C è unicamente decodificabile, allora

Σio=1n2-|Xio|1.
In altre parole, un codice decodificabile in modo univoco soddisfa la disuguaglianza di Kraft. Pertanto, se tutto ciò che ti interessa è ridurre al minimo la lunghezza prevista della parola codice, non c'è motivo di guardare oltre i codici prefisso.

Sam Roweis fornisce nelle sue diapositive un bell'esempio di un codice decodificabile in modo univoco che non è né un prefisso né il contrario di un prefisso:

0,01,110.
Per dimostrare che questo codice è unicamente decodificabile, è sufficiente mostrare come per decodificare il primo codice di una parola. Se la parola inizia con 1 , la prima parola chiave è 110 . Se è nel formato 01* , deve essere 0 o 01 . Altrimenti, deve esserci un prefisso del modulo 01*0 . Ora distinguiamo diversi casi:

prefisso00010011001110codeword001001
Non è possibile decodificare affatto esecuzioni più lunghe di1.


2
Nell'esempio del PO sembra che non possiamo decodificare la prima parola in codice dopo un numero fisso di cifre, ci sono infiniti casi: 1001010101010101…può essere uno fcccccc…o caaa…, e potrebbe essere necessario attendere fino alla fine dell'input per decidere.
Bergi

1
1,10,00

4
@Bergi È sempre decodificabile per qualsiasi numero finito di cifre. C'è sempre un solo modo per decodificare la codifica senza alcun residuo. Ogni altro tentativo finirà con 1 o 0 di riserva. Questo perché il codice è decodificabile in modo univoco se leggiamo prima la coda. In teoria, se qualcosa è unicamente decodificabile in una direzione, non ha senso che ci possa essere più di una soluzione nell'altra direzione
slebetman

@slebetman Mi riferivo a un prefisso finito (con possibili resti). Sì, se prendiamo l'intero input è sempre decodificabile.
Bergi

5

Se ti do un messaggio che dovresti decodificare, allora puoi fare quanto segue: Invertire il messaggio, iniziando con l'ultimo bit invece del primo bit. Invertire le parole in codice. Decodifica il messaggio. Invertire la stringa decodificata.

Puoi farlo perché dopo aver invertito le sei parole in codice, ottieni un codice senza prefisso: 1010, 1001, 01, 000, 11, 001 è privo di prefisso.


0

Se il prefisso libero significa quello che penso, il contrario di 'a' inizia con 1, o 10, o 101, nessuno dei quali è un altro codice intero valido.

Pertanto, se un messaggio termina con 0101, può essere solo una 'a' ed è possibile applicare una logica simile ai bit precedenti.

Tuttavia, se non ci fosse una fine da cui partire? Bene, se il primo bit è 1, sai che non è "a" o "d". Il secondo bit eliminerà 'e' o {'b', 'c', 'f'}. Il terzo bit potrebbe ridurlo a una scelta, ma in caso contrario, è unico per il quarto bit.

Non appena si arriva a una sequenza univoca, si riavvia l'algoritmo sul bit successivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.