Esiste un massimo noto per quanto può essere compressa una stringa di 0 e 1?


38

Molto tempo fa ho letto un articolo di giornale in cui un professore di qualche tipo diceva che in futuro saremo in grado di comprimere i dati in soli due bit (o qualcosa del genere).

Questo ovviamente non è corretto (e potrebbe essere che la mia memoria di ciò che ha affermato esattamente non sia corretta). Comprensibilmente, non sarebbe pratico comprimere una stringa di 0 e 1 in soli due bit perché (anche se tecnicamente possibile), troppi tipi diversi di stringhe finirebbero per comprimersi negli stessi due bit (dato che abbiamo solo '01 'e' 10 'tra cui scegliere).

Comunque, questo mi ha fatto pensare alla fattibilità di comprimere una stringa di lunghezza arbitraria di 0 e 1 secondo uno schema. Per questo tipo di stringa, esiste una relazione nota tra la lunghezza della stringa (il rapporto tra 0 e 1 probabilmente non ha importanza) e la massima compressione?

In altre parole, esiste un modo per determinare qual è la lunghezza minima (minima possibile) a cui è possibile comprimere una stringa di 0 e 1?

(Qui sono interessato alla massima compressione matematica, non a ciò che è attualmente tecnicamente possibile.)


7
Avremmo anche '00' e '11' tra cui scegliere. Ma l'argomento è lo stesso, se li usi, ci sono solo quattro stringhe diverse che puoi comprimere.
RemcoGerlich,

3
mathoverflow.net/q/160099/34859 : Vediamo qui che per il principio del buco del piccione ci sarà sempre un numero infinito di stringhe che non possono essere compresse ... Indipendentemente dall'algoritmo utilizzato. (Vedi la sezione intitolata "Sfondo" in la domanda
ARi

4
La compressione dipende dalla conoscenza che hai della struttura dei dati. C'è stato questo articolo sulla compressione delle mosse di scacchi che mostra come l'aggiunta di conoscenza aiuta ad aumentare la compressione.
extra il

1
Puoi chiarire: la compressione può essere "lossy" o "lossless" (o qualche "ibrido" che può usare entrambi). Stai parlando della massima compressione usando solo metodi di compressione "lossless" o stai includendo (consentendo) anche l'uso di metodi di compressione "lossy". In altre parole, immagino che ci siano 3 possibilità: cercare la "massima compressione" in cui (1) i dati devono sempre poter essere decompressi esattamente come prima della compressione, (2) i dati devono poter essere decompressi, ma è consentita una certa "perdita" (3) non è necessario che i dati possano essere decompressi.
Kevin Fegan,

Ciao @KevinFegan, in questo caso dovrebbe essere l'opzione 1: "i dati devono essere sempre in grado di essere decompressi esattamente come prima della compressione"
x457812

Risposte:


45

La complessità di Kolmogorov è un approccio per formalizzare questo matematicamente. Sfortunatamente, calcolare la complessità di Kolmogorov di una stringa è un problema inequivocabile. Vedi anche: Approssimazione della complessità di Kolmogorov .

È possibile ottenere risultati migliori se si analizza l' origine della stringa anziché la stringa stessa . In altre parole, spesso la sorgente può essere modellata come un processo probabilistico, che in qualche modo sceglie casualmente una stringa, secondo una certa distribuzione. L'entropia di quella distribuzione ti dice quindi la compressione matematicamente migliore possibile (fino a qualche piccola costante additiva).


Sull'impossibilità di una perfetta compressione, potresti anche essere interessato a quanto segue.


ma la compressione è una delle tecniche per stimare l'entropia. La compressione e l'entropia possono essere due aspetti della stessa cosa?
Paul Uszak,

1
@PaulUszak, sì, sono strettamente correlati: vedi, ad esempio, il teorema di Shannon . Tuttavia, tieni presente che i commenti devono essere utilizzati solo per suggerire miglioramenti / chiarimenti al post, non per porre domande di follow-up. Per porre una nuova domanda, utilizza il link "Poni domanda" nella parte in alto a destra della pagina.
DW

35

Nlog2N

Inoltre, in molti casi non ci interessa la ricostruzione esatta . Questo si chiama compressione con perdita ed è il modo in cui musica e video vengono compressi. In questo caso il limite inferiore indicato sopra non regge, ma puoi trovare altri limiti inferiori.


1
Nlog2N

27

