Codifica delta

algoritmo di compressione

Template:Da tradurre La codifica delta è un modo per immagazzinare o trasmettere dati usando le differenze tra i dati sequenziali piuttosto che sul file completo. A volte la codifica delta è chiamata compressione delta, in particolare quando è richiesta la storia dei cambiamenti (per esempio nei progetti software).

Le differenze sono registrate in file discreti chiamati "delta" o "diff". Poiché i cambiamenti sono di solito piccoli, la codifica delta riduce notevolmente la ridondanza dei dati. Insiemi di uniche delta sono sostanzialmente più efficienti nella riduzione di spazio che i loro equivalenti non codificati.


(La codifica delta non deve essere confusa con la codifica Elias delta).

Forse l'esempio più semplice è la memorizzazione di byte come differenze (delta) tra valori sequenziali, al posto della memorizzazione dei semplici valori. Quindi al posto di 2, 4, 6, 9, 7, si potrebbe memorizzare 2, 2, 2, 3, -2. Questo non è molto utile se usato da solo, ma può incrementare la compressione dei dati. I file IFF e il formato per i suoni 8SVX applicano questa codifica ai dati grezzi che codificano il suono prima di applicare la compressione. Sfortunatamente, neppure tutti i suoni a 8 bit sono compressi con vantaggi, e l'uso della codifica delta è ancora minore nei suoni a 16 bit. Di conseguenza, gli algoritmi di compressione usano la codifica delta solo quando la compressione risulta migliore. Tuttavia, nella compressione dei video la compressione delta può ridurre considerabilmente la grandezza.

Una delta può essere definita in due maniere, delta simmetrica e delta diretta. Una delta simmetrica può essere espressa come dove e rappresentano due successive versioni.

Una delta diretta, chiamata anche scelta, è una sequenza di operazioni elmentari di scelta la quale, quando applicata ad una versione restituisce un'altra versione (si noti la corrispondenza con i transaction log nei database).

Una variante della codifica delta, che codifica le differenze tra prefissi o suffissi di stringhe, viene chiamata codifica incrementale.

Il seguente codice in C effettua una semplice codifica e decodifica delta.

void delta_encode(char *buffer, int length)
{
  char t = 0;
  char original;
  int i;
  for(i = 0; i < length; i++)
  {
    original = buffer[i];
    buffer[i] -= t;
    t = original;
  }
}

void delta_decode(char *buffer, int length)
{
  char t = 0;
  int i;
  for(i = 0; i < length; i++)
  {
    buffer[i] += t;
    t = buffer[i];
  }
}

Voci correlate

  • RFC 3229 - Delta Encoding in HTTP
  • RFC 3284 - The VCDIFF Generic Differencing and Compression Data Format