ITRM20000347A1 - Metodo di rappresentazione numerica. - Google Patents

Metodo di rappresentazione numerica. Download PDF

Info

Publication number
ITRM20000347A1
ITRM20000347A1 IT2000RM000347A ITRM20000347A ITRM20000347A1 IT RM20000347 A1 ITRM20000347 A1 IT RM20000347A1 IT 2000RM000347 A IT2000RM000347 A IT 2000RM000347A IT RM20000347 A ITRM20000347 A IT RM20000347A IT RM20000347 A1 ITRM20000347 A1 IT RM20000347A1
Authority
IT
Italy
Prior art keywords
string
compressed
substring
binary
bits
Prior art date
Application number
IT2000RM000347A
Other languages
English (en)
Inventor
Elena Leanza
Original Assignee
Salpiani Giampietro
Elena Leanza
Ghazzanfari Tannaz
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Salpiani Giampietro, Elena Leanza, Ghazzanfari Tannaz filed Critical Salpiani Giampietro
Priority to IT2000RM000347A priority Critical patent/ITRM20000347A1/it
Publication of ITRM20000347A0 publication Critical patent/ITRM20000347A0/it
Priority to PCT/IT2001/000329 priority patent/WO2002001728A1/en
Priority to AU70995/01A priority patent/AU7099501A/en
Priority to EP01949885A priority patent/EP1297630A1/en
Publication of ITRM20000347A1 publication Critical patent/ITRM20000347A1/it

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Devices For Executing Special Programs (AREA)
  • Preparation Of Compounds By Using Micro-Organisms (AREA)
  • Holo Graphy (AREA)

Description