Ecco un semplice schema in grado di comprimere senza perdita stringhe di bit arbitrarie, con il risultato più piccolo di un solo bit:

Se la stringa è una corrispondenza identica per la registrazione della nona sinfonia di Beethoven, quarto movimento, in formato AAC memorizzata sul disco rigido del mio computer, l'output è un singolo bit '0'.

SE la stringa è qualcos'altro, quindi l'output è un singolo bit "1", seguito da una copia identica della stringa originale.

Questo schema riduce un possibile input a esattamente un bit e aumenta ogni altro input in lunghezza. Esiste un principio generale: se un algoritmo di compressione è in grado di mappare qualsiasi stringa di input su una stringa compressa e esiste un algoritmo di decompressione corrispondente che mappa qualsiasi stringa compressa sulla stringa originale e l'algoritmo di compressione mappa qualsiasi input su una stringa più corta, quindi deve mappare alcune stringhe di input su stringhe più lunghe.


2
Ottimo lavoro nel rendere la risposta chiara ed ovvia. Vale la pena notare che questo è simile a quello che tenta di fare un buon algoritmo di compressione: per un determinato dominio di input, cerca di accorciare i tipi più comunemente previsti di input, in cambio dell'allungamento di input meno comuni.
JBentley,

6

Per ogni schema di compressione che puoi inventare, è possibile produrre dati che non saranno comprimibili da esso. Pertanto, anche se lo schema di compressione è molto efficiente con alcuni tipi di dati, non verrà mai compresso in modo coerente a un determinato rapporto.

Il modo per produrre un esempio di dati non comprimibili per un particolare algoritmo di compressione è semplice: prendere qualsiasi tipo di dato ed eseguirlo ripetutamente attraverso l'algoritmo di compressione, fino a quando le dimensioni non diminuiscono più.

Quindi la comprimibilità di una stringa di bit non è in realtà una funzione della lunghezza della stringa, ma della sua complessità rispetto all'algoritmo di compressione.


Benvenuto! Si noti che questo vale solo per la compressione senza perdita. La compressione con perdita può comprimere tutte le stringhe (almeno, purché si accetti l'algoritmo "Restituisci stringa vuota" come algoritmo di compressione con perdita. ;-)).
David Richerby

@DavidRicherby È vero, certo. Ma ho avuto l'impressione dalla domanda che l'OP stava ponendo sulla compressione senza perdita, perché non ha molto senso discutere la massima compressione di uno schema con perdita; l'idea di poterlo portare agli estremi inutilizzabili è inerente al concetto di compressione con perdita di dati.
m69 '' accattivante e poco accogliente ''

Sì, penso che sia un'interpretazione ragionevole.
David Richerby,

-2

Esiste un algoritmo interessante e completamente diverso che viene utilizzato dai sistemi di backup aziendali. L'idea è che se hai un'azienda con 10.000 computer, molti di questi computer conterranno molti file identici. Ad esempio, un'e-mail inviata a tutti gli utenti dell'azienda potrebbe finire come un file identico su ogni singolo disco rigido.

Quindi un sistema di backup che tenta di eseguire il backup di un file dovrebbe ovviamente tentare di comprimere il file per risparmiare spazio, ma prima il sistema di backup controlla se è già stato salvato un file assolutamente identico! Quindi, invece di eseguire il backup di qualsiasi cosa , tutto ciò che fa il sistema di backup è ad esempio ricordare che sul disco rigido è presente il numero di file 1.487.578 sul sistema di backup.

Ciò è particolarmente efficace, ad esempio, quando 10.000 utenti hanno tutti lo stesso sistema operativo e applicazioni installate. Per i singoli utenti non è molto utile.


4
È interessante ma non vedo come risponda alla domanda. La domanda richiede limiti di compressione, non una discussione generale sui backup aziendali.
David Richerby,

Questo si chiama deduplicazione e viene fatto usando gli hash. Ci vuole molta RAM per memorizzare un hash a 128 bit per ogni blocco sul disco. ZFS può fare questo per opportunisticamente fare in modo che alcuni blocchi condividano dello spazio di archiviazione copia su scrittura. Ma questo tipo di problema di compressione (in cui stai cercando di comprimere un enorme set di dati a cui hai bisogno di un accesso casuale e che sta cambiando troppo rapidamente per la normale compressione del flusso, ma ha ridondanza a livello di blocco) non è rilevante come risposta a questo domanda.
Peter Cordes,
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.