Diamo prima un'occhiata a cosa fa la compressione. Ci vuole qualcosa che è grande in qualcosa di più piccolo. Sì, questo è un modo veramente alto di guardarlo, ma è un importante punto di partenza.
Con una compressione senza perdita di dati, c'è un punto in cui non puoi più spremere le informazioni - ha raggiunto la massima densità di informazioni.
Questo entra nella definizione della teoria dell'informazione di entropia . Il pioniere in questo campo è Claude Shannon che ha scritto un articolo nel 1950 intitolato Predizione e entropia dell'inglese stampato . Risulta che l'inglese ha da 1,0 a 1,2 bit di informazioni per lettera. Pensa alla parola th_
che cos'è vuota? Puoi prevederlo - e quindi non ci sono molte informazioni in quella lettera.
Questo approfondisce ciò che fa la codifica di Huffman: stringe le informazioni il più strettamente possibile.
Cosa succede se stringi più strong? Beh, niente davvero. Non puoi montare più di 1 bit in 1 bit. Una volta compresso i dati nel modo ottimale in quanto può essere compresso, non è più possibile comprimerlo.
C'è uno strumento là fuori che misurerà la quantità di entropia in un determinato flusso di bit. L'ho usato per scrivere su numeri casuali . È ent . La prima misura che fa è quella dell'entropia nel flusso (può fare altri test accurati come calcolare il pi).
Se prendiamo qualcosa di abbastanza casuale, come i primi 4k bit di pi, otteniamo:
Entropy = 7.954093 bits per byte.
Optimum compression would reduce the size of this 4096 byte file by 0 percent.
Chi square distribution for 4096 samples is 253.00, and randomly would exceed this value 52.36 percent of the times.
Arithmetic mean value of data bytes is 126.6736 (127.5 = random).
Monte Carlo value for Pi is 3.120234604 (error 0.68 percent).
Serial correlation coefficient is 0.028195 (totally uncorrelated = 0.0).
E qui vediamo che non puoi comprimere le cifre di pi perché ci sono quasi 8 bit per byte di dati lì.
Quindi ... numeri casuali, non puoi comprimerli affatto.
Ci sono altre cose che hanno quantità piuttosto elevate di contenuto di informazioni come i dati crittografati.
Tornando al semplice esempio della parola th_
e riuscendo a indovinare cosa verrà dopo, lo sappiamo a causa delle frequenze lettera in inglese e delle parole inglesi valide. D'altra parte, se comprimiamo questo, è più difficile indovinare qual è la lettera successiva e quindi c'è più densità di informazioni per lettera.
Puoi vedere questo con (un semplice codice) la cifra di Vigenère
(daWikipedia: frequenze lettera Vigenere )
Qui possiamo vedere che le frequenze delle lettere sono molto più simili a quelle del normale testo inglese. Ciò renderebbe più difficile per la codifica di Huffman creare una codifica ottimale per il testo.
I moderni schemi di crittografia fanno un lavoro ancora migliore nel mescolare insieme le informazioni della chiave e il testo del dolore e creare un flusso di dati con una densità di informazioni estremamente elevata, e quindi molto difficile prevedere quale personaggio verrà dopo.
E così, quelle sono le cose che la compressione ha difficoltà con e perché.