DESCRIZIONE
a corredo di una domanda di Brevetto d'invenzione avente per titolo: "Metodo di rappresentazione numerica"
La presente invenzione si riferisce in generale ad un metodo di rappresentazione numerica che può risultare vantaggiosamente applicabile ad un metodo di compressione e decompressione di dati digitali, consentendo una minimizzazione, di entità selezionabile, della quantità di dati e mantenendone l'integrità.
E’ noto come uno dei principali problemi nella tecnologia dei computer e, più in generale, delle telecomunicazioni, sia quello della sempre maggiore quantità di dati necessari alle elaborazioni. Ciò implica una pesante occupazione delle memorie leggibili da computer, quali supporti mobili di memoria (ad esempio CD-ROM e floppy disk) o fissi (i cosiddetti Hard Disk dei computer), ed una conseguente prolungata occupazione delle reti di telecomunicazione durante la trasmissione di informazioni, che comporta una maggiore probabilità di errori di trasmissione, un maggior costo di trasmissione ed una limitazione fisica alla fattibilità di specifiche applicazioni in tempo reale. In proposito, si può pensare ad alcune applicazioni che prevedono l'impiego di canali trasmissivi di capacità limitata per la trasmissione di notevoli quantità di dati; in particolare, si può richiamare il tentativo di realizzazione di un servizio di televisione interattiva, nota come Video-on-demand, sulla rete telefonica a doppino di rame, che, incontrando delle enormi limitazioni di canale, deve necessariamente trasmettere una quantità di dati inferiore, degradando di conseguenza la risoluzione delle immagini televisive.
La attuale rappresentazione numerica dei dati digitali, ovvero la rappresentazione binaria, è ritenuta come la più efficiente ed affidabile.
Considerando il fatto che attualmente la quantità di informazioni memorizzate negli elaboratori e/o scambiate sulle reti di telecomunicazioni è in rapida crescita, grazie anche al forte impulso fornito dalla rete informatica Internet che utilizza ampiamente informazioni ad elevata quantità di dati (come le immagini digitali), il problema della riduzione della quantità di dati rappresentativi sia di informazioni che di programmi applicativi è estremamente critico.
Per risolvere tale problema sono state sviluppate molte soluzioni che prevedono una codificazione dei dati, rappresentati in binario, secondo opportuni metodi allo scopo di ridurre l’occupazione di memoria. Generalmente, tali metodi di codificazione sono particolarmente vantaggiosi quando applicati a specifiche tipologie di dati da codificare, aventi specifiche caratteristiche. In altre parole, ogni singolo metodo di codifica risulta più o meno vantaggioso a seconda che sia applicato, ad esempio, a dati rappresentativi di immagini fisse o a dati rappresentativi di immagini video o a dati rappresentativi di suoni.
I metodi di codifica possono essere classificati in base alla congruenza tra dati decodificati e dati originali oppure in base alla rappresentazione a lunghezza fìssa o variabile dei dati originali e dei dati codificati.
Il primo tipo di classificazione raggruppa i metodi di codifica in metodi senza perdita di informazione o “lossless”, nei quali i dati ricostruiti o decodificati a partire da quelli codificati sono identici ai dati originali, ed in metodi a perdita di informazione o “lossy", in cui i dati ricostruiti perdono parte dell’informazione dei dati originali. Esempi di metodi lossless sono la codifica a lunghezza di catena, o RLE (Run Length Encoding), la codifica di Huffman e la codifica di Lempel-Ziv-Welch, o LZW; un esempio di metodo lossy è la codifica a campionamento e/o quantizzazione grezza, o CS&Q (Coarser Sampling and/or Quantization).
In conformità al secondo tipo di classificazione, le codifiche RLE e LZW prevedono dati originali a lunghezza variabile e dati codificati a lunghezza fissa, la codifica di Huffman prevede dati originali a lunghezza fissa e dati codificati a lunghezza variabile, la codifica CS&Q prevede sia i dati originali che i dati codificati a lunghezza fissa.
Tuttavia, proprio a causa del fatto che ogni metodo di codificazione è appositamente studiato per specifiche tipologie di dati da codificare, sorgono sempre nuove esigenze di codificazione di dati aventi particolari caratteristiche. Ciò produce una certa scomodità di impiego, soprattutto nel caso di trasmissione di dati compositi, richiedendo la utilizzazione di diversi metodi di codificazione.
Inoltre, è sempre attiva la ricerca di perfezionati metodi di codifica che comprimano sempre di più i dati da memorizzare e/o trasmettere.
In questo contesto, viene ad inserirsi la soluzione proposta secondo la presente invenzione.
Lo scopo della presente invenzione è, pertanto, quello di fornire un metodo di rappresentazione numerica, valido per qualsiasi tipo di dato, che sia applicabile ad un metodo “lossless" di compressione e decompressione di dati digitali, consentendo una minimizzazione della quantità di dati di entità selezionabile.
Forma oggetto specifico della presente invenzione un metodo di compressione di una stringa binaria di dati di ingresso, avente un numero L di bit, in una stringa binaria compressa di dati di uscita, avente un numero X di bit, caratterizzato dal fatto che almeno una sottostringa avente un numero n di bit, della stringa binaria di ingresso viene interpretata attribuendole un valore numerico intero N pari alla somma degli elementi di una successione monotona crescente di numeri interi, tra i primi n elementi di tale successione S , il cui bit corrispondente a, è pari a “1, secondo la formula ([10])
e, per ogni sottostringa viene creata una sottostringa binaria compressa dm-}dm-2..Jld0 , avente m bit, in cui viene memorizzata (a rappresentazione binaria del valore numerico intero N , attribuito alla corrispondente sottostringa αη_^α„_2..χιλα0, la rappresentazione binaria di N essendo data dalla formula
la stringa binaria compressa di dati di uscita comprendendo, per ogni sottostringa la corrispondente sottostringa binaria compressa ed i dati della stringa binaria di ingresso privi di
detta almeno una sottostringa ·· rapporto R per
k~ 1,2,..., tra due elementi consecutivi della successione S , soddisfacendo la condizione data dalla formula ([7])
il numero n di bit di detta almeno una sottostringa essendo compreso tra un valore minimo ed il numero L di bit della stringa binaria di dati di ingresso, secondo la formula:
,
il valore minimo essendo pari al minimo valore di n che soddisfa la seguente condizione:
In particolare, secondo l’invenzione, il primo elemento della successione S è pari a 1 (s0 =1), mentre il secondo elemento s1 della successione S è pari a 2 (s1 =2).
Ancora secondo l’invenzione, il rapporto Rk tra due elementi consecutivi della successione S tende ad un valore costante R al crescere dell’indice k , secondo la formula ([8])
Ulteriormente, secondo l’invenzione, il rapporto Rk tra due elementi consecutivi della successione S non è mai superiore a 2, ovvero ([9])
Sempre secondo il metodo inventivo, a partire dall’elemento (r l)-esimo, ovvero per k ≥ r , ogni elemento sk della successione S è pari ad un polinomio dei p elementi precedenti, essendo p ≤ r , secondo la formula ([12])
dove i p coefficienti eh, per h = l,2,...,p , sono valori numerici costanti interi positivi, negativi o nuili.
In particolare, la successione S è definita dalla formula ([13])
Preferibilmente, secondo l’invenzione w> 10 o n≥ 13.
Il metodo secondo l'invenzione può comprendere nel’ordine:
- una fase iniziale (3) in cui viene memorizzata una informazione relativa a! numero L di bit della stringa binaria di dati di ingresso;
- una successiva fase (5) in cui la stringa binaria di ingresso viene assegnata ad una stringa ausiliaria denominata “STRINGA ATTUALE”; - un ciclo di fasi comprendente nell’ordine:
- un blocco di compressione di STRINGA ATTUALE in una seconda stringa ausiliaria denominata “STRINGA COMPRESSA”;
- una fase di verifica che STRINGA ATTUALE sia stata effettivamente compressa;
- una fase di verifica, eseguita in caso di esito positivo della precedente fase di verifica, che STRINGA COMPRESSA abbia dimensione maggiore di un valore D < L preimpostato,
- una fase di assegnazione, eseguita in caso di esito positivo della precedente fase di verifica, di STRINGA COMPRESSA a STRINGA ATTUALE, e successiva ripetizione del ciclo di fasi a partire dal blocco di compressione;
- una fase di verifica, eseguita nel caso una delle due fasi di verifica dia esito negativo, che la dimensione della giustapposizione della informazione sulla dimensione L e di STRINGA COMPRESSA sia inferiore a
- una fase di assegnazione, eseguita in caso di esito positivo della precedente fase di verifica della dimensione della giustapposizione, della giustapposizione dell’informazione relativa alla dimensione L e di STRINGA COMPRESSA alla stringa binaria compressa di dati di uscita; e
- una fase di assegnazione, eseguita in caso di esito negativo della precedente fase di verifica della dimensione della giustapposizione, della stringa binaria di dati di ingresso alla stringa binaria compressa di dati di uscita.
In particolare, la informazione relativa al numero L di bit della stringa binaria di dati di ingresso è memorizzata con un prefissato numero t di bit.
Secondo una prima forma di realizzazione del metodo secondo l’invenzione prevede che il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA:
- suddivide STRINGA ATTUALE in / sottostringhe comprendenti « bit, dove
- scandisce almeno una volta dette sottostringhe.
Preferibilmente, secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA, nel caso la dimensione W di STRINGA ATTUALE non sia un multiplo di n , riempie almeno una sottostrìnga con una coda di bit pari a “0”.
Ulteriormente, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA, nel caso la dimensione W di STRINGA ATTUALE non sia un multiplo di n , riempie l’ultima sottostringa viene riempita con una coda di bit pari a “0”.
Sempre secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA, per ogni sottostrìnga non comprendente due bit consecutivi pari a Ί”, denominata sottostringa canonica, e non successiva, nell’ordine di scansione, ad un’altra sottostrìnga canonica, crea una corrispondente sottostringa binaria compressa
Inoltre, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA, per ogni sottostrìnga non comprendente due bit consecutivi pari a “Γ, denominata sottostringa canonica, crea una corrispondente sottostringa binaria compressa
In particolare, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA, effettua una elaborazione di ogni sottostringa comprendente almeno due bit consecutivi pari a T, denominata sottostringa ridondante o non canonica, e non successiva, nell’ordine di scansione, ad un’altra sottostringa per la quale sia stata creata una sottostringa binaria compressa, e, nel caso la sottostringa ottenuta dalla elaborazione delia sottostringa ridondante sia canonica, crea una sottostringa binaria compressa corrispondente alla sottostringa elaborata.
Inoltre, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA, effettua una elaborazione di ogni sottostringa comprendente almeno due bit consecutivi pari a “1, denominata sottostringa ridondante o non canonica, e, nel caso la sottostringa ottenuta dalla elaborazione della sottostringa ridondante sia canonica, crea una sottostringa binaria compressa corrispondente alla sottostringa elaborata.
Ulteriormente, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA effettua detta elaborazione durante la stessa scansione delle / sottostringhe nella quale crea le sottostringhe binarie compresse corrispondenti alle sottostringhe canoniche.
Ancora secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA effettua detta elaborazione in una scansione delie l sottostringhe successiva a quella durante la quale crea le sottostringhe binarie compresse corrispondenti alle sottostringhe canoniche.
In particolare, detta elaborazione è un NOT logico.
Ulteriormente, detta elaborazione è uno XOR logico con almeno una maschera, o è uno XOR logico con una maschera, comprendente un numero r di bit non superiore a n ( r ≤ n ), che viene determinata come la maschera che rende canoniche il massimo numero di sottostringhe ridondanti da elaborare.
Ancora particolarmente, detta elaborazione è una operazione di aritmetica binaria, preferibilmente effettuata con almeno una costante binaria, comprendente un numero r di bit non superiore a n (r ≤ n).
Sempre secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA crea altresì una stringa di intestazione, o header, comprendente, per ognuna delle / sottostringhe in cui è suddivisa STRINGA ATTUALE, un insieme di bit che indica se la corrispondente sottostringa di STRINGA ATTUALE è stata compressa e/o se la corrispondente sottostringa di STRINGA ATTUALE è stata compressa dopo essere stata elaborata e/o il tipo di elaborazione effettuata sulla corrispondente sottostringa di STRINGA ATTUALE.
In particolare, l'header comprende / bit, ognuno dei quali corrisponde univocamente ad una sottostringa di STRINGA ATTUALE ed è pari a “1”, se la corrispondente sottostringa viene compressa, oppure è pari a "0”, se la corrispondente sottostringa non viene compressa.
Ulteriormente, secondo l’invenzione, l’header comprende, per ogni sottostrìnga di STRINGA ATTUALE che viene compressa dopo essere stata elaborata, almeno un corrispondente bit che indica il tipo di elaborazione effettuata sulla corrispondente sottostringa.
Secondo una particolare realizzazione del metodo secondo l’invenzione, l’header comprende altresì detta almeno una maschera. In un’altra particolare realizzazione del metodo secondo l'invenzione, l’header comprende altresì detta almeno una costante binaria.
In particolare, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA comprime anche l’header.
Ancora più in particolare, il blocco di compressione comprìme almeno una sottostringa avente un numero di bit ri con dell’header secondo il metodo in cui la successione S è definita dalla formula {[13])
e in particolare con ri= n.
Ancora secondo l’invenzione, il blocco di compressione comprime almeno una sottostringa avente un numero di bit ri con ri≤ l , dell’header secondo la codifica a lunghezza di catena, o RLE (Run Length Encoding).
Ulteriormente, secondo l'invenzione si inserisce in testa od in coda a STRINGA COMPRESSA un indicatore, o flag, il cui valore binario indichi il tipo di compressione dell’header.
In una ulteriore forma di realizzazione del metodo secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA prevede
- una prima iterazione di fasi, in cui effettua una scansione delle / sottostringhe, in cui è suddivisa STRINGA ATTUALE, durante la quale, per ogni sottostringa non comprendente due bit consecutivi pari a "1 ”, denominata sottostrìnga canonica, viene creata una corrispondente sottostringa binaria compressa durante tate scansione essendo altresì creata una prima stringa di intestazione, o header, comprendente, per ognuna delle 1 sottostringhe in cui è suddivisa STRINGA ATTUALE, un bit che è pari a "1 ”, se la corrispondente sottostringa viene compressa, oppure è pari a <u>0”, se la corrispondente sottostringa non viene compressa, ed
- una o più ulteriori iterazioni di fasi, in cui effettua una elaborazione di ogni sottostringa, per la quale durante la iterazione precedente non sia stata creata una corrispondente sottostringa binaria compressa e, nel caso la sottostringa ottenuta dalla elaborazione sia canonica, crea una sottostringa binaria compressa corrispondente alla sottostringa elaborata, durante tale ogni ulteriore iterazione essendo altresì creato un corrispondente ulteriore header comprendente, per ogni sottostringa per la quale durante la iterazione precedente non sia stata creata una corrispondente sottostringa binaria compressa un bit che è pari a T, se la corrispondente sottostringa è stata compressa dopo l'elaborazione, oppure è pari a “0”, se la corrispondente sottostringa non viene compressa dopo l’elaborazione.
In particolare, detta elaborazione è un NOT logico, o uno XOR logico con almeno una maschera, o uno XOR logico con una maschera, comprendente un numero r di bit non superiore a n {r < n), che viene determinata come la maschera che rende canoniche il massimo numero di sottostringhe per le quali durante la iterazione precedente non sia stata creata una corrispondente sottostringa binaria compressa
Sempre secondo l’invenzione, detta elaborazione è una operazione di aritmetica binaria, in particolare effettuata con almeno una costante binaria, comprendente un numero r di bit non superiore a n
Ulteriormente, secondo l'invenzione, l'header può comprendere altresì detta almeno una maschera.
Inoltre l’header può comprendere altresì detta almeno una costante binaria.
Ancora secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA comprime anche il primo header e/o almeno uno di detti ulteriori header.
In particolare, il blocco di compressione comprime il primo header e/o almeno uno di detti ulteriori header secondo il metodo in cui il blocco di compressione comprime almeno una sottostringa
avente un numero di bit ri con dell’header secondo il metodo in cui la successione S è definita dalla formula ([13])
e in particolare con ri- n .
Secondo una ulteriore forma di realizzazione del metodo secondo l'invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA prevede
- una prima iterazione di fasi, in cui
- viene effettuata una scansione di STRINGA ATTUALE con una prima finestra di dimensione non superiore ad un valore massimo WD , la prima finestra scandendo STRINGA ATTUALE spostandosi con un passo WSX di bit compreso tra 1 e WD
- ogni volta che la prima finestra individua una sottostringa non comprendente due bit consecutivi pari a “Γ, denominata sottostringa canonica C 1 di dimensione η,, , viene memorizzato un indice che individua la posizione della sottostringa canonica C 1 all'interno di STRINGA ATTUALE, e la sottostringa canonica C 1 viene compressa in una sottostringa binaria compressa secondo la compressione di Fibonacci,
- al termine della scansione, viene memorizzato il numero G, di sottostringhe canoniche che sono state compresse e le parti di STRINGA ATTUALE, non appartenenti a sottostringhe canoniche C 1 di dimensione n11 , vengono tra loro giustapposte in una prima stringa di scarto, ed
- una o più ulteriori iterazioni di fasi, in cui
- viene effettuata una scansione della stringa di scarto ottenuta alla iterazione precedente con una corrispondente ulteriore finestra di dimensione progressivamente decrescente, la ulteriore finestra scandendo la relativa stringa di scarto spostandosi con un passo WSg di bit compreso tra 1 e
- ogni volta che la ulteriore finestra individua una sottostringa canonica C di dimensione nlg , viene memorizzato un indice che individua la posizione della sottostringa canonica Cng all’interno della stringa di scarto ottenuta alla iterazione precedente, e la sottostringa canonica Cng viene compressa in una sottostringa binaria compressa secondo la compressione di Fibonacci,
- al termine della scansione, viene memorizzato il numero Gg di sottostringhe canoniche Cng che sono state compresse e le parti della strìnga di scarto ottenuta alla iterazione precedente, non appartenenti a sottostringhe canoniche di dimensione n]g , vengono tra loro giustapposte in una corrispondente ulteriore stringa di scarto, (e iterazioni di fasi terminando quando
- l’ultima strìnga di scarto generata è vuota, oppure
- l'ultima stringa di scarto generata è troppo piccola per essere effettivamente compressa, oppure
- la dimensione n1g dell’ultima finestra di scansione è pari a STRINGA COMPRESSA comprendendo:
- il numero F di scansioni effettuate fino alla ultima scansione che ha effettivamente compresso,
- la stringa di scarto generata dall’ultima iterazione F , e
- per ogni scansione g , per g = Ι,.,.,,Ρ :
- il numero Gg di sottostringhe canoniche C che sono state compresse,
- per ogni sottostringa canonica Cng :
- l'indice che individua la posizione della sottostringa canonica nella stringa di scarto generata dalla iterazione precedente (g-l), e
- la sottostringa compressa
In particolare, detta STRINGA ATTUALE ha dimensione non superiore ad un valore massimo M , e preferibilmente M =1024.
Sempre secondo l’invenzione, WD <M e preferibilmente WD = 64. Ancora secondo l’invenzione
Ulteriormente, secondo l’invenzione,
In particolare, secondo l’invenzione, WS, = 1.
Preferibilmente, secondo l'invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA prevede preliminarmente alla prima iterazione di fasi una elaborazione di STRINGA ATTUALE.
Secondo una ulteriore forma di realizzazione del metodo secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA prevede una prima fase di conteggio del numero P di bit pari a "1” presenti in STRINGA ATTUALE.
In particolare, nel caso che il numero P soddisfi la condizione «20])
viene creata una stringa espansa ottenuta da STRINGA ATTUALE giustapponendo ad ognuno dei P bit pari a "1” un bit “0”.
Ulteriormente, secondo l’invenzione, nel caso che il numero P soddisfi la condizione ([20])
viene effettuata una operazione di NOT logico su STRINGA ATTUALE e viene creata una stringa espansa (67) ottenuta dalla stringa generata dal NOT giustapponendo ad ogni bit pari a "1” un bit “0”.
In una ulteriore forma di realizzazione del metodo secondo l’invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA prevede una operazione di XOR logico su STRINGA ATTUALE con almeno una maschera, comprendente un numero r di bit non superiore a L ( r ≤L ), determinata in modo tale che la stringa generata dallo XOR soddisfi la condizione ([20])
e successivamente la creazione di una stringa espansa ottenuta dalla strìnga generata dallo XOR giustapponendo ad ogni bit pari a "1” un bit 0”.
Secondo una ulteriore forma di realizzazione del metodo secondo l'invenzione, il blocco di compressione di STRINGA ATTUALE in STRINGA COMPRESSA prevede che ognuna delle / sottostringhe, in cui è suddivisa STRINGA ATTUALE, sia compressa in una sottostrìnga compressa comprendente una prima parte, detta “mantissa”, avente un numero m di bit, otenuta tramite il metodo secondo compressione di Fibonacci, ed una seconda parte, deta “esponente”, avente un numero z di bit, variabile al variare della mantissa, con z ≥ 0 e pari al numero di bit necessario per rappresentare il numero di stringhe ad n bit alle quali corrisponde lo stesso valore numerico intero N , quando sono interpretate mediante la successione secondo la compressione di Fibonacci, e comprendenti almeno due bit consecutivi pari a “1", denominate stringhe ridondanti, il blocco di compressione prevedendo che sia prefissato ordinamento di tutte le stringhe ad n bit, alle quali corrisponde lo stesso valore numerico intero N , e che l’esponente individui i’indice della rappresentazione ridondante corrispondente alla sottostringa compressa, STRINGA COMPRESSA comprendendo le sottostringhe compresse.
In particolare, secondo l’invenzione, nel caso il numero di stringhe ad n bit alle quali corrisponde lo stesso valore numerico intero N , quando sono interpretate mediante la successione secondo la compressione di Fibonacci, sia superiore a 1, la stringa non comprendente due bit consecutivi pari a "1” viene espressa dall'esponente (73) mediante z bit pari a “0”.
L’invenzione riguarda inoltre un metodo di decompressione di una stringa binaria compressa, caratterizzato dal fatto che la stringa binaria compressa è generata, a partire da una stringa binaria di dati avente un numero L di bit, mediante il metodo di compressione descritto.
L'invenzione copre anche un apparato elettronico, comprendente almeno una unità centrale di elaborazione ed almeno una unità di memoria, caratterizzato dal fatto di eseguire il metodo di compressione descritto, nonché un apparato elettronico, comprendente almeno una unità centrale di elaborazione ed almeno una unità di memoria, caratterizzato dal fatto di eseguire detto metodo di decompressione.
E' inoltre oggetto dell’invenzione un segnale elettrico, magnetico o elettromagnetico comprendente almeno una stringa di dati, in cui detta almeno una stringa di dati è una stringa binaria compressa generata, a partire da una stringa binaria di dati avente un numero L di bit, mediante detto metodo di compressione.
Viene inoltre descritto e rivendicato un supporto di memoria leggibile da un elaboratore contenente almeno una stringa di dati, in cui detta almeno una stringa di dati è una stringa binaria compressa generata, a partire da una stringa binaria di dati avente un numero L di bit, mediante detto metodo di compressione.
Un altro oggetto specifico della presente invenzione è un programma per elaboratore comprendente mezzi a codice atti ad eseguire, quando operano su un elaboratore, il metodo di compressione qui descritto e rivendicato, nonché un supporto di memoria leggibile da un elaboratore, avente un programma memorizzato su di esso, in cui detto programma è il programma per elaboratore summenzionato.
Ancora oggetto specifico dell’invenzione è un programma per elaboratore comprendente mezzi a codice atti ad eseguire, quando operano su un elaboratore, il metodo di decompressione descritto e rivendicato, nonché un supporto di memoria leggibile da un elaboratore, avente un programma memorizzato su di esso, in cui il programma è il programma per elaboratore summenzionato.
La presente invenzione verrà ora descritta, a titolo illustrativo, ma non limitativo, secondo sue preferite forme di realizzazione, con particolare riferimento alle Figure dei disegni allegati, in cui:
la Figura 1 mostra schematicamente una compressione di una stringa binaria impiegante una nuova rappresentazione numerica frazionaria;
la Figura 2 mostra schematicamente una compressione di una stringa binaria secondo una preferita forma di realizzazione del metodo secondo la invenzione;
la Figura 3 mostra un diagramma di flusso di una prima forma di realizzazione del metodo di compressione secondo l’invenzione;
la Figura 4 mostra schematicamente due stringhe impiegate e/o elaborate dal metodo di Figura 3;
la Figura 5 mostra un diagramma di flusso di un particolare blocco di fasi del metodo di Figura 3;
ia Figura 6 mostra schematicamente alcune stringhe impiegate e/o elaborate da una seconda forma di realizzazione dei metodo di compressione secondo l'invenzione;
la Figura 7 mostra un diagramma di flusso di un particolare blocco di fasi del metodo di Figura 6;
la Figura 8 mostra schematicamente alcune stringhe impiegate e/o elaborate da una ulteriore forma di realizzazione del metodo di compressione secondo l'invenzione;
la Figura 9 mostra schematicamente alcune stringhe impiegate e/o elaborate da una ulteriore forma di realizzazione del metodo di compressione secondo l’invenzione;
la Figura 10 mostra schematicamente alcune stringhe impiegate e/o elaborate da una ulteriore forma di realizzazione dei metodo di compressione secondo l'invenzione;
la Figura 11 mostra schematicamente alcune stringhe impiegate e/o elaborate da una ulteriore forma di realizzazione del metodo di compressione secondo l’invenzione; e
la Figura 12 mostra schematicamente alcune stringhe impiegate e/o elaborate da una ulteriore forma di realizzazione del metodo di compressione secondo l'invenzione.
Nel seguito della descrizione verranno utilizzati uguali riferimenti per indicare elementi uguali nelle Figure.
La considerazione di partenza della presente invenzione è quella della rappresentazione simbolica dei numeri.
Attualmente, la rappresentazione più diffusa dei numeri, utilizzata anche nella rappresentazione dei dati digitali, è fondata su sistemi di numerazione posizionali pesati. Tali sistemi impiegano un insieme limitato di simboli elementari detti “cifre", ai quali è assegnato un valore numerico generalmente progressivo, il cui numero b (pari ad un numero intero positivo maggiore di 1) è detto “base” del sistema numerico.
Dato un numero Z , che, per semplicità, ma senza perdita di generalità, supponiamo intero positivo, la sua rappresentazione numerica in base b e ad « cifre è data da una stringa di n simboli, ognuno dei quali è pari ad una qualsiasi delle b cifre ed ha un peso numerico diverso in funzione della posizione in cui si trova. I pesi sono uguali a potenze della base b in cui l’esponente è funzione della posizione. In altre parole, data una stringa di n simboli il numero Z corrispondente è dato da un polinomio di n addendi ognuno dei quali è pari al prodotto del valore numerico della cifra corrispondente con il corrispondente peso numerico:
Come noto, nel caso generale di numeri positivi non interi, la parte decimale può essere calcolata introducendo, alla destra del simbolo avente peso meno significativo, ulteriori simboli i cui pesi numerici sono pari a potenze della base b in cui l’esponente, ancora funzione della posizione, è negativo. Nel caso ancora di numeri negativi esistono varie possibili alternative per tenere conto del segno del numero; ad esempio, il primo simbolo a può avere il significato di segno “+” o
oppure può avere peso negativo pari a (-b<n-1 >). Nel seguito della presente descrizione si suppone che i numeri rappresentati siano numeri positivi e, pertanto, si trascureranno le rappresentazioni dei numeri negativi (ed altre note rappresentazioni, diverse dalla formula [1], quali quelle a mantissa ed esponente).
Il sistema numerico più diffuso è il sistema decimale, in cui la base b è pari a 10.
Nella tecnologia dei computer e delle telecomunicazioni, i dati digitali hanno generalmente una rappresentazione che utilizza un sistema binario, in cui la base b è pari a 2 e le cui due cifre sono i simboli "0” e “1”. La diffusione nelle applicazioni digitali di tale rappresentazione binaria è dovuta soprattutto alla efficienza ed affidabilità delle sue implementazioni, in cui le due cifre corrispondono a due soli stati di una prefissata grandezza fisica, (ad esempio: assenza o presenza di un segnale, valore minimo o valore massimo di una tensione). In particolare, su tale codificazione binaria i dati possono altresì essere interpretati tramite sistemi numerici diversi, come lottale (base b pari a 8) e l’esadecimate (base b pari a 16). Inoltre, codici particolari, come il codice decimale rappresentato in binario o BCD, possono sfruttare il sistema binario.
La rappresentazione binaria ad n cifre di un numero, ovvero un numero binario ad n bit, può anche essere interpretata come la somma delle potenze la cui cifra corrispondente è pari a “1”. A titolo puramente esemplificativo, il numero binario a 7 bit 1000001 è pari a:
Due proprietà della rappresentazione binaria che sono significative per la comprensione della presente invenzione sono le seguenti:
- il massimo valore intero positivo rappresentabile con un numero binario ad n bit è pari a (2" -l), ed
- il numero di diverse rappresentazioni binarie ad n bit è pari al numero delle disposizioni con ripetizione di 2 elementi di classe n , pari a T .
La successione di potenze è una successione monotona crescente di numeri interi tale che ba = 1 ed il rapporto Rk tra due elementi consecutivi è una costante pari alla base b :
Pertanto, una stringa binaria ad n bit, interpretata secondo la rappresentazione binaria, rappresenta un valore numerico intero N pari alla somma degli elementi della successione B , tra i primi n elementi, il cui bit corrispondente a(. è pari a Ί":
[2]
La inventrice ha sviluppato, sulla base di una nuova rappresentazione numerica, un nuovo metodo di compressione dei dati digitali che consente, a patto di rispettare alcune condizioni, il loro recupero tramite un corrispondente metodo di decompressione che ne mantiene l'integrità.
Consideriamo una rappresentazione numerica, che indicheremo nel seguito come “rappresentazione frazionaria", in cui l'insieme di simboli elementari comprende ancora i due bit binari “0" e “1”, ma la cui base b è un numero non intero compreso tra 1 e 2:
Un numero F a rappresentazione frazionaria ad n bit avrà un valore, generalmente non intero, dato dalla formula [1]. In particolare, il massimo valore rappresentabile con un numero F a rappresentazione frazionaria ad n bit è pari a:
Risulta evidente che
ovvero che è minore del massimo valore, intero e positivo, rappresentabile con un numero binario ad » bit.
Ciò significa che, trascurando la parte decimale, un valore numerico a rappresentazione frazionaria ad » bit può essere espresso mediante rappresentazione binaria da una stringa ad m bit il cui numero m di bit è non superiore ad « ( m ≤ n ):
[3)
dove la funzione y = intsup[x] restituisce il minimo valore intero non inferiore a
In particolare, esiste un valore minimo n di » a partire dal quale, per qualsiasi valore numerico rappresentabile, m è inferiore ad n :
[4]
Inoltre, risulta evidente dalla formula [3] che, quanto maggiore è il valore di », tanto maggiore è la differenza (n-m ) tra il numero di bit della rappresentazione frazionaria e quello della rappresentazione binaria, consentendo, di conseguenza, un tanto maggiore risparmio Δ = (n-m ) di bit di rappresentazione.
Con riferimento alla Figura 1 , si può osservare che ciò rende possibile una compressione dei dati digitali, rappresentati mediante stringhe binarie, utilizzati nella tecnologia dei computer e delle telecomunicazioni.
Infatti, data una stringa binaria 1 ad » bit con i cui bit sono indicati in Figura tramite un indice {tale stringa può, ad esempio, essere memorizzata in uno o più registri di una memoria), interpretando tale stringa 1 tramite una rappresentazione frazionaria ad n bit si ottiene un valore F , generalmente non intero, dato dalla formula [1]. Trascurando la parte decimale del valore F , la parte intera di F è rappresentata mediante rappresentazione binaria da una stringa 2’ ad m bit con m < n, i cui bit sono indicati in Figura tramite un indice j = 0,1,2,. , con un risparmio Δ di bit.
Tuttavia, risulta evidente che, poiché si è trascurata la parte decimale del valore F , in generale non è possibile recuperare la stringa binaria 1 di partenza a partire dalla stringa binaria 2’ operando una semplice operazione di decompressione che ripercorra all'inverso le fasi di compressione illustrate con riferimento alla Figura 1. Più precisamente, per poter recuperare la originaria stringa binaria 1 a partire dalla stringa binaria 2’, sarebbe necessario, durante la operazione di compressione, mantenere ulteriori informazioni relative alia parte decimale di F la cui memorizzazione annullerebbe il risparmio A di bit, potendo anche produrre un aumento dei numero di bit rappresentativi della informazione contenuta nella stringa binaria 1 di partenza.
L’inventrice ha sviluppato una nuova rappresentazione numerica alternativa alla rappresentazione frazionaria appena descritta e che consente di recuperare in modo semplice la stringa binaria originaria a partire da una stringa compressa, garantendo un effettivo risparmio di bit.
Per rappresentare un numero intero positivo il metodo secondo l’invenzione utilizza il formalismo espresso dalla formula [2], facendo ricorso ad una successione monotona crescente di numeri interi diversa dalla successione binaria B . Preferibilmente,
Ancora più preferibilmente,
Il rapporto generalmente non intero, tra
due elementi consecutivi della successione 5 è in generale variabile con l’indice k. Ovviamente, essendo s una successione monotona crescente, il rapporto Rk è sempre maggiore di 1 :
[6].
Gli elementi sk (per A = 0,1, 2,...) della successione S secondo l’invenzione soddisfano la condizione per cui, a partire dal (g l)-esimo elemento, con q ≥ 1 , il rapporto Rk è un numero non intero inferiore a 2:
[7]
Preferibilmente, il rapporto Rk tende ad un valore costante R al crescere dell'indice k :
[8]
Ancora più preferibilmente, il rapporto Rk non è mai superiore a 2:
[9]
Pertanto, data una stringa binaria ad « bit, il metodo di compressione secondo l'invenzione la interpreta attribuendole un valore numerico intero N pari alla somma degli elementi della successione S , tra i primi n elementi, il cui bit corrispondente ai è pari a“1":
[10]
Risulta evidente che, sulla base della proprietà espressa dalla formula [7], dato un valore numerico intero N valgono anche per la rappresentazione secondo la formula [10] le proprietà espresse dalle formule [3] e [4]. Più precisamente, dato un valore numerico intero N rappresentato, mediante la successione S secondo la formula [10], da una stringa binaria ad n bit, tale valore N può essere rappresentato mediante rappresentazione binaria da una stringa ad m bit il cui numero m di bit è non superiore ad n. Inoltre, esiste un valore minimo di « a partire dal quale, per qualsiasi valore N , m è sempre inferiore ad n. In particolare, quanto maggiore è il valore di n, tanto maggiore è la differenza (n-m) tra il numero di bit della rappresentazione secondo la [10] e quello della rappresentazione binaria, consentendo, di conseguenza, un tanto maggiore risparmio A = (n-m) di bit di rappresentazione.
La inventrice ha sviluppato molti modi per determinare una successione S i cui elementi sk (per k = 0,1,2,...) soddisfino la condizione espressa dalla formula [7]. A titolo puramente esemplificativo, ma non limitativo, il generico elemento sk, almeno a partire da un indice r ( k≥r ), può essere pari ad una funzione / , che restituisce valori interi, dei p elementi precedenti (essendo p≤ r)\
[11]
Ad esempio, la funzione / della formula [11] può essere un polinomio dei p elementi precedenti:
[12]
dove i coefficienti costanti eh (per h = l,2,...,p) sono numeri preferibilmente interi che possono assumere valori positivi, negativi o nulli.
La preferita forma di realizzazione della invenzione impiega una successione SFib che deriva direttamente dalla successione nota come “successione di Fibonacci”, in cui ogni elemento, ad eccezione almeno dei primi due (“almeno” poiché esistono in letteratura differenti definizioni della successione di Fibonacci relativamente ai primi elementi), è pari alla somma dei due elementi immediatamente precedenti. Più precisamente, la successione impiegata dalla preferita forma di realizzazione dell’invenzione è definita come segue:
[13]
Nel seguito della presente descrizione la rappresentazione di un valore numerico intero mediante la successione SFib secondo la formula [10] viene indicata come “rappresentazione di Fibonacci”.
E’ immediato verificare che gli elementi della successione SFib soddisfano la condizione espressa dalla formula [5] e sono esprimibili dalla formula [12] ponendo:
E’ altresì immediato verificare che il rapporto Rk tra due elementi sk+1 e sk consecutivi della successione SFib soddisfa le condizioni espresse dalla formula [6], dalla formula [7] per k≥2 (ovvero con q = 2), dalla formula [8] con R = 1,61803... , e dalla formula [9].
Le Tabelle la e Ib mostrano, al variare del numero n di bit di una stringa binaria con cui viene rappresentato un valore numerico intero N mediante la rappresentazione di Fibonacci, l’elemento sk della successione SFib corrispondente al bit an-1 più significativo (ovvero il massimo valore intero N Fibm ax rappresentabile mediante la formula [10], ed il numero m di bit della stringa binaria può essere rappresentato mediante una rappresentazione binaria, in particolare, la Tabella la e la Tabella Ib si riferiscono a valori di n variabili, rispettivamente, da 1 a 42, e da 43 a 64. Il valore minimo della formula [4] è pari a 6 (nmin =6) ed appare evidente che, al crescere di n , aumenta la differenza Δ = (n-m) tra il numero di bit della rappresentazione di Fibonacci e quello della rappresentazione binaria.
Tabella la
Tabella lb
Con riferimento alla Figura 2, data una strìnga binaria 1 ad R bit con n ≥ 6, i cui bit sono indicati in Figura tramite un indice / = 0,l,2,...,n-l , interpretando tale strìnga 1 tramite una rappresentazione di Fibonacci ad n bit si ottiene un valore numerico intero N , dato dalla formula [10], che può essere rappresentato mediante rappresentazione binaria da una stringa 2 ad m bit i cui bit sono indicati in Figura 2 tramite un indice j = 0,1,2, . In particolare, il numero m di bit della strìnga binaria 2 è pari al numero di bit della rappresentazione binaria del massimo valore intero NFib MAX rappresentabile mediante la rappresentazione di Fibonacci. Come detto, all’aumentare del numero n di bit della stringa binaria 1 di partenza, si ha un maggiore risparmio di Δ bit nella stringa binaria compressa 2 e, pertanto, una maggiore compressione. Peraltro, a parità del valore Δ , è conveniente che il numero n di bit sia minimo, in modo da ottenere il massimo rapporto di compressione CR :
[14]
In particolare, la Tabella II, che è derivabile dalle Tabelle la e Ib, mostra, per ogni valore A il numero n di bit più conveniente, per n variabile da nm. = 6 a 64.
Tabella II
Tuttavia, poiché il numero di diverse stringhe binarie ad n bit è pari al numero delle disposizioni con ripetizione di 2 elementi di classe n, pari a 2”, mentre il numero di valori rappresentabili mediante rappresentazione di Fibonacci ad n bit è pari a l). ovvero è inferiore a 2”, alcuni valori numerici N possono essere rappresentati mediante rappresentazione di Fibonacci con più di una stringa binaria. Ciò appare evidente dalla formula [13], da cui risulta che una stringa binaria “100" interpretata mediante la rappresentazione di Fibonacci fornisce il medesimo valore numerico delia stringa binaria “011”.
Nel seguito della presente descrizione, le stringhe binarie, interpretate mediante la rappresentazione di Fibonacci, vengono definite stringhe “canoniche” quando non comprendono due bit consecutivi pari a "1” (ovvero, non comprendono coppie di bit pari a “11”), mentre vengono definite stringhe “non canoniche" o anche stringhe “ridondanti” quando comprendono almeno due bit consecutivi pari a “1" (ovvero, comprendono almeno una coppia di bit pari a 11”). In particolare, dati n bit, il numero Nsc di stringhe canoniche è pari a
[15]
mentre il numero NSR di stringhe ridondanti è pari a
[16]
E' immediato per gli esperti del ramo modificare il metodo secondo l'invenzione considerando come stringhe canoniche quelle stringhe che, successivamente al bit più significativo pari a “1", non comprendono due bit consecutivi pari a “0", e come stringhe non canoniche, o ridondanti, quelle che, successivamente al bit più significativo pari a "1”, comprendono almeno due bit consecutivi pari a “0”.
E' altresì immediato per gli esperti del ramo individuare, anche tramite metodi di elaborazione, per ogni valore numerico N rappresentabile mediante rappresentazione di Fibonacci ad n bit, la stringa canonica e le eventuali stringhe ridondanti.
Pertanto, ancora con riferimento alla Figura 2, durante l’operazione di decompressione, data una stringa binaria compressa 2, la stringa binaria 1 di partenza non sempre è univocamente determinabile senza fornire ulteriori informazioni che consentano di individuare quale stringa di Fibonacci, tra le varie possibili, corrisponde al valore numerico N . In particolare, il numero n di bit più conveniente per ogni valore Δ, riportati in Tabella II per n variabile da = 6 a 64, risulta vantaggioso anche in relazione al numero di stringhe ridondanti, che risulta minimo (rispetto agli altri valori di n corrispondenti al medesimo Δ).
La inventrice ha sviluppato varie preferite forme di realizzazione dei metodi di compressione e di decompressione secondo l'invenzione che tengono conto delle eventuali stringhe ridondanti.
Con riferimento alla Figura 3, si può osservare che il grafo di flusso della prima forma di realizzazione del metodo di compressione secondo l'invenzione prevede una fase iniziale 3 in cui viene memorizzata la dimensione, pari al numero L di bit, della stringa binaria dì ingresso da comprimere. Preferibilmente, il metodo memorizza la dimensione L sempre con il medesimo numero t di bit.
Il metodo prevede poi una fase 4 in cui viene impostata la massima dimensione D che si desidera per la stringa binaria compressa. Tale dimensione D può essere impostata da un operatore anche tramite assegnazione di un valore percentuale massimo della dimensione della stringa binaria compressa rispetto alla dimensione L della stringa binaria in ingresso.
In una successiva fase 5 la stringa in ingresso viene assegnata ad una stringa ausiliaria denominata “STRINGA ATTUALE".
Successivamente, il metodo esegue un ciclo di fasi che inizia con un blocco 6 di compressione in cui STRINGA ATTUALE viene compressa, secondo alcune fasi che verranno descritte in dettaglio più avanti, ed il risultato della compressione viene assegnato ad una seconda stringa ausiliaria, denominata “STRINGA COMPRESSA". Il metodo esegue poi una fase 7 di verifica che STRINGA ATTUALE sia stata effettivamente compressa, ovvero che STRINGA COMPRESSA abbia dimensione minore di quella di STRINGA ATTUALE; in caso di esito positivo, viene eseguita una fase 8 di verifica che STRINGA COMPRESSA abbia dimensione maggiore di D, nel qual caso viene eseguita una fase 9 di assegnazione di STRINGA COMPRESSA a STRINGA ATTUALE e, successivamente, il metodo ripete il ciclo a partire dal blocco 6 di compressione.
Nel caso che la fase 7 o la fase 8 diano esito negativo (STRINGA ATTUALE non è stata compressa oppure STRINGA COMPRESSA ha dimensione minore o uguale a D ), il metodo esegue una fase 10 di verìfica che la dimensione della giustapposizione (indicata con l'operatore “&”) dell’informazione sulla dimensione L (memorizzata preferibilmente con t bit) e di STRINGA COMPRESSA sia inferiore a L : in caso di esito positivo, il metodo esegue una fase 11 di assegnazione ad una strìnga di uscita della giustapposizione dell'informazione relativa alla dimensione L e di STRINGA COMPRESSA; in caso di esito negativo, il metodo esegue invece una fase 12 di assegnazione alla stringa di uscita della stringa di ingresso, poiché non è stato possibile comprìmere tale stringa di ingresso. In particolare, fasi analoghe alle fasi 10, 11 e 12 possono essere previste anche per le altre forme di realizzazione del metodo di compressione secondo la presente invenzione.
Il metodo esegue infine una fase finale 13 di terminazione.
Nel caso il metodo sia eseguito da un elaboratore, la stringa di ingresso, la stringa attuale, la stringa compressa e la stringa di uscita possono essere memorizzate in corrispondenti opportune zone di memoria.
Il blocco 6 di compressione effettua la compressione della stringa attuale suddividendola in sottostringhe comprendenti n bit (con e comprìmendo, secondo la tecnica illustrata in Figura 2, soltanto le sottostringhe canoniche, evitando di comprimere due sotostringhe consecutive. Preferibilmente, n≥ 10 ; ancora più preferibilmente, n≥ 13. Il blocco 6 crea inoltre una strìnga di intestazione, o header, avente un numero di bit pari ai numero di sottostringhe, in modo tale che ogni bit dell’header è pari a “1”, se la corrispondente sottostringa viene compressa, oppure è pari a “0”. Infine, il blocco 6 comprìme anche l’header, che è sicuramente canonico non essendo mai compresse due sottostringhe consecutive.
Più in dettaglio, con riferimento alle Figure 4 e 5, si osserva che il blocco 6 di compressione esegue una fase iniziale 14, in cui STRINGA ATTUALE 15, comprendente W bit, viene suddivisa in sottostringhe comprendenti n bit ciascuna. In particolare, il numero / di sottostringhe è pari a
[17]
In Figura 4 le sottostringhe sono indicate tramite un indice u = 0,1, 2,...,/-l . Nel caso la dimensione W di STRINGA ATTUALE 15 non sia un multiplo di n, l'ultima sottostringa viene riempita con una coda di bit pari a “0".
Successivamente, il blocco 6 di compressione esegue una fase 16 di inizializzazione in cui:
- viene creata la stringa header 17 avente I bit, indicati in Figura 4 tramite un indice v = 0,l,2,..„/-l ;
- viene creata una stringa ausiiiaria, denominata "STRINGA IN COSTRUZIONE”, che viene inizializzata alla stringa nulla - una prima variabile puntatore ausiiiaria, denominata “BIT PRECEDENTE”, viene inizializzata a puntare ad una costante il cui valore binario è pari a "0”;
- una seconda variabile puntatore ausiiiaria, denominata “BIT ATTUALE”, viene inizializzata a puntare al primo bit dell’header; e
- viene assegnata ad una variabile ausiiiaria, denominata “SOTTOSTRINGA ATTUALE”, la prima sottostringa di STRINGA ATTUALE 15.
Successivamente, il blocco 6 di compressione esegue un ciclo di fasi che inizia con una fase 18 di verifica che il valore puntato da BIT PRECEDENTE sia pari a “0”. In caso di esito positivo, viene successivamente eseguita una fase 19 di verifica che SOTTOSTRINGA ATTUALE sia canonica.
Nel caso la fase 19 dia esito positivo, viene eseguita una fase 20 in cui SOTTOSTRINGA ATTUALE viene compressa secondo la tecnica illustrata in Figura 2, indicata nel seguito come "compressione di Fibonacci”. In particolare, gli n bit di SOTTOSTRINGA ATTUALE vengono interpretati secondo la rappresentazione di Fibonacci, calcolandone il valore numerico N , dato dalla formula [10], che viene poi rappresentato mediante rappresentazione binaria ad m bit che viene assegnata ad una variabile ausiliaria, denominata “SOTTOSTRINGA COMPRESSA".
Dopo la fase 20, vengono eseguite una fase 21 di aggiunta (per giustapposizione) di SOTTOSTRINGA COMPRESSA a STRINGA IN COSTRUZIONE ed una fase 22 di assegnazione del valore binario “1" al bit dell’header puntato da BIT ATTUALE.
Nel caso invece che la fase 18 o la fase 19 diano esito negativo (il valore puntato da BIT PRECEDENTE è pari a “1" oppure SOTTOSTRINGA ATTUALE non è canonica), vengono eseguite una fase 23 di aggiunta (per giustapposizione) di SOTTOSTRINGA ATTUALE a STRINGA IN COSTRUZIONE ed una fase 24 di assegnazione del valore binario “0” al bit dell'header puntato da BIT ATTUALE.
Successivamente sìa alla fase 22 che alla fase 24 viene eseguita una fase 25 di verifica che SOTTOSTRINGA ATTUALE fosse l’ultima sottostringa di STRINGA ATTUALE 15. In caso di esito positivo, vengono eseguite una fase 26 di compressione dell'header ed una fase 27 di assegnazione a STRINGA COMPRESSA della giustapposizione dell’header compresso e di STRINGA IN COSTRUZIONE. Preferibilmente, la fase 26 può comprimere l’header mediante la codifica a lunghezza di catena, o RLE (Run Length Encoding), oppure mediante la compressione di Fibonacci, eventualmente suddividendo l’header in sottostringhe aventi. un numero di bit ri anche diverso da n, riempiendo l’ultima di queste con la necessaria coda di zeri e prevedendo, preferibilmente, un numero prefissato di sottostringhe componenti l’header. Ancora, l’header può essere compresso sia mediante RLE che mediante la compressione di Fibonacci, prevedendo l’inserimento in testa a STRINGA COMPRESSA di un bit di indicazione, o flag, il cui valore indichi quale tipo di compressione è stato utilizzato per comprimere l'header.
Nei caso invece la fase 25 dia esito negativo, viene eseguita una fase 28 di aggiornamento in cui:
- a BIT PRECEDENTE viene assegnato BIT ATTUALE,
- BIT ATTUALE viene aggiornato a puntare al successivo bit dell’header, ed
- a SOTTOSTRINGA ATTUALE viene assegnata la successiva sottostringa di STRINGA ATTUALE 15.
In particolare, in Figura 4 è raffigurata la situazione relativa alla terza iterazione del ciclo di fasi del grafo di flusso di Figura 5.
E’ immediato per gli esperti del ramo modificare la forma di realizzazione del metodo appena descritta nel caso le stringhe canoniche siano quelle stringhe che, successivamente al bit più significativo pari "1”, non comprendono due bit consecutivi pari a “0”: in tal caso ogni bit dell'header è pari a "0” se la corrispondente sottostringa viene compressa, oppure è pari a “1” se la corrispondente sottostringa non viene compressa.
Una seconda forma di realizzazione del metodo di compressione secondo l'invenzione prevede una elaborazione di almeno parte delle sottostringhe di STRINGA ATTUALE che risultano non canoniche, allo scopo di renderle canoniche. Tale seconda forma di realizzazione prevede che, per ogni sottostringa non canonica successiva ad una sottostringa che non è stata compressa, venga effettuata la operazione di NOT logico (invertendo il valore di ogni singolo bit) per verificare se la sottostringa diviene canonica e, in tal caso, la sottostringa invertita viene compressa. Per ogni sottostringa che viene compressa, viene memorizzata una coppia di bit nell’header: il primo bit della coppia è pari a "1”, per indicare che la sottostringa è compressa, mentre il secondo bit è pari a “O", nel caso la sottostringa non sia stata invertita con il NOT, oppure è pari a Ί", nel caso la sottostringa sia stata invertita con il NOT prima della compressione. Pertanto, l’header ha un numero di bit V≥l {/'=/ soltanto nel caso nessuna sottostringa sia stata compressa) in generale non prevedibile.
In particolare, tale seconda forma di realizzazione prevede un ciclo di fasi del blocco 6 di compressione leggermente diverso da quello mostrato nel grafo di flusso di Figura 5.
Con riferimento alle Figure 6 e 7, si può osservare che nel caso di esito positivo della fase 18 di verifica, il ciclo prevede ancora la fase 19 di verifica.
Nel caso la fase 19 dia esito positivo, vengono eseguite una fase 29 di assegnazione del valore binario "1” al bit dell’header puntato da BIT ATTUALE, una fase 30 di aggiornamento di BIT ATTUALE, che viene aggiornato a puntare al successivo bit dell’header, ed una fase 31 di assegnazione del valore binario “0" al bit dell’header puntato da BIT ATTUALE. In altre parole, la sottostringa in considerazione di STRINGA ATTUALE 15 è canonica e può essere compressa, assegnando alla corrispondente coppia di bit dell’header il valore binario
“10”.
Nel caso la fase 19 dia esito negativo, viene eseguita una fase 32 di NOT logico di SOTTOSTRINGA ATTUALE, i cui bit vengono trasformati singolarmente da “0” a "1” oppure da "1” a “0”. Successivamente alla fase 32, viene eseguita una fase 33 di verifica che SOTTOSTRINGA ATTUALE sia canonica.
Nel caso la fase 33 dia esito positivo, vengono eseguite una fase 34 di assegnazione dei valore binario "1” al bit dell'header puntato da BIT ATTUALE, una fase 35 di aggiornamento di BIT ATTUALE, che viene aggiornato a puntare al successivo bit dell’header, ed una fase 36 di assegnazione del valore binario “1” al bit dell’header puntato da BIT ATTUALE. In altre parole, la sottostringa in considerazione di STRINGA ATTUALE 15 diventa canonica dopo l’operazione di NOT logico e può essere compressa, assegnando alla corrispondente coppia di bit dell’header il valore binario “11”.
Successivamente sia alla fase 31 che alla fase 36 vengono eseguite la fase 20 di compressione di SOTTOSTRINGA ATTUALE in SOTTOSTRINGA COMPRESSA, la fase 21 di aggiunta (per giustapposizione) di SOTTOSTRINGA COMPRESSA a STRINGA IN COSTRUZIONE ed una fase 37 di aggiornamento di BIT PRECEDENTE, che viene aggiornato a puntare al bit dell’header precedente quello puntato da BIT ATTUALE (in modo da puntare il primo bit della coppia corrispondente alla sottostringa compressa).
Nel caso la fase 33 dia esito negativo, viene eseguita una fase 38 di NOT logico di SOTTOSTRINGA ATTUALE, in modo da annullare il NOT della fase 32 e riportarla al suo contenuto originario.
Sia nel caso che la fase 33 dia esito negativo che dopo la fase 38 (il valore puntato da BIT PRECEDENTE è pari a “1" oppure SOTTOSTRINGA ATTUALE non è canonica e non è trasformabile in canonica dopo un NOT logico), vengono eseguite la fase 23 di giustapposizione di SOTTOSTRINGA ATTUALE a STRINGA IN COSTRUZIONE, la fase 24 di assegnazione del valore binario “0” al bit dell'header puntato da BIT ATTUALE ed una fase 39 di aggiornamento di BIT PRECEDENTE, a cui viene assegnato BIT ATTUALE.
Successivamente sia alla fase 37 che alla fase 39 viene eseguita la fase 25 di verifica che SOTTOSTRINGA ATTUALE fosse l’ultima sottostringa di STRINGA ATTUALE 15. In caso di esito positivo, vengono eseguite la fase 26 di compressione dell’header e la fase 27 di assegnazione a STRINGA COMPRESSA della giustapposizione dell’header compresso e di STRINGA IN COSTRUZIONE. Vantaggiosamente, l’header può anche contenere il numero di sottostringhe in cui è suddivisa STRINGA ATTUALE 15.
Nel caso invece la fase 25 dia esito negativo, viene eseguita una fase 40 di aggiornamento in cui:
- BIT ATTUALE viene aggiornato a puntare al successivo bit dell’header, ed
- a SOTTOSTRINGA ATTUALE viene assegnata la successiva sottostringa di STRINGA ATTUALE 15.
in particolare, in Figura 6 è raffigurata la situazione relativa alla terza iterazione del ciclo di fasi dei grafo di flusso di Figura 7. In Figura 6, le sottostringhe canoniche di STRINGA ATTUALE 15 sono indicate con la lettera c , mentre quelle non canoniche, o ridondanti, sono indicate con la lettera NC . Inoltre, le sottostringhe indicate con la lettera X sono quelle che non possono essere compresse perché sono successive ad una sottostringa compressa e, per esse, la fase 18 di verifica da esito negativo. Si può osservare che la prima sottostringa, essendo canonica, viene compressa direttamente e la corrispondente coppia di bit nell'header ha valore binario “10”, la seconda sottostringa non viene compressa ed il corrispondente bit nell’header ha valore “0”, la terza sottostringa viene compressa dopo averne effettuato il NOT logico, per cui la corrispondente coppia di bit nell’header ha valore binario “11".
Una terza forma di realizzazione del metodo di compressione secondo l'invenzione prevede che il ciclo di fasi, mostrato in Figura 7, del blocco 6 di compressione non comprenda la fase 18 di verifica che il valore puntato da BIT PRECEDENTE sia pari a “0’’. Questo perché, dato che nel caso di sottostringhe compresse dopo averne effettuato il NOT logico l’header contiene coppie di bit pari a "11, si può considerare del tutto non necessario il controllo della fase 18, poiché è comunque ammesso l'inserimento di coppie che rendono l’header non canonico. In tal caso, è inutile utilizzare la variabile puntatore BIT PRECEDENTE. Di conseguenza, la fase 16 del blocco 6 di compressione deve essere modificata eliminando l'inizializzazione di BIT PRECEDENTE ed il ciclo di fasi di Figura 7 non comprende nemmeno la fase 37 e la fase 39.
Una quarta forma di realizzazione del metodo di compressione secondo l’invenzione prevede che la elaborazione di almeno parte delle sottostringhe di STRINGA ATTUALE che risultano non canoniche, allo scopo di renderle canoniche, avvenga al termine della scansione di STRINGA ATTUALE, diversamente dalla seconda forma di realizzazione per la quale tale elaborazione awiene durante tate scansione sottostringa per sottostringa. In altre parole, il blocco 6 di compressione prevede ancora le fasi riportate nei grafo di flusso di Figura 5, ma, prima della fase 26 di compressione dell’header, viene eseguito un nuovo ciclo di scansione di STRINGA IN COSTRUZIONE durante il quale:
- vengono individuate le sottostringhe non compresse che non sono adiacenti a sottostringhe compresse,
- le sottostringhe individuate vengono sottoposte ad una elaborazione, preferibilmente eseguita mediante NOT logico, - nel caso le sottostringhe elaborate siano canoniche vengono compresse, e
- la sottostringa compressa sostituisce la corrispondente sottostringa originaria in STRINGA IN COSTRUZIONE.
In questo caso, fino all’ultima esecuzione della fase 25, l’header è identico a quello che si avrebbe in riferimento alla prima forma di realizzazione del metodo di Figure 4 e 5. Durante il nuovo ciclo di scansione di STRINGA IN COSTRUZIONE, all’header viene aggiunto un bit per ogni sottostrìnga compressa, specificamente un bit pari a “0", nel caso la sottostringa sia (già) stata compressa nella sua forma originaria, oppure un bit pari a “1”, nei caso la sottostringa sia compressa dopo essere stata elaborata. Se la sottostringa è compressa dopo essere stata elaborata, viene anche trasformato da “0” a "1” il bit corrispondente della prima parte dell’header.
Nell’esempio di Figura 8, si può osservare che la STRINGA ATTUALE 15 comprende sottostringhe canoniche C e sottostringhe non canoniche NC .
Al termine della scansione di STRINGA ATTUALE 15, STRINGA IN COSTRUZIONE 41 comprende le sottostringhe compresse CS e le sottostringhe non canoniche NC , mentre l’header 42 comprende un bit per ogni sottostringa che è pari a "1”, se corrispondente ad una sottostringa compressa CS, oppure pari a “0”, se corrispondente ad una sottostringa non canonica (e non compressa) NC .
Durante il nuovo ciclo di scansione di STRINGA IN COSTRUZIONE 41 , viene creata una coda 43 dell’header i cui bit corrispondono a sottostringhe compresse CS ; in particolare, per ogni sottostringa compressa CS a partire dalla sottostringa originaria, ovvero per ogni bit 80 pari a “1" dell’header 42 ottenuto al termine della scansione di STRINGA ATTUALE 15, la coda 43 comprende un bit 81 pari a “0".
Inoltre, durante tale nuovo ciclo di scansione, le sottostringhe non canoniche, 44 e 44’, vengono individuate come sottostringhe elaborabili, perché non adiacenti a sottostringhe compresse CS. In particolare, i corrispondenti bit, 45 e 45’, dell’header sono pari a "0” e sono adiacenti a bit, precedenti e successivi, pure pari a “0”.
Le sotostringhe non canoniche, 44 e 44’, vengono sottoposte ad una operazione di NOT logico a seguito della quale possono risultare canoniche (come la sotostringa 46 in Figura 8) oppure ancora non canoniche (come la sotostringa 47 in Figura 8). Le sotostringhe 46 divenute canoniche dopo il NOT vengono compresse in corrispondenti sotostringhe 48, che sostituiscono in STRINGA IN COSTRUZIONE 41 la corrispondente sotostringa originaria 44, mentre il bit corrispondente 45 della prima parte 42 dell’header viene trasformato da “0” a “1” e viene aggiunto un corrispondente bit 49 pari a "1” nella coda 43 dell’header.
Al termine del nuovo ciclo di scansione, l’header 50, otenuto dalla giustapposizione della prima parte 42’ (alcuni bit della quale sono stati eventualmente trasformati durante il nuovo ciclo di scansione) e della coda 43, viene compresso.
La stringa compressa, non mostrata, fornita dal blocco 6 di compressione è ottenuta dalla giustapposizione dell’header compresso e di STRINGA IN COSTRUZIONE 41. Alternativamente, la prima parte 42’ dell’header può essere compressa separatamente dalla coda 43 e la stringa compressa può essere ottenuta dalla giustapposizione, in qualsiasi ordine, della prima parte compressa dell’header, di STRINGA IN COSTRUZIONE 41 e della coda compressa dell’header. Ancora, le sottostringhe compresse dopo la elaborazione possono altresì essere giustapposte separatamente agli altri elementi che compongono la stringa compressa.
Una quinta forma di realizzazione del metodo di compressione secondo l'invenzione prevede che la elaborazione di almeno parte delle sottostringhe di STRINGA ATTUALE che risultano non canoniche, avvenga ancora al termine della scansione di STRINGA ATTUALE, ma preveda una operazione di XOR logico con una maschera calcolata ad hoc. In particolare, la maschera, comprendente un numero r di bit non superiore a n (r ≤ n), viene determinata come la maschera che rende canonico il massimo numero di sottostringhe non canoniche elaborabili (ovvero, non adiacenti a sottostringhe compresse). Tale quinta forma di realizzazione del metodo prevede l'inserimento della maschera dello XOR, eventualmente compressa separatamente od unitamente a parte dell'header, nella stringa compressa fornita dal blocco 6 di compressione.
Una sesta forma di realizzazione del metodo di compressione secondo l’invenzione prevede la compressione delle sottostringhe, eventualmente elaborate in iterazioni successive fino a renderle canoniche, di STRINGA ATTUALE senza imporre la condizione che almeno una di due stringhe adiacenti sia non compressa.
Con riferimento all'esempio di Figura 9, si può osservare che la STRINGA ATTUALE 15 comprende sottostringhe canoniche C e sottostringhe non canoniche NC .
Tale sesta forma di realizzazione del metodo prevede una prima iterazione in cui tutte le sottostringhe canoniche C vengono compresse e viene creato un primo header 51, comprendente un numero di bit pari a! numero di sottostringhe di STRINGA ATTUALE 15, ogni bit del quale è pari a "1”, nel caso la corrispondente sottostringa C, essendo canonica, è stata compressa, oppure è pari a “0”, nel caso la corrispondente sottostringa NC , essendo non canonica, non è stata compressa.
Il metodo prevede poi una seconda iterazione in cui le sottostringhe NC non canoniche di STRINGA ATTUALE 15 sono sottoposte ad una operazione 52 di XOR logico con una maschera Mx calcolata in modo da rendere canonico il massimo numero di sottostringhe NC . In particolare, la maschera Mx comprende un numero r di bit non superiore al numero n di bit delle sottostringhe di STRINGA ATTUALE 15 { r ≤ n ).
La stringa 53 ottenuta dalla operazione di XOR tra le sottostringhe NC di STRINGA ATTUALE 15 e la maschera Μλ comprende sottostringhe canoniche C e sottostringhe non canoniche NC . Il metodo prevede che tutte le sottostringhe canoniche C della stringa 53 siano compresse e venga creato un secondo header 54, comprendente un numero di bit pari al numero di sottostringhe della stringa 53, analogamente al primo header 51 in riferimento a STRINGA ATTUALE 15.
In modo simile, il metodo prevede una terza iterazione in cui le sottostringhe NC non canoniche della stringa 53 sono sottoposte ad una operazione 55 di XOR logico con una maschera M2 , ad r bit, calcolata in modo da rendere canonico il massimo numero di sottostringhe NC .
La stringa 56 ottenuta dalla operazione di XOR tra le sottostringhe NC della stringa 53 e la maschera M2 comprende sottostringhe canoniche C e sottostringhe non canoniche NC . Il metodo prevede che tutte le sottostringhe canoniche C della stringa 55 siano compresse e venga creato un terzo header 57, comprendente un numero di bit pari al numero di sottostringhe della stringa 56, analogamente ai precedenti header 51 e 54.
Il numero di iterazioni del metodo può essere prefissato oppure variabile. In particolare, il metodo può prevedere che le iterazioni abbiano termine quando il numero di sottostringhe ancora non canoniche (uguale al numero di bit pari a “0” nell’ultimo header creato) è inferiore ad un valore minimo di soglia, dipendente dal risparmio Δ di bit per ogni sottostringa e dalla quantità di bit necessaria per memorizzare un ulteriore header ed un ulteriore maschera, eventualmente compressi.
Una settima forma di realizzazione del metodo di compressione secondo l'invenzione prevede una serie ripetibile di operazioni che effettuano una suddivisione dinamica deiia stringa binaria di ingresso da comprimere. Tale suddivisione dinamica individua e comprime iterativamente sottostringhe canoniche, ovunque posizionate all’interno della stringa di ingresso ed aventi una dimensione, ovvero un numero di bit, progressivamente decrescente ad ogni iterazione, memorizzando anche un insieme di indici indicante la posizione di ogni sottostringa all’interno della stringa binaria di ingresso. E’ altresì prevista la eventuale elaborazione della stringa ottenuta al termine delle iterazioni di ogni ripetizione. Poiché devono essere memorizzati anche gli indici indicanti la posizione di ogni sottostringa all’interno della stringa binaria di ingresso, è conveniente che questa non superi una lunghezza massima di bit, eventualmente scomponendo una sequenza di dati molto grande in pacchetti di lunghezza non superiore a tale lunghezza massima.
Con riferimento all'esempio di Figura 10, supponiamo dapprima che la stringa 58 di dati di ingresso da comprimere abbia una lunghezza L non superiore alla massima lunghezza M consentita. Preferibilmente, M è pari a 1024.
Tale settima forma di realizzazione del metodo di compressione scandisce la stringa 58 con una finestra 59 di dimensione n1 non superiore ad un valore massimo WD <M . Preferibilmente, n1 = WD = 64 e la finestra 59 scandisce la stringa 58 spostandosi con un passo WSl di bit compreso tra 1 e WD (1 <WS , ≤WD), ancora più preferibilmente WS 1 = 1.
Ogni volta che la finestra 59 individua all'interno della stringa 58 una sottostringa canonica , avente dimensione η,, , viene memorizzato un indice che individua la posizione della sottostringa canonica Cm , e la sottostringa canonica C viene compressa in una sottostringa di dimensione inferiore secondo la compressione di Fibonacci. Ciò implica anche che è non inferiore ad "min = 6 ( ≤ nu ≤ WD ). In Figura 10 sono mostrate due sottostringhe canoniche aventi rispettivamente indice i1 e i12, che vengono compresse in due corrispondenti sottostringhe SC1 e ,SC12. Preferibilmente, gli indici, /„ e z<'>l2, sono l'indirizzo del primo bit della rispettiva sottostringa canonica all'interno della stringa 58; ancora più preferibilmente, una volta individuata una sottostrìnga canonica Cffl] , la finestra 59 ricomincia a scandire dal primo bit successivo alla sottostrìnga canonica C
(nell’esempio di Figura 10, ricomincia a scandire dai bit e
Al termine della scansione mediante la finestra 59, viene memorizzato il numero G, di sottostringhe canoniche Cm] che sono state compresse. Le parti 60, 60' e 60” della stringa 58, non appartenenti a sottostringhe canoniche C di dimensione η,, , vengono tra loro giustapposte in una strìnga 61 di scarto (preferibilmente, la giustapposizione viene eseguita bit per bit durante la scansione).
Il metodo di compressione esegue una seconda scansione delia stringa 61 di scarto con una finestra 62 di dimensione 2 inferiore a «,, , purché ancora non inferiore ad Preferibilmente, Preferibilmente, la finestra 62 scandisce la stringa 58 spostandosi con un passo WS2 di bit compreso tra 1 e WSt (1 ≤ WS2 ≤ WS^ ), ancora più preferibilmente WS2 =WSt = 1 .
Analogamente alia scansione della stringa 58 con la finestra 59, ogni volta che la finestra 62 individua all'interno della stringa 61 una sottostringa canonica C„ì2 , avente dimensione nn , viene memorizzato un indice, i21 e i22, che individua la posizione della sottostringa canonica Cn!2 , ed ogni sottostrìnga canonica Cn12 viene compressa in una corrispondente sottostringa, SC21 e SC Ώ , secondo la compressione di Fibonacci.
Al termine delia scansione mediante la finestra 62, viene memorizzato il numero G2 di sottostringhe canoniche Cn1 che sono state compresse. Le parti 63, 63’ e 63” della stringa 61, non appartenenti a sottostringhe canoniche Cnl2 di dimensione nl2 , vengono tra loro giustapposte in una seconda stringa 64 di scarto.
Successivamente, il metodo di compressione itera le scansioni delle stringhe di scarto, ottenute dalla scansione precedente, con successive finestre di dimensione n]g progressivamente decrescente. Preferibilmente, nìg =«lg_, -1. In particolare, è anche possibile che durante una o più iterazioni intermedie non vengano individuate sottostringhe canoniche Cnlg di dimensione ntg ; in tal caso viene memorizzato soltanto il numero Gg di sottostringhe canoniche C che sono state compresse, pari a zero.
Ulteriormente, il metodo può altresì prevedere che, almeno a partire da una specifica scansione (ovvero da una specifica dimensione n1g della finestra di scansione), le sottostringhe canoniche C siano giustapposte tra loro, in gruppi che ne comprendano almeno due, e la compressione di Fibonacci sia eseguita sulla giustapposizione ottenuta.
Le iterazioni hanno termine quando non è più possibile comprimere l’ultima stringa di scarto generata; ciò si verifica in tre casi:
- quando l’ultima strìnga di scarto generata è vuota, ovvero è stata compressa tutta la stringa 58 di dati di ingresso, oppure - quando l’ultima stringa di scarto generata è troppo piccola per essere effettivamente compressa, ovvero i bit aggiunti per memorizzare Gg e gli indici di posizione annullano il risparmio (Gg ·Δ) di bit ottenibile dal massimo numero di sottostringhe comprimibili, oppure
- quando la dimensione dell’ultima finestra di scansione, con la quale si è tentato di individuare sottostringhe canoniche, è pari a
Al termine delle iterazioni, il metodo crea una stringa compressa 65 comprendente:
- il numero F di scansioni effettuate fino alla ultima scansione che ha effettivamente compresso (tale numero conteggia anche le eventuali iterazioni intermedie che non hanno individuato e compresso sottostringhe canoniche);
- la stringa di scarto generata dall’ultima iterazione F , e
- per ogni scansione
- il numero Gg di sottostringhe canoniche che sono state compresse,
- per ogni sottostringa canonica C :
- l'indice che individua la posizione della sottostringa canonica nella stringa di scarto generata dalla iterazione precedente (g-l), e
- la sottostringa compressa
In particolare, le varie informazioni precedentemente elencate possono essere memorizzate nella stringa compressa 65 per giustapposizione in qualsiasi ordine prefissato, preferibilmente con il numero F di scansioni all’inizio o alla fine della stringa compressa 65.
Il metodo prevede che la stringa compressa 65 sia successivamente sottoposta ad una seconda ripetizione delle iterazioni precedentemente descritte. In particolare, la stringa compressa 65 viene scandita con una prima finestra di dimensione n21 non superiore al valore massimo WD, preferibilmente, n2ì = n11 analogamente, nelle iterazioni successive alla prima le dimensioni delle finestre sono preferibilmente pari a quelle della prima ripetizione ( n2g = n1g ).
Il metodo esegue ulteriori ripetizioni delle scansioni iterative sulle stringhe compresse ottenute al termine di ogni ripetizione.
Nel caso che al termine di una ripetizione, nessuna delle iterazioni sia riuscita ad individuare una sottostringa canonica da comprimere, il metodo prevede una elaborazione della stringa compressa generata dall'ultima ripetizione che abbia compresso almeno una sottostringa canonica in almeno una iterazione. Tale elaborazione prevede preferibilmente:
- una operazione di NOT logico di tutta la stringa compressa, e/o - una operazione di XOR logico di almeno una parte della stringa compressa con almeno una maschera opportunamente calcolata in modo da massimizzare la differenza tra il numero di coppie di bit pari a “11” che vengono eliminate ed il numero di coppie di bit pari a “11" che vengono create, e/o
- una operazione di aritmetica binaria, quale, ad esempio, la somma di almeno un blocco di bit della stringa compressa con almeno un valore binario costante.
Il metodo prevede la memorizzazione di un flag di indicazione del tipo di elaborazione effettuata (nel caso ne possa prevedere più di una) e/o delle eventuali maschere dello XOR logico e/o degli eventuali valori binari costanti e/o eventuali indici di individuazione dei blocchi di bit della stringa compressa sottoposti ad elaborazione.
In tal modo, il metodo ha termine quando viene raggiunto il desiderato valore del rapporto di compressione CR .
Facendo nuovamente riferimento all’esempio di Figura 10, si può osservare che, nel caso la sequenza 58’ di dati di ingresso da comprimere abbia una dimensione Y maggiore della massima dimensione M consentita, la sequenza 58’ viene scomposta in pacchetti dati 58 di dimensione L =M ognuno dei quali viene sottoposto separatamente alla settima forma di realizzazione del metodo appena descritta. Poiché in generale Y non è un multiplo di M , l’ultimo pacchetto dati ha dimensione inferiore a M . Eventualmente, il metodo può prevedere, dopo un prefissato numero di ripetizioni, la giustapposizione di almeno due stringhe compresse relative a pacchetti dati diversi.
Con riferimento ora alla Figura 11 , si può osservare che una ottava forma di realizzazione del metodo di compressione secondo l’invenzione prevede una prima fase di conteggio del numero P di bit pari a “1” presenti nella stringa binaria 66 di ingresso da comprimere, avente dimensione L . Successivamente, nel caso il numero P sia non superiore ad un opportuno valore Pm di soglia, viene creata una stringa espansa 67 ottenuta dalla stringa 66 giustapponendo ad ognuno dei P bit pari a “1” un bit “O"; la stringa espansa 67 ha dimensione (l P). Infine, viene eseguita la compressione di Fibonacci delia stringa espansa 67, comprendente soltanto sottostringhe canoniche, che genera una stringa compressa 68 di dimensione X .
il valore di soglia è dato dal massimo valore di P che consente di rendere
[18]
In particolare, ricordando la formula [14], il valore Pm è dato dalla seguente formula:
[19]
Pertanto, si ha
[20]
In altre parole, il numero P di bit pari a Ί" presenti nella stringa binaria 66 di ingresso da comprimere non deve essere superiore al seguente valore percentuale della dimensione L della stringa binaria 66:
[21]
Nel caso il numero V di bit pari a “0” presenti nella stringa binaria 66 di ingresso sia non superiore al valore Pm di soglia, ovvero nel caso il numero P di bit pari a "1” sia non inferiore al valore ( L-Pm), il metodo può prevedere preliminarmente una operazione di NOT logico della stringa binaria 66, in modo tale da rendere applicabile alla stringa invertita il metodo di Figura 11. Analogamente, il metodo può altresì prevedere una operazione di XOR logico della stringa binaria 66 con una maschera, comprendente un numero r di bit non superiore a L ( r ≤L ), opportunamente calcolata in modo tale che la stringa ottenuta dallo XOR soddisfi la condizione [21] e sia di conseguenza applicabile ad essa il metodo di Figura 11. Nel caso la dimensione r delia maschera sia inferiore alfa dimensione L della stringa binaria 66 di ingresso, lo XOR logico può essere eseguito suddividendo la stringa 66 in pacchetti comprendenti un numero r di bit.
In particolare, tale ottava forma di realizzazione del metodo di compressione può essere applicata ad una stringa binaria di dati da comprimere in combinazione con una o più altre forme di realizzazione.
Come descritto in precedenza, data una stringa binaria di n bit e considerato l'insieme dei valori numerici N rappresentabili con n bit mediante rappresentazione di Fibonacci, mentre tutti i valori numerici N sono rappresentati da una stringa canonica, non tutti i valori numerici N sono rappresentati da ulteriori stringhe ridondanti e, peraltro, il numero di stringhe ridondanti vana, in generale, al variare dello specifico valore numerico N (tra quelli rappresentati anche da stringe ridondanti).
Una nona forma di realizzazione del metodo di compressione secondo l'invenzione sfrutta tale proprietà delia rappresentazione di Fibonacci.
Con riferimento alla Figura 12, si può osservare che la stringa binaria 69 di ingresso da comprimere, avente dimensione L , viene suddivisa in sottostringhe 70 comprendenti n bit ciascuna. Nel caso la dimensione L della stringa binaria 69 non sia un multiplo di n , l'ultima sottostringa viene riempita con una coda di bit pari a “0".
Ogni sottostringa 70, sia canonica che ridondante, viene compressa mediante la compressione di Fibonacci in una sottostringa 71 comprendente una prima parte 72, detta “mantissa", avente un numero m di bit, fisso per tutte le sottostringhe 71, ed una seconda parte 73, detta “esponente”, avente un numero z di bit, variabile al variare della mantissa 72. Il numero z di bit dell'esponente 73, con z > 0, è pari al numero di bit necessario per rappresentare il numero di stringhe ridondanti della rappresentazione di Fibonacci dello specifico valore numerico N rappresentato mediante la rappresentazione binaria 73. In particolare, il metodo prevede che sia prefissato un ordinamento di tutte le stringhe, canonica e ridondante/ridondanti, della rappresentazione di Fibonacci di ogni valore numerico N e che l’esponente 73 individui l’indice della rappresentazione di Fibonacci data dalla corrispondente sottostringa 70.
A partire dal valore numerico N fornito dalla mantissa binaria 72, risulta univocamente determinato il numero delle possibili rappresentazioni di Fibonacci di esso, ovvero il numero delle eventuali stringhe ridondanti, e, pertanto è univocamente determinato il numero di bit z di bit dell’esponente 73. In particolare, nel caso il valore numerico N abbia soltanto una rappresentazione (canonica) di Fibonacci, l’esponente 73 è vuoto (z = 0). Preferibilmente, nel caso il valore numerico N abbia anche almeno una rappresentazione ridondante di Fibonacci, l’indice relativo alla stringa canonica, che viene memorizzato nell’esponente 73 , è quello che ha tutti i bit pari a “0".
Il metodo prevede la creazione di una stringa compressa 74 di dimensione X mediante la giustapposizione di una sottostringa 75 di memorizzazione della dimensione L della stringa binaria 69 di ingresso e dell’insieme ordinato delle sottostringhe compresse 71. In particolare, la sottostringa 75 non è compressa e, preferibilmente, comprende sempre il medesimo numero t di bit.
Il metodo prevede che la stringa compressa 74 sia a sua volta sottoposta alla compressione, come illustrato in Figura 12, ad eccezione della sottostringa 75, che rimane non compressa e fa parte anche della ulteriore stringa generata dalla seconda iterazione della compressione.
Il metodo di compressione di Figura 12 può essere iterato finché la dimensione XE dell’ultima stringa compressa risulta non superiore ad un valore massimo D preimpostato, selezionabile da un operatore.
Sulla base del fatto che non tutti i valori numerici N sono rappresentati, tramite rappresentazione di Fibonacci, da ulteriori stringhe ridondanti e che il numero di stringhe ridondanti varia al variare dello specifico valore numerico N , è facile verificare che, soprattutto al crescere del numero n di bit delle sottostringhe 70, tale nona forma di realizzazione dei metodo di compressione si dimostra efficiente in quanto il risparmio di bit ottenibile dalie sottostringhe 71 aventi un numero (m z) di bit inferiore a n è superiore all'incremento di bit prodotto da quelle aventi un numero (m z) di bit superiore a n .
Per ogni sottostringa compressa 71, il metodo di decompressione, corrispondente a tale nona forma di realizzazione del metodo di compressione, leggendo il valore numerico N contenuto nella mantissa 72 calcola automaticamente il numero delle corrispondenti rappresentazioni di Fibonacci e, nel caso tale numero sia maggiore di 1, leggendo il valore binario dell'esponente 73 individua quale rappresentazione di Fibonacci, tra la canonica e la ridondante/le ridondanti, deve essere assegnata alla sottostringa decompressa 70. In particolare, tale individuazione può essere realizzata mediante una opportuna elaborazione, alla portata del tecnico medio del ramo sulla base degli insegnamenti delia presente invenzione, oppure mediante la lettura di una tabella strutturata in modo tale che la mantissa 72 e l'esponente 73 forniscano il valore dell'Indirizzo dell’elemento della tabella nel quale è memorizzata la specifica stringa di Fibonacci da assegnare alla sottostringa decompressa 70.
Poiché con l’impiego della presente invenzione è possibile comprimere una sequenza dati fino a dimensioni ridottissime, sono evidenti i vantaggi ottenibili daH’impiego della presente invenzione, particolarmente nel campo della tecnologia dei computer e delle telecomunicazioni.
In alcune prove di laboratorio, l'inventrice ha verificato la possibilità di comprimere una stringa binaria di dati di ingresso, di dimensione L , in una stringa binaria di uscita, di dimensione D , con un rapporto di
compressione pari al 98,5%, definito come il rapporto — — — tra la
quantità di bit risparmiati nella stringa compressa e la dimensione della strìnga di ingresso. Tale rapporto di compressione può anche essere superiore, in quanto, essendo il metodo ricorsivo, il lìmite finale è sostanzialmente un limite assoluto e non relativo alla dimensione della stringa di ingresso.
In particolare, il metodo di compressione secondo l’invenzione è in grado di comprimere allo stesso modo qualsiasi tipo di stringa binaria di ingresso, non applicando tecniche di ottimizzazione della compressione specifiche per il particolare tipo di file, come nei convenzionali metodi di compressione attualmente più diffusi.
Peraltro, poiché i metodi della presente invenzione sono sostanzialmente semplici da un punto di vista elaborativo, le implementazioni software e/o hardware della presente invenzione risultano estremamente efficienti e sostanzialmente veloci.
Il metodo di compressione secondo l’invenzione consente di memorizzare, una volta compresse, grandi quantità di dati con una occupazione di memoria estremamente limitata e liberamente selezionabile. Ciò permette, ad esempio, di memorizzare, senza perdita di informazioni (lossless), sequenze di immagini, fisse od in movimento, su supporti di memoria di capacità limitata (ad esempio, i film cinematografici, memorizzati attualmente su DVD, una volta compressi con il metodo secondo la presente invenzione, potrebbero essere memorizzati su un singolo CD-ROM o, addirittura, su un floppy disk).
Analogamente, nel caso delle telecomunicazioni il metodo di compressione consente di trasmettere grandi quantità di dati, una volta compresse, in tempi ridotti e su canali di capacità limitata, con una conseguente elevatissima riduzione di costi. Ciò potrebbe permettere, ad esempio, di trasmettere canali televisivi in tempo reale sulla rete Internet, senza degradarne le immagini (lossless), realizzando anche applicazioni di canali interattivi, del tipo Video on Demand. Ancora, il metodo potrebbe ad esempio consentire il collegamento in tempo reale ed a basso costo dei radiotelefoni cellulari alla rete Internet.
Infine, la presente invenzione potrebbe essere applicata anche per crittografare informazioni e/o messaggi, elaborando opportunamente i dati durante la compressione (ad esempio effettuando, prima, durante o al termine della compressione, una operazione di aritmetica binaria di almeno parte della stringa da comprimere.
In quel che precede sono state descritte le preferite forme di realizzazione e sono state suggerite delle varianti della presente invenzione, ma è da intendersi che gli esperti dei ramo potranno apportare modificazioni e cambiamenti senza con ciò uscire dal relativo ambito di protezione,

Claims (69)

  1. RIVENDICAZIONI 1. Metodo di compressione di una stringa binaria (15, 58, 58', 69) di dati di ingresso, avente un numero L di bit, in una stringa binaria compressa (65, 68, 74) di dati di uscita, avente un numero X di bit, caratterizzato dal fatto che almeno una sottostringa , 46, 70), avente un numero n di bit, della stringa binaria di ingresso viene interpretata attribuendole un valore numerico intero N pari alla somma degli elementi di una successione monotona crescente di numeri interi, tra i primi n elementi di tale successione S, il cui bit corrispondente αi è pari a "1”, secondo la formula ([10])
    e, per ogni sottostringa viene creata una sottostringa binaria compressa 2, 48, 72), avente m bit, in cui viene memorizzata la rappresentazione binaria del valore numerico intero N , attribuito alla corrispondente sottostringa la rappresentazione binaria di N essendo data dalla formula
    la stringa binaria compressa di dati dì uscita comprendendo, per ogni sottostringa la corrispondente sottostringa binaria compressa ed i dati della stringa binaria di ingresso privi di detta almeno una sottostringa il rapporto per k- 1,2,..., tra due elementi consecutivi della successione S , soddisfacendo !a condizione data dalla formula ([7])
    il numero n di bit di detta almeno una sottostringa essendo compreso tra un valore minimo ed il numero L di bit della stringa binaria di dati di ingresso, secondo la formula:
    il valore minimo 3⁄4 essendo pari al minimo valore di n che soddisfa la seguente condizione:
  2. 2. Metodo secondo ia rivendicazione 1, caratterizzato dal fatto che il primo elemento so della successione S è pari a 1 (s0 = 1 ).
  3. 3. Metodo secondo la rivendicazione 2, caratterizzato dal fatto che il secondo elemento s1 della successione S è pari a 2 (i, =2).
  4. 4. Metodo secondo una qualsiasi delle precedenti rivendicazioni, caratterizzato dai fatto che il rapporto Rk tra due elementi consecutivi della successione S tende ad un valore costante R al crescere dell'indice k , secondo la formula ([8])
  5. 5. Metodo secondo una qualsiasi delle precedenti rivendicazioni, caratterizzato dal fatto che il rapporto Rk tra due elementi consecutivi della successione s non è mai superiore a 2, ovvero ([9])
  6. 6. Metodo secondo una qualsiasi delle precedenti rivendicazioni, caratterizzato dal fatto che, a partire dall’elemento (r l)-esimo, ovvero per k ≥ r, ogni elemento sk della successione S è pari ad un polinomio dei p elementi precedenti, essendo p≤r , secondo la formula ([12])
  7. dove i p coefficienti eh , per h = ì,2,...,p, sono valori numerici costanti interi positivi, negativi o nulli. 7. Metodo secondo ognuna delle precedenti rivendicazioni, caratterizzato dal fatto che la successione S è definita dalla formula ([13])
  8. 8. Metodo secondo la rivendicazione 7, caratterizzato dal fatto che n ≥ 10.
  9. 9. Metodo secondo la rivendicazione 8, caratterizzato dal fatto che n≥ 13.
  10. 10. Metodo secondo una qualsiasi delle precedenti rivendicazioni, caratterizzato dal fatto di comprendere neirordine: - una fase iniziale (3) in cui viene memorizzata una informazione relativa al numero L di bit della stringa binaria di dati di ingresso; - una successiva fase (5) in cui la stringa binaria di ingresso viene assegnata ad una stringa ausiliaria denominata “STRINGA ATTUALE"; - un ciclo di fasi comprendente nell’ordine: - un blocco (6) di compressione di STRINGA ATTUALE in una seconda stringa ausiliaria denominata “STRINGA COMPRESSA”; - una fase (7) di verifica che STRINGA ATTUALE sia stata effettivamente compressa; - una fase (8) di verifica, eseguita in caso di esito positivo delia precedente fase (7) di verifica, che STRINGA COMPRESSA abbia dimensione maggiore di un valore D < L preimpostato, - una fase (9) di assegnazione, eseguita in caso di esito positivo della precedente fase (8) di verifica, di STRINGA COMPRESSA a STRINGA ATTUALE, e successiva ripetizione del ciclo di fasi a partire dal blocco (6) di compressione; - una fase (10) di verifica, eseguita nel caso una delle due fasi di verifica (7, 8) dia esito negativo, che la dimensione della giustapposizione della informazione sulla dimensione L e di STRINGA COMPRESSA sia inferiore a L ; - una fase (11) di assegnazione, eseguita in caso di esito positivo della precedente fase (10) di verifica della dimensione della giustapposizione, della giustapposizione dell'informazione relativa alla dimensione L e di STRINGA COMPRESSA alla stringa binaria compressa di dati di uscita; e - una fase (12) di assegnazione, eseguita in caso di esito negativo della precedente fase (10) di verifica della dimensione della giustapposizione, della stringa binaria di dati di ingresso alla stringa binaria compressa di dati di uscita.
  11. 11. Metodo secondo la rivendicazione 10, caratterizzato dal fatto che la informazione relativa al numero L di bit della stringa binaria di dati di ingresso è memorizzata con un prefissato numero t di bit.
  12. 12. Metodo secondo le rivendicazioni 7 e 10 oppure secondo le rivendicazioni 7 e 11 , caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA: - suddivide STRINGA ATTUALE (15) in / sottostringhe comprendenti n bit, dove n ≥ , e - scandisce almeno una volta dette sottostringhe.
  13. 13. Metodo secondo la rivendicazione 12, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA, nel caso la dimensione W di STRINGA ATTUALE (15) non sia un multiplo di n, riempie almeno una sottostringa con una coda di bit pari a “0”.
  14. 14. Metodo secondo la rivendicazione 13, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA, nel caso la dimensione W di STRINGA ATTUALE (15) non sia un multiplo di n, riempie l’ultima sottostringa con una coda di bit pari a "0".
  15. 15. Metodo secondo una qualsiasi delle rivendicazioni da 12 a 14, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA, per ogni sottostringa non comprendente due bit consecutivi pari a “Γ, denominata sottostringa canonica, e non successiva, nell’ordine di scansione, ad un’altra sottostringa canonica, crea una corrispondente sottostringa binaria compressa
  16. 16. Metodo secondo una qualsiasi delle rivendicazioni da 12 a 14, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA, per ogni sottostringa non comprendente due bit consecutivi pari a "1”, denominata sottostringa canonica, crea una corrispondente sottostringa binaria compressa
  17. 17. Metodo secondo la rivendicazione 15, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA, effettua una elaborazione di ogni sottostringa comprendente almeno due bit consecutivi pari a “1”, denominata sottostringa ridondante o non canonica, e non successiva, nell’ordine di scansione, ad un’altra sottostringa per la quale sia stata creata una sottostringa binaria compressa, e, nel caso la sottostringa ottenuta dalla elaborazione della sottostringa ridondante sia canonica, crea una sottostringa binaria compressa corrispondente alla sottostringa elaborata.
  18. 18. Metodo secondo la rivendicazione 16, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA, effettua una elaborazione di ogni sottostringa comprendente almeno due bit consecutivi pari a "1”, denominata sottostringa ridondante o non canonica, e, nel caso la sottostringa ottenuta dalla elaborazione della sottostringa ridondante sia canonica, crea una sottostringa binaria compressa corrispondente alla sottostringa elaborata.
  19. 19. Metodo secondo la rivendicazione 17 o 18, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA effettua detta elaborazione durante la stessa scansione delle l sottostringhe nella quale crea le sottostringhe binarie compresse corrispondenti alle sottostringhe canoniche.
  20. 20. Metodo secondo la rivendicazione 17 o 18, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA effettua detta elaborazione in una scansione delle / sottostringhe successiva a quella durante la quale crea le sottostringhe binarie compresse corrispondenti alle sottostringhe canoniche.
  21. 21. Metodo secondo una qualsiasi delle rivendicazioni da 17 a 20, caratterizzato dal fatto che detta elaborazione è un NOT logico.
  22. 22. Metodo secondo una qualsiasi delle rivendicazioni da 17 a 21, caratterizzato dal fatto che detta elaborazione è uno XOR logico con almeno una maschera.
  23. 23. Metodo secondo la rivendicazione 22, caratterizzato dal fatto che detta elaborazione è uno XOR logico con una maschera, comprendente un numero r di bit non superiore a n (r < n), che viene determinata come la maschera che rende canoniche il massimo numero di sottostringhe ridondanti da elaborare.
  24. 24. Metodo secondo una qualsiasi delle rivendicazioni da 17 a 23, caratterizzato dal fatto che detta elaborazione è una operazione di aritmetica binaria.
  25. 25. Metodo secondo la rivendicazione 24, caratterizzato dal fatto che detta operazione di aritmetica binaria è effettuata con almeno una costante binaria, comprendente un numero r di bit non superiore a n ( r ≤ n ).
  26. 26. Metodo secondo una qualsiasi delle rivendicazioni da 15 a 25, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE in STRINGA COMPRESSA crea altresi una stringa di intestazione, o header, comprendente, per ognuna delle / sottostringhe in cui è suddivisa STRINGA ATTUALE, un insieme di bit che indica se la corrispondente sottostringa di STRINGA ATTUALE è stata compressa e/o se la corrispondente sottostringa di STRINGA ATTUALE è stata compressa dopo essere stata elaborata e/o il tipo di elaborazione effettuata sulla corrispondente sottostringa di STRINGA ATTUALE.
  27. 27. Metodo secondo la rivendicazione 26, caratterizzato dal fatto che l'header comprende l bit, ognuno dei quali corrisponde univocamente ad una sottostringa di STRINGA ATTUALE ed è pari a "1”, se la corrispondente sottostringa viene compressa, oppure è pari a “0", se la corrispondente sottostringa non viene compressa.
  28. 28. Metodo secondo una qualsiasi delle rivendicazioni da 17 a 27, caratterizzato dal fatto che l’header comprende, per ogni sottostringa di STRINGA ATTUALE che viene compressa dopo essere stata elaborata, almeno un corrispondente bit che indica il tipo di elaborazione effettuata sulla corrispondente sottostringa.
  29. 29. Metodo secondo la rivendicazione 22 ed una qualsiasi delle rivendicazioni da 26 a 28, caratterizzato dal fatto che l’header comprende altresì detta almeno una maschera.
  30. 30. Metodo secondo la rivendicazione 25 ed una qualsiasi delle rivendicazioni da 26 a 29, caratterizzato dal fatto che l’header comprende altresì detta almeno una costante binaria.
  31. 31. Metodo secondo una qualsiasi delle rivendicazioni da 26 a 30, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE in STRINGA COMPRESSA comprime anche l’header.
  32. 32. Metodo secondo la rivendicazione 31 , caratterizzato dai fatto che il blocco (6) di compressione comprime almeno una sottostringa avente un numero di bit ri con ri< l , dell'header secondo il metodo descritto nella rivendicazione 7.
  33. 33. Metodo secondo la rivendicazione 32, caratterizzato dai fatto Che ri=n.
  34. 34. Metodo secondo la rivendicazione 31 , caratterizzato dal fatto che il blocco (6) di compressione comprime almeno una sottostringa avente un numero di bit ri con ri≤l , dell’header secondo la codifica a lunghezza di catena, o RLE (Run Length Encoding).
  35. 35. Metodo secondo una qualsiasi delle rivendicazioni da 31 a 34, caratterizzato dal fatto di inserire in testa od in coda a STRINGA COMPRESSA un indicatore, o flag, il cui valore binario indichi il tipo di compressione dell’header.
  36. 36. Metodo secondo una qualsiasi delle rivendicazioni da 12 a 14, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA prevede - una prima iterazione di fasi, in cui effettua una scansione delle / sottostringhe, in cui è suddivisa STRINGA ATTUALE, durante la quale, per ogni sottostringa non comprendente due bit consecutivi pari a "1”, denominata sottostringa canonica, viene creata una corrispondente sottostringa binaria compressa , durante tale scansione essendo altresì creata una prima stringa di intestazione, o header, comprendente, per ognuna delle l sottostringhe in cui è suddivisa STRINGA ATTUALE, un bit che è pari a "1”, se la corrispondente sottostringa viene compressa, oppure è pari a “0”, se la corrispondente sottostringa non viene compressa, ed - una o più ulteriori iterazioni di fasi, in cui effettua una elaborazione di ogni sottostringa, per la quale durante la iterazione precedente non sia stata creata una corrispondente sottostringa binaria compressa e, nel caso la sottostringa ottenuta dalla elaborazione sia canonica, crea una sottostringa binaria compressa corrispondente alla sottostringa elaborata, durante tale ogni ulteriore iterazione essendo altresì creato un corrispondente ulteriore header comprendente, per ogni sottostringa per la quale durante la iterazione precedente non sia stata creata una corrispondente sottostringa binaria compressa un bit che è pari a “1”, se la corrispondente sottostringa è stata compressa dopo l’elaborazione, oppure è pari a “0", se la corrispondente sottostringa non viene compressa dopo l’elaborazione.
  37. 37. Metodo secondo la rivendicazione 36, caratterizzato dal fatto che detta elaborazione è un NOT logico.
  38. 38. Metodo secondo la rivendicazione 36 o 37, caratterizzato dal fatto che detta elaborazione è uno XOR logico con almeno una maschera.
  39. 39. Metodo secondo la rivendicazione 38, caratterizzato dal fatto che detta elaborazione è uno XOR logico con una maschera, comprendente un numero r di bit non superiore a n ( r ≤n ), che viene determinata come la maschera che rende canoniche il massimo numero di sottostringhe per le quali durante la iterazione precedente non sia stata creata una corrispondente sottostringa binaria compressa
  40. 40. Metodo secondo una qualsiasi delle rivendicazioni da 36 a 39, caratterizzato dal fatto che detta elaborazione è una operazione di aritmetica binaria.
  41. 41. Metodo secondo la rivendicazione 40, caratterizzato dal fatto che detta operazione di aritmetica binaria è effettuata con almeno una costante binaria, comprendente un numero r di bit non superiore a n ( r ≤ n ).
  42. 42. Metodo secondo la rivendicazione 36 ed una qualsiasi delle rivendicazioni da 38 a 41, caratterizzato da) fatto che l’header comprende altresì detta almeno una maschera.
  43. 43. Metodo secondo la rivendicazione 36 ed una qualsiasi delle rivendicazioni da 38 a 42, caratterizzato dal fatto che l'header comprende altresì detta almeno una costante binaria.
  44. 44. Metodo secondo una qualsiasi delle rivendicazioni da 36 a 43, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE in STRINGA COMPRESSA comprime anche il primo header e/o almeno uno di detti ulteriori header.
  45. 45. Metodo secondo la rivendicazione 44, caratterizzato dal fatto che il blocco (6) di compressione comprime il primo header e/o almeno uno di detti ulteriori header secondo il metodo descritto in una qualsiasi delle precedenti rivendicazioni da 32 a 34.
  46. 46. Metodo secondo le rivendicazioni 7 e 10 oppure secondo le rivendicazioni 7 e 11, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA prevede una prima iterazione di fasi, in cui viene effettuata una scansione di STRINGA ATTUALE con una prima finestra (59) di dimensione n1 ≥ non superiore ad un valore massimo WD , la prima finestra scandendo STRINGA ATTUALE spostandosi con un passo WS1 di bit compreso tra 1 e WD
    - ogni volta che la prima finestra individua una sottostringa non comprendente due bit consecutivi pari a "1 ” , denominata sottostringa canonica Cm1 di dimensione η1 , viene memorizzato un indice che individua la posizione della sottostringa canonica Cm1 all'interno di STRINGA ATTUALE, e la sottostringa canonica Crn1 viene compressa in una sottostringa binaria compressa secondo la rivendicazione 7, - al termine della scansione, viene memorizzato il numero G, di sottostringhe canoniche Crn1 che sono state compresse e le parti (60, 60’, 60”) di STRINGA ATTUALE, non appartenenti a sottostringhe canoniche Crn1 di dimensione η1 , vengono tra loro giustapposte in una prima stringa (61) di scarto, ed - una o più ulteriori iterazioni di fasi, in cui - viene effettuata una scansione della stringa di scarto ottenuta alla iterazione precedente con una corrispondente ulteriore finestra di dimensione nìg < nlg-x progressivamente decrescente, la ulteriore finestra scandendo la relativa stringa di scarto spostandosi con un passo WSg di bit compreso tra 1 e
    - ogni volta che la ulteriore finestra individua una sottostringa canonica Cng di dimensione nig , viene memorizzato un indice che individua la posizione della sottostringa canonica Cng all’interno della stringa di scarto ottenuta alla iterazione precedente, e la sottostringa canonica Cng viene compressa in una sottostringa binaria compressa secondo la rivendicazione 7, - al termine della scansione, viene memorizzato il numero Gg di sottostringhe canoniche Cng che sono state compresse e le parti della stringa di scarto ottenuta alla iterazione precedente, non appartenenti a sottostringhe canoniche Cng di dimensione nXg , vengono tra loro giustapposte in una corrispondente ulteriore stringa di scarto, le iterazioni di fasi terminando quando - l’ultima stringa di scarto generata è vuota, oppure - l’ultima stringa di scarto generata è troppo piccola per essere effettivamente compressa, oppure - la dimensione nXg dell’ultima finestra di scansione è pari a STRINGA COMPRESSA comprendendo: - il numero F di scansioni effettuate fino alla ultima scansione che ha effettivamente compresso, - la stringa di scarto generata dall’ultima iterazione F , e - per ogni scansione g , per g = 1 : - il numero Gg di sottostringhe canoniche Cng che sono state compresse, - per ogni sottostringa canonica c : - l’indice che individua la posizione della sottostringa canonica nella stringa di scarto generata dalla iterazione precedente (g-l), e - la sottostringa compressa
  47. 47. Metodo secondo la rivendicazione 46, caratterizzato dal fatto che STRINGA ATTUALE ha dimensione non superiore ad un valore massimo M .
  48. 48. Metodo secondo la rivendicazione 47, caratterizzato dal fatto che M =1024.
  49. 49. Metodo secondo la rivendicazione 47 o 48, caratterizzato dal fatto che WD <M.
  50. 50. Metodo secondo una qualsiasi delle rivendicazioni da 46 a 49, caratterizzato dal fatto che WD = 64.
  51. 51. Metodo secondo una qualsiasi delle rivendicazioni da 46 a 50, caratterizzato dal fatto che
  52. 52. Metodo secondo una qualsiasi delle rivendicazioni da 46 a 51 , caratterizzato dal fatto che
  53. 53. Metodo secondo una qualsiasi delle rivendicazioni da 46 a 52, caratterizzato dal fatto che WS, = 1.
  54. 54. Metodo secondo una qualsiasi delle rivendicazioni da 46 a 53, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE in STRINGA COMPRESSA prevede preliminarmente alla prima iterazione di fasi una elaborazione di STRINGA ATTUALE.
  55. 55. Metodo secondo le rivendicazioni 7 e 10 oppure secondo le rivendicazioni 7 e 11 , caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA prevede una prima fase di conteggio del numero P di bit pari a "1 ” presenti in STRINGA ATTUALE.
  56. 56. Metodo secondo la rivendicazione 55, caratterizzato dal fatto che, nel caso che il numero P soddisfi la condizione ([20]) viene creata una stringa espansa (67) ottenuta da STRINGA ATTUALE giustapponendo ad ognuno dei P bit pari a “1" un bit “0".
  57. 57. Metodo secondo la rivendicazione 55, caratterizzato dal fatto che, nel caso che il numero P soddisfi la condizione ([20]) viene effettuata una operazione di NOT logico su STRINGA ATTUALE e viene creata una stringa espansa (67) ottenuta dalla stringa generata dal NOT giustapponendo ad ogni bit pari a “1" un bit “0”.
  58. 58. Metodo secondo le rivendicazioni 7 e 10 oppure secondo le rivendicazioni 7 e 11, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA prevede una operazione di XOR logico su STRINGA ATTUALE con almeno una maschera, comprendente un numero r di bit non superiore a L ( r ≤L ), determinata in modo tale che la stringa generata dallo XOR soddisfi la condizione ([20])
    e successivamente la creazione di una stringa espansa ottenuta dalla stringa generata dallo XOR giustapponendo ad ogni bit pari a "1 ” un bit “0”.
  59. 59. Metodo secondo una qualsiasi delle rivendicazioni da 12 a 14, caratterizzato dal fatto che il blocco (6) di compressione di STRINGA ATTUALE (15) in STRINGA COMPRESSA prevede che ognuna delle / sotostringhe (70), in cui è suddivisa STRINGA ATTUALE, sia compressa in una sotostrìnga compressa (71) comprendente una prima parte (72), deta “mantissa”, avente un numero m di bit, ottenuta tramite il metodo secondo la rivendicazione 7, ed una seconda parte (73), detta “esponente”, avente un numero z di bit, variabile al variare della mantissa (72), con z > 0 e pari al numero di bit necessario per rappresentare il numero di stringhe ad n bit alle quali corrisponde lo stesso valore numerico intero N , quando sono interpretate mediante la successione secondo la rivendicazione 7, e comprendenti almeno due bit consecutivi pari a “1”, denominate stringhe ridondanti, il blocco di compressione prevedendo che sia prefissato ordinamento di tutte le stringhe ad n bit, alle quali corrisponde lo stesso valore numerico intero N , e che l'esponente (73) individui l’indice delia rappresentazione ridondante corrispondente alia sottostringa (70) compressa, STRINGA COMPRESSA comprendendo le sottostringhe (70) compresse.
  60. 60. Metodo secondo la rivendicazione 59, caratterizzato dal fatto che nel caso il numero di stringhe ad n bit alle quali corrisponde lo stesso valore numerico intero N , quando sono interpretate mediante la successione secondo la rivendicazione 7, sia superiore a 1 , la stringa non comprendente due bit consecutivi pari a "1 ” viene espressa dall’esponente (73) mediante z bit pari a “0".
  61. 61. Metodo di decompressione di una stringa binaria compressa, caratterizzato dal fatto che la stringa binaria compressa è generata, a partire da una stringa binaria di dati avente un numero L di bit, mediante il metodo di compressione secondo una qualsiasi delle precedenti rivendicazioni 1-60.
  62. 62. Apparato elettronico, comprendente almeno una unità centrale di elaborazione ed almeno una unità di memoria, caratterizzato dal fatto di eseguire il metodo di compressione secondo una qualsiasi delle precedenti rivendicazioni 1-60.
  63. 63. Apparato elettronico, comprendente almeno una unità centrale di elaborazione ed almeno una unità di memoria, caratterizzato dal fatto di eseguire il metodo di decompressione secondo la rivendicazione 61.
  64. 64. Segnale elettrico, magnetico o elettromagnetico comprendente almeno una stringa di dati, caratterizzato dal fatto che detta almeno una stringa di dati è una stringa binaria compressa generata, a partire da una stringa binaria di dati avente un numero L di bit, mediante il metodo di compressione secondo una qualsiasi delle precedenti rivendicazioni 1-60.
  65. 65. Supporto di memoria leggibile da un elaboratore contenente almeno una stringa di dati, caratterizzato dal fatto che detta almeno una strìnga di dati è una strìnga binaria compressa generata, a partire da una stringa binaria di dati avente un numero L di bit, mediante il metodo di compressione secondo una qualsiasi delle precedenti rivendicazioni 1-60.
  66. 66. Programma per elaboratore comprendente mezzi a codice atti ad eseguire, quando operano su un elaboratore, il metodo di compressione secondo una qualsiasi delle rivendicazioni da 1 a 60.
  67. 67. Supporto di memoria leggibile da un elaboratore, avente un programma memorizzato su di esso, caratterizzato dal fatto che il programma è il programma per elaboratore secondo la rivendicazione 66.
  68. 68. Programma per elaboratore comprendente mezzi a codice atti ad eseguire, quando operano su un elaboratore, il metodo di decompressione secondo la rivendicazione 61.
  69. 69. Supporto di memoria leggibile da un elaboratore, avente un programma memorizzato su di esso, caratterizzato dal fatto che il programma è il programma per elaboratore secondo la rivendicazione 68.
IT2000RM000347A 2000-06-26 2000-06-26 Metodo di rappresentazione numerica. ITRM20000347A1 (it)

Priority Applications (4)

Application Number Priority Date Filing Date Title
IT2000RM000347A ITRM20000347A1 (it) 2000-06-26 2000-06-26 Metodo di rappresentazione numerica.
PCT/IT2001/000329 WO2002001728A1 (en) 2000-06-26 2001-06-25 Method for numerical compression and decompression of binary data
AU70995/01A AU7099501A (en) 2000-06-26 2001-06-25 Method for numerical compression and decompression of binary data
EP01949885A EP1297630A1 (en) 2000-06-26 2001-06-25 Method for numerical compression and decompression of binary data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
IT2000RM000347A ITRM20000347A1 (it) 2000-06-26 2000-06-26 Metodo di rappresentazione numerica.

Publications (2)

Publication Number Publication Date
ITRM20000347A0 ITRM20000347A0 (it) 2000-06-26
ITRM20000347A1 true ITRM20000347A1 (it) 2001-12-26

Family

ID=11454804

Family Applications (1)

Application Number Title Priority Date Filing Date
IT2000RM000347A ITRM20000347A1 (it) 2000-06-26 2000-06-26 Metodo di rappresentazione numerica.

Country Status (4)

Country Link
EP (1) EP1297630A1 (it)
AU (1) AU7099501A (it)
IT (1) ITRM20000347A1 (it)
WO (1) WO2002001728A1 (it)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110504973A (zh) * 2018-05-16 2019-11-26 北京京东尚科信息技术有限公司 文件压缩、解压方法和装置
CN118194953A (zh) * 2024-03-29 2024-06-14 深圳市蓝色极光储能科技有限公司 一种btd压缩深度卷积网络构建方法、设备、存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SU662930A1 (ru) * 1976-07-19 1979-05-15 Таганрогский радиотехнический институт им. В.Д.Калмыкова Устройство дл приведени р-кодов фибоначчи к минимальной форме

Also Published As

Publication number Publication date
WO2002001728A1 (en) 2002-01-03
AU7099501A (en) 2002-01-08
ITRM20000347A0 (it) 2000-06-26
EP1297630A1 (en) 2003-04-02

Similar Documents

Publication Publication Date Title
US5748122A (en) Data processing apparatus and data processing method
Fiala et al. Data compression with finite windows
JP6437575B2 (ja) Vlsiでの効率的なハフマン符号化を行う装置および方法
US5945933A (en) Adaptive packet compression apparatus and method
US7365658B2 (en) Method and apparatus for lossless run-length data encoding
CN112615628B (zh) 硬件友好地数据压缩
US7688233B2 (en) Compression for deflate algorithm
JPH0253329A (ja) 圧縮符号化方法及び復号方法
WO2014106782A1 (en) High bandwidth compression to encoded data streams
US7548175B2 (en) Encoding apparatus, decoding apparatus, encoding method, computer readable medium storing program thereof, and computer data signal
CN102143039A (zh) 数据压缩中数据分段方法及设备
CN113366765A (zh) 减少锁存器计数以节省用于动态霍夫曼表生成的硬件面积
KR20150105486A (ko) 데이터 인코더, 데이터 디코더 및 방법
US6788224B2 (en) Method for numeric compression and decompression of binary data
WO2010044099A1 (en) Lossless content encoding
WO1995012248A1 (en) Efficient optimal data recompression method and apparatus
Nandi et al. Modified compression techniques based on optimality of LZW code (MOLZW)
Al-Bahadili A novel lossless data compression scheme based on the error correcting Hamming codes
JPH11340838A (ja) 符号化装置および復号装置
US6947606B2 (en) Skim encoding method for compression of a two dimensional array of data
ITRM20000347A1 (it) Metodo di rappresentazione numerica.
JP2010258532A (ja) ビット長を符号に変換する回路及び方法
JP2005521324A (ja) 損失のないデータの圧縮および圧縮解除方法および装置
Ghuge Map and Trie based Compression Algorithm for Data Transmission
Ambadekar et al. Advanced data compression using J-bit Algorithm