DE4340591C2 - Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete - Google Patents

Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete

Info

Publication number
DE4340591C2
DE4340591C2 DE4340591A DE4340591A DE4340591C2 DE 4340591 C2 DE4340591 C2 DE 4340591C2 DE 4340591 A DE4340591 A DE 4340591A DE 4340591 A DE4340591 A DE 4340591A DE 4340591 C2 DE4340591 C2 DE 4340591C2
Authority
DE
Germany
Prior art keywords
code
compression
character
dictionary
run
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Lifetime
Application number
DE4340591A
Other languages
English (en)
Other versions
DE4340591A1 (de
Inventor
Gadiel Seroussi
Abraham Lempel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of DE4340591A1 publication Critical patent/DE4340591A1/de
Application granted granted Critical
Publication of DE4340591C2 publication Critical patent/DE4340591C2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/005Statistical coding, e.g. Huffman, run length coding
    • 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
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • 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
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • 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
    • H03M7/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Reduction Or Emphasis Of Bandwidth Of Signals (AREA)

Description

Diese Erfindung bezieht sich im allgemeinen auf die Kompres­ sion und Dekompression von digitalen Daten und insbesondere auf Ausführungen eines verlustfreien Kompressions- und De­ kompressions-Verfahrens und einer verlustfreien Kompres­ sions- und Dekompressions-Vorrichtung unter Verwendung eines Wörterbuches, um Kompressionsdaten zu speichern, und auf An­ wendungen von Kompressions-/Dekompressions-Techniken auf Netzwerkpaketkommunikationen.
Eine Hauptklasse von Kompressionsschemata kodieren Mehr-Zei­ chen-Folgen unter Verwendung binärer Sequenzen oder "Kode­ wörter", die ansonsten nicht verwendet werden, um einzelne Zeichen zu kodieren. Die Folgen sind aus einem "Alphabet", oder aus Einzel-Zeichen-Folgen gebildet. Dieses Alphabet stellt den kleinsten, einheitlichen Teil an Informationen dar, den der Kompressor verarbeitet. Folglich hat ein Al­ gorithmus, der acht Bit verwendet, um seine Zeichen darzu­ stellen, 256 eindeutige Zeichen in seinem Alphabet. Bis zu dem Grad, bei dem die Mehr-Zeichen-Folgen, die in dem Ko­ dierungsschema dargestellt sind, in einer gegebenen Datei des Datenstromes angetroffen werden, ist die Kompression wirksam. Als Analogie zu zweisprachigen Wörterbüchern, die verwendet werden, um zwischen menschlichen Sprachen zu über­ setzen, wird das Gerät, das die Abbildung zwischen einem un­ komprimierten Kode und einem komprimierten Kode ausführt, herkömmlicherweise als "Wörterbuch" bezeichnet.
Im wesentlichen hängt die Nützlichkeit eines Kompressions­ schemas, das auf einem Wörterbuch basiert, von der Frequenz ab, mit der die Wörterbucheinträge für Mehr-Zeichen-Folgen verwendet werden. Wenn ein festes Wörterbuch für einen Dateityp optimiert ist, ist es unwahrscheinlich, daß es für einen weiteren optimiert ist. Für ein Wörterbuch, das eine große Anzahl von Zeichenkombinationen, die wahrscheinlich in Zeitungstextdateien gefunden werden, einschließt, ist es z . B. unwahrscheinlich, Datenbankdateien, Tabellenkalku­ lationsdateien, Rastergraphikdateien, CAD-Dateien (CAD = Computer-Aided-Design = Rechner-gestützte Entwicklung), etc. wirksam zu komprimieren.
Anpassungsfähige Kompressionsschemata, bei denen das Wörter­ buch, das verwendet wird, um gegebene Eingabedaten zu kom­ primieren, erzeugt wird, während diese Eingabedaten kom­ primiert werden, sind bekannt. Kodewörter, die jedes ein­ zelne Zeichen, das in den unkomprimierten Eingabedaten mög­ lich ist, darstellen, werden in das Wörterbuch eingefügt. Zusätzliche Einträge werden zu dem Wörterbuch hinzugefügt, wenn Mehr-Zeichen-Folgen in der Datei angetroffen werden. Die zusätzlichen Wörterbucheinträge werden verwendet, um das nachfolgende Auftreten von Mehr-Zeichen-Folgen zu kodieren. Die Übereinstimmung von derzeitigen Eingabemustern wird z. B. lediglich gegenüber Ausdrücken durchgeführt, die derzeitig in dem Wörterbuch vorhanden sind. Nach jeder fehlge­ schlagenen Übereinstimmung wird dem Wörterbuch ein neuer Ausdruck hinzugefügt. Der neue Ausdruck wird durch Erwei­ terung des übereinstimmenden Ausdrucks durch ein Symbol (z. B. das Eingabesymbol, das die Übereinstimmung "bricht") gebildet. Die Kompression wird in dem Naß ausgeführt, in dem die Mehr-Zeichen-Folgen, die in der Datei am häufigsten auf­ treten, angetroffen werden, wenn sich das Wörterbuch ent­ wickelt bzw. wenn dieses aufgebaut wird.
Während der Dekompression wird das Wörterbuch auf ähnliche Art gebaut. Wenn ein Kodewort für eine Zeichenfolge in der komprimierten Datei angetroffen wird, enthält das Wörterbuch folglich die notwendigen Informationen, um die entsprechende Zeichenfolge wieder herzustellen. Weit verbreitete Kompres­ sionsalgorithmen, die ein Wörterbuch verwenden, um Kompres­ sions- und Dekompressionsinformationen zu speichern, sind das erste und das zweite Verfahren von Lempel und Ziv, ge­ nannt LZ1 bzw. LZ2. Der Lempel-Ziv (LZ) Algorithmus wurde ursprünglich von Lempel und Ziv in "On the Complexity of Finite Sequences", IEEE Transactions on Information Theory, IT-22: 75-81, Januar 1976, in "A Universal Algorithm for Sequential Data Compression", IEEE Transactions on Informa­ tion Theory, IT-23: 337-343, Mai 1977, und in "Compression of Individual Sequences via Variable Rate Coding", IEEE Trans­ actions on Information Theory, IT-24: 530-536 beschrieben. Die Verwendung von Wörterbüchern wird ebenfalls im US-Patent Nr. 4,464,650 offenbart und verschiedene Verbesserungen des Algorithmus werden im US-Patent Nr. 4,558,302 und im US-Patent Nr. 4,814,746 offenbart.
Beim Arbeiten mit einer praktischen Ausführung ist der Spei­ cherplatz, der für eine Kompression/Dekompression vorhanden ist, endlich. Deshalb ist die Anzahl der Einträge in das Wörterbuch endlich und die Länge der Kodewörter, die ver­ wendet werden, um die Einträge zu kodieren, ist begrenzt. Typischerweise variiert die Länge der Kodewörter zwischen 12 und 16 Bit. Wenn die Eingabedatenfolge ausreichend lang ist, wird sich das Wörterbuch schließlich "auffüllen". Verschie­ dene Handlungen sind an diesem Punkt möglich. Das Wörterbuch kann z. B. in seinem derzeitigen Zustand eingefroren werden und für den Rest der Eingabefolge verwendet werden. Bei einem zweiten Ansatz wird das Wörterbuch zurückgesetzt und ein neues Wörterbuch wird aus dem Nichts erzeugt. Bei einem dritten Ansatz wird das Wörterbuch für einige Zeit einge­ froren, bis sich das Kompressionsverhältnis verschlechtert, dann wird das Wörterbuch zurückgesetzt. Andere Strategien zum Rücksetzen des Wörterbuchs sind in "Practical Dicitionary Management for Hardware Data Compression" Communications of the ACH, 35: 95-104, Januar 1992, beschrieben.
Beim LZW-Verfahren muß das Wörterbuch für die Einzel-Zei­ chen-Folgen, die verwendet werden, um das Kompressionswör­ terbuch aufzubauen, initialisiert werden. Diesen Zeichen werden eindeutige Kodes innerhalb des Kompressions-/Dekom­ pressions-Systems zugeordnet. Dies bedeutet, daß die Anzahl von Bits in jeglichem zusätzlichen Ausgabekode, der durch den Kodierer gesendet wird (z. B. Kodes, die Mehr-Zeichen- Folgen darstellen) durch die Anzahl der Einzel-Zeichen-Fol­ gen gesteuert sind. Die kürzeste Bitlänge für eine Mehr- Zeichen-Folge ist z. B. durch die Anzahl von Einzel-Zeichen- Folgen festgelegt. Die Anzahl von Bits in nachfolgenden Kodes, die mehrere Zeichen darstellen, nehmen in der Länge jedesmal um ein Bit zu, wenn die Anzahl von Einträgen in dem Wörterbuch die nächste Potenz von 2 erreicht. Die Verwendung mehrerer Bits, um Einzel-Zeichen-Kodewörter darzustellen, reduziert entsprechend das Gesamt-Kompressionsverhalten.
Die Initialisierung von einzelnen Eingabezeichen, wie oben beschrieben, ist für Eingabedaten mit einer großen Alpha­ betgröße oder wenn lediglich erwartet wird, daß eine unbe­ kannte Teilmenge des Alphabets in den Eingabedaten auftritt, ineffizient. Wenn das "natürliche" Alphabet für die Eingabe­ daten z. B. aus 16-Bit Symbolen besteht, würde die anfäng­ liche Wörterbuchgröße 65,536 Einträge haben. Die minimale Länge jeglichen erzeugten Ausgabekodes ist deshalb zusätz­ lich zu den Zeichen des "natürlichen" Alphabets (z. B. Kodes, die Mehr-Zeichen-Folgen darstellen) mindestens 17 Bit. Wenn der Block von Eingabedaten (d. h. die Daten, die komprimiert werden sollen) relativ zu der Alphabetgröße klein ist, gibt es auf der anderen Seite einen unnötig hohen Aufwand bezüg­ lich der Zeit, dem Speicherplatz und dem Kompressionsver­ hältnis, die von der Initialisierung, der Speicherung bzw. der Kodierung von Einzel-Zeichen-Folgen aus den Eingabedaten herrührt.
Um dieses Problem zu überwinden, verwenden einige Varianten des LZ-Algorithmus ein anfänglich leeres Wörterbuch. Wenn ein neues Eingabezeichen angetroffen wird, gibt der Kompres­ sor einen bestimmten Kode aus, der von einer Kopie des neuen Zeichens gefolgt ist. Dies gestattet dem Dekompressor, einer Teilmenge des Eingabealphabets, das tatsächlich verwendet wird, auf der Spur zu bleiben, wobei gestattet ist, daß das Dekodieren normal durchgeführt wird. Das Hauptproblem bei dieser Strategie liegt in den hohen Kosten der Kodierung neuer Zeichen. Für kurze Dateien gegenüber großen Alpha­ beten, können diese Gesamtkosten unakzeptabel hoch werden. Mit 8-Bit-Symbolen und 12-Bit-Ausgabekodes sind z. B. 20 Bit erforderlich, um dem Dekodierer mitzuteilen, daß ein neues Zeichen aufgetreten ist. Zusätzlich gibt es oft eine Redun­ danz innerhalb der kodierten Zeichenfolgen, die durch den LZ-Algorithmus ausgegeben werden. Eine Folge der gleichen Eingabezeichen (d. h. ein "Lauf") erzeugt z. B. eine Folge von kodierten Folgen mit einer vorhersagbaren und redundanten Struktur. Diese Redundanz wird derzeitig nicht zum Vorteil ausgenützt, um das Kompressionsverhältnis von Standard-Kom­ pressionsalgorithmen weiter zu erhöhen.
Entsprechend bleibt ein Bedarf an einem Datenkompressions- Initialisierungs-Verfahren, das auf verschiedene Arten von Eingabedaten und verschiedene Datenstrukturen anpaßbar ist, um das Datenkompressionsverhältnis zu erhöhen und den Speicherplatz, der in einem Kompressions-/Dekompressions- System, das auf einem Wörterbuch basiert, erforderlich ist, zu reduzieren.
Es ist die Aufgabe der vorliegenden Erfindung, die Kompres­ sion und die Dekompression von digitalen Daten in einem System, das auf einem Wörterbuch basiert, zu verbessern.
Diese Aufgabe wird durch ein Verfahren gemäß Anspruch 1, ein Verfahren gemäß Anspruch 15 und durch eine Schaltung gemäß Anspruch 19 gelöst.
Es ist ein Vorteil der Erfindung, daß das Datenkompressions­ verhältnis für Kompressions-/Dekompressions-Schemata durch Reduzierung der Anzahl der Bits, die beim Darstellen ko­ dierter Zeichenfolgen verwendet werden, erhöht wird.
Ein weiterer Vorteil der Erfindung ist es, daß die Gesamt­ kosten des Initialisierens eines Wörterbuchs in einem Kom­ pressions- und Dekompressions-System, das auf einem Wörter­ buch basiert, reduziert werden.
Ein weiterer Vorteil der Erfindung ist es, daß digitale Da­ ten, die entweder in kleinen Dateien auftreten oder die durch eine Teilmenge eines großen Einzel-Zeichenalphabets dargestellt sind, wirksamer komprimiert werden.
Ein weiterer Vorteil der Erfindung ist es, daß kodierte Zei­ chenfolgen, die Eingabedatenzeichenläufe darstellen, erneut komprimiert werden, um das Kompressionsverhältnis eines Kom­ pressions-/Dekompressions-Systems weiter zu erhöhen.
Die Erfindung betrifft ein auf einem Wörterbuch basierendes Initialisierungsschema, das auf Veränderungen der Art und der Struktur der Eingabedaten anpaßbar ist. Das Initiali­ sierungsschema erhöht das Kompressionsverhältnis durch Mini­ mieren der Anzahl von Dateneinträgen um Einzel-Zeichen-Da­ tenfolgen darzustellen, die in einem Kompressions-/Dekom­ pressions-System, das auf einem Wörterbuch basiert, ver­ wendet werden. Die reduzierte Anzahl von Dateneinträgen re­ duziert die Bit-Länge der Kodewörter in einer komprimierten Datenfolge. Die Reduzierung der Kodewort-Bit-Länge in der komprimierten Datenfolge erhöht das Gesamt-Kompressionsver­ hältnis.
Die Erfindung verwendet eine veränderliche Anzahl von Spe­ zial-Kodes. Die gesamte Anzahl von Spezial-Kodes wird typischerweise ausgewählt, um kleiner zu sein als die ge­ samte Anzahl von Zeichenkodes, die zur Darstellung von Einzel-Zeichen in dem Eingabedatenarray verwendet werden. Jeder Spezial-Kode trägt einen Teil der Informationen eines neuen Zeichens. Zusätzliche Bits, die ein neues Zeichen fer­ ner identifizieren, werden dann in einem getrennten, Teil- Zeichen übermittelt. Dieses Verfahren reduziert die "Kosten" (d. h. die Bandbreite und den Speicherplatz) der Übertragung eines neuen Symbols. Das Verfahren ist auf Verfahren anpaß­ bar, die irgendwo zwischen einem Nicht-Initialisierungs-Ver­ fahren (z. B. ein anfänglich leeres Wörterbuch) und einer Voll-Alphabet-Initialisierung liegen, bei der jedem eindeutigen Zeichen in dem Alphabet ein Eintrag in dem Wör­ terbuch zugeordnet wird.
Die Anzahl der Spezial-Kodes ist auf die Anwendung anpaßbar, die derzeitig durchgeführt wird. Folglich wird die Anzahl der Spezial-Kodes für bestimmte Arten von Daten vorbestimmt, um das Kompressionsverhältnis zu maximieren. Dieses Ver­ fahren gestattet es, daß das Wörterbuch weniger Einträge als die Alphabetgröße hat. Folglich ist eine Kompression mit sehr kleinen Wörterbüchern, die sehr wenig Speicher er­ fordern, möglich. Dies ist besonders bei Anwendungen, bei denen die Eingabedatenblöcke kurz sind und bei denen jeder Block unabhängig komprimiert werden muß, besonders sinnvoll. Das Initialisierungsschema sieht ebenfalls eine Kompression von Datenquellen mit großen Alphabetgrößen (z. B. 16-Bit Sym­ bole) vor, während eine moderate Größe der Wörterbücher bei­ behalten wird.
Ein weiterer Aspekt der Erfindung führt eine Art von Lauf­ längen-Kodierung in der LZ-Methodik (LZE) ein. Bei herkömm­ lichen LZ2-Datenkompressionen, wird ein Lauf, der eine Folge wiederholten Auftretens desselben Zeichens in den Eingabe­ daten ist, als Serie von Kodes kodiert. Jeder nachfolgende Kode wird auf dem vorhergehenden Kode aufgebaut, gefolgt von einem Kode für den Rest oder den Schwanz des Laufs. Der De­ kompressor empfängt und dekodiert dann jeden dieser Kodes der Reihe nach. Das System sendet eine gekürzte Folge durch Übertragen eines einzelnen Kodes (der den größten Teil des Zeichenlaufs darstellt) und den vorangehenden Kode und den Schwanzkode.
Das vorangegangene LZE-Verfahren wird allein oder in Kombi­ nation mit anderen Verfahren verwendet, um ein Kompressions­ schema zu bilden, das besonders bei der Übertragung von Netzwerkpaketen nützlich ist. Bei dem kombinierten System wird das LZE-Kompressionsschema auf einen Eingabedatenstrom parallel mit einem oder mehreren anderen Datenkompressions­ verfahren angewendet. Ein Kodierungsschema für variable Längen nach Huffman oder ein unkomprimiertes Übertragungs­ schema zum Beispiel. Die Ausgabe des Verfahrens, das das beste Kompressionsverhältnis schafft, wird dann für die Datenübertragung und -speicherung verwendet. Eine hohe Kompressionsrate wird für echte Netzwerkpaketdaten erreicht, die Pakete mit einer breiten Verteilung der Längen ent­ halten. Das hohe Kompressionsverhältnis wird über den ge­ samten Bereich der Paketlängen, sogar bei Daten, die einen großen Anteil an kurzen Paketen haben, einheitlich beibe­ halten.
Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend unter Bezugnahme auf die beiliegenden Zeichnungen näher erläutert. Es zeigen:
Fig. 1 ein verallgemeinertes Blockdiagramm eines Kompres­ sions-/Dekompressions-Systems, bei dem die Verbes­ serungen der vorliegenden Erfindung ausgeführt sind;
Fig. 2 ein Diagramm, das die grundsätzlichen Prinzipien der LZ-Kompression darstellt;
Fig. 3 ein Diagramm, das die Übertragung von neuen Zeichen bei einer herkömmlichen LZ-Kompression mit einem anfänglich leeren Wörterbuch darstellt;
Fig. 4 ein Diagramm, das die Übertragung eines neuen Zeichens mit einer verbesserten LZ-Kompression unter Verwendung einer Zwischenwörterbuchinitiali­ sierung gemäß der vorliegenden Erfindung zeigt;
Fig. 5 ein Flußdiagramm des grundsätzlichen LZE-Zwischen­ initialisierungsverfahrens;
Fig. 6 ein Flußdiagramm des Kodierungsunterverfahrens für ein "neues Zeichen" aus Fig. 5;
Fig. 7 ein funktionsmäßiges Blockdiagramm der Schaltung zur Ausführung des Kodierungsunterverfahrens aus Fig. 6 in dem Kompressions-Untersystem aus Fig. 1;
Fig. 8 ein Flußdiagramm eines Dekodierungsunterverfahrens für ein "neues Zeichen" zur Dekodierung von Kodes, die durch das Unterverfahren aus Fig. 6 erzeugt wurden;
Fig. 9 ein funktionsmäßiges Blockdiagramm einer Schaltung zur Ausführung des Dekodierunterverfahrens aus Fig. 8 in dem Dekompressionsuntersystem aus Fig. 1;
Fig. 10 eine Tabelle, die die Kompressionsergebnisse für verschiedene Initialisierungsschemata gemäß der vorliegenden Erfindung zeigt;
Fig. 11 ein Blockdiagramm eines herkömmlichen Datenkompres­ sionssystems;
Fig. 12 ein Blockdiagramm einer Schaltung für die Ausfüh­ rung eines verbesserten Lempel-Ziv Lauflängen- Kodierungsschemas in dem Kompressions-Untersystem, das in Fig. 1 gezeigt ist;
Fig. 13 ein Flußdiagramm, das ein Verfahren zur Ausführung eines verbesserten Lempel-Ziv Lauflängen-Kodie­ rungsverfahrens gemäß der vorliegenden Erfindung zeigt;
Fig. 14 ein Blockdiagramm eines herkömmlichen Datendekom­ pressionssystems;
Fig. 15 ein Blockdiagramm einer Schaltung zur Ausführung einer verbesserten Lempel-Ziv Lauflängen-Dekodie­ rung in dem Dekompressions-Untersystem aus Fig. 1 gemäß der vorliegenden Erfindung;
Fig. 16 ein Flußdiagramm des verbesserten Lempel-Ziv Lauf­ längen-Dekodierungsverfahrens gemäß der vor­ liegenden Erfindung;
Fig. 17A und 17B eine graphische Darstellung des Verfahrens zum Durchführen einer Zwischeninitialisierung und einer Lauflängen-Kodierung;
Fig. 18A eine Tabelle, die optimale Huffmann-kodierte Zuord­ nungen zeigt;
Fig. 18B eine Darstellung der Kompressionsverhältnisse für Huffmann-kodierte Daten;
Fig. 19 eine Tabelle, die die Verteilungswahrscheinlich­ keiten für verschiedene Bit-Längen zeigt;
Fig. 20 ein Blockdiagramm eines parallelen "der Beste ge­ winnt" Kompressionssystems gemäß der Erfindung;
Fig. 21 eine Tabelle, die die Kompressionsergebnisse für verschiedene Netzwerkpaketdaten zeigt;
Fig. 22 ein Graph des Kompressionsverhältnisses gegenüber der Zeit, unter Anwendung des Systems aus Fig. 20 auf echte Netzwerkpaketkarten;
Fig. 23 ein Graph, der die Verteilung der Daten in Fig. 22 bezüglich der Paketlängen zeigt; und
Fig. 24 ein Graph des Kompressionsverhältnisses der Daten in Fig. 22 als Funktion der Paketlänge.
Die allgemeine Anordnung und der allgemeine Betrieb des Lempel-Ziv Kompressions-/Dekompressions-Systems sind gut be­ kannt und werden deshalb lediglich in allgemeiner Form mit Bezug auf Fig. 1 und 2 beschrieben. Das System 22 in Fig. 1 schließt ein Kompressions-Untersystem 24 und ein Dekompres­ sions-Untersystem 26 ein, die durch einen digitalen Daten­ kommunikationskanal 28 (oder Speicher) verbunden sind. In der Praxis werden beide Anschlüsse eines Systems sowohl Kom­ pressions- als auch Dekompressions-Untersysteme ein­ schließen, und die Hardware ist typischerweise entworfen, um austauschbar wirksam zu sein, um Daten zu komprimieren/sen­ den oder zu empfangen/dekomprimieren.
Jedes Untersystem schließt, zusätzlich zu bekannten Kommuni­ kations-(oder Speicher)Schaltungen (nicht gezeigt), eine Kompressionsmaschine 30, die den grundsätzlichen Lempel-Ziv Kompressionsalgorithmus ausführt, einen Speicher 32, der ein oder mehrere Wörterbücher ausführt, in denen Dateneinträge, die die Zeichenfolgendaten kodieren, gespeichert sind, und Unterstützungs-Schaltungen, die die Verbesserungen aus­ führen, die im folgenden beschrieben werden, ein. Die Unter­ stützungs-Schaltungen schließen den Zwischeninitiali­ sierungskodierer 34 und den entsprechenden Dekodierer 36, die in Fig. 7 und 9 genauer beschrieben werden, und die Ko­ dierer-Lauf-Verbesserungsmaschine 38 und die entsprechende Dekodierer-Lauf-Verbesserungsmaschine 40 ein, die in Fig. 12 und 15 gezeigt sind.
Fig. 2 stellt den Lempel-Ziv Algorithmus (LZ-Algorithmus) für die verlustfreie Kompression von digitalen Daten (d. h. die ursprünglichen Daten sind aus ihren komprimierten Ab­ bildungen vollständig wiederherstellbar) dar. Das LZ-Ver­ fahren paßt ein derzeitiges Muster in einem Eingabedatenstrom auf Muster, die vorher auftreten, an. Ein derzeitiges Muster 42 (ABC) im Eingabestrom 46 ist z. B. das gleiche wie ein Muster 44 (ABC), das vorher übertragen wurde. Das Kompressions-Untersystem 24 (Fig. 1) ersetzt die übereinstimmenden Eingabesymbole (ABC) durch eine Be­ schreibung (ein Kodewort) der maximalen Übereinstimmung. Das Dekompressions-Untersystem 26 (Fig. 1) kann dann die ur­ sprünglichen Symbole aus dem übereinstimmenden Kodewort und aus vorherigen dekomprimierten Datensegmenten wiederher­ stellen. Bei redundanten Datenquellen tendieren die Be­ schreibungen oder die Kodewörter, die eine Übereinstimmung mehrerer Zeichen beschreiben, dazu, kürzer zu sein, als die übereinstimmenden Muster, folglich wird eine Datenkompres­ sion erreicht.
Das Hauptmerkmal des LZ2 ist eine stufenartige syntaktische Analyse. Die Eingabedatenfolge wird in Ausdrücken analy­ siert, die in einem Wörterbuch gesammelt werden. Eine maxi­ male Übereinstimmung des derzeitigen Eingabemusters wird lediglich gegenüber den Ausdrücken in dem Wörterbuch, wie oben beschrieben, durchgeführt. Nach jeder Übereinstimmung wird ein neuer Ausdruck durch Erweiterung des übereinstim­ menden Ausdrucks mit dem Eingabesymbol, das die Übereinstim­ mung "bricht", gebildet. Diese und andere Varianten des Algorithmus sind asymptotisch optimal (d. h. sie erreichen in ihren Grenzen das beste Kompressionsverhältnis, das theo­ retisch möglich ist). Der Algorithmus ist ebenfalls sehr anpassungsfähig, wobei die statischen Charakteristika der Eingabedaten "während des Ablaufs" gelernt werden. Beim LZ2 wird dieses "Wissen" in dem Wörterbuch gespeichert, dessen Einträge die Eingabedatenfolgen syntaktisch analysieren.
Die Kompressorausführung beim LZ2 kann einfach wie folgt beschrieben werden:
  • 1. Ein Wörterbuch wird mit allen Einzel-Buchstabenwörtern, die in dem Eingabealphabet existieren (z. B. die 256 1-Bit-Folgen) initialisiert und ein eigenes Index­ kodewort wird dann jedem Einzel-Buchstabenwort zugeord­ net.
  • 2. Ein derzeitiger Ausdruck wird mit dem ersten Zeichen aus einem Eingabedatenstrom initialisiert.
  • 3. Zeichen aus dem Eingabedatenstrom werden kontinuierlich gelesen, wobei der derzeitige Ausdruck erweitert wird, solange ein übereinstimmender Ausdruck in dem Wörterbuch existiert.
  • 4. Das Verfahren wird angehalten, wenn der derzeitige Aus­ druck in der Form Wa ist, wobei "a" das letzte Zeichen ist, das aus dem Eingabedatenstrom gelesen wird, W ist ein Ausdruck in dem Wörterbuch ist, während Wa nicht mit einem Eintrag in dem Ausdruckswörterbuch übereinstimmt.
  • 5. Das Kodewort für W wird ausgegeben.
  • 6. Wa wird zu dem Wörterbuch hinzugefügt, wobei ihm das nächste vorhandene Kodewort zugeordnet wird.
  • 7. Der derzeitige Ausdruck wird auf "a" gesetzt und das Verfahren an den Schritt 3 zurückgegeben.
Diese Ausführung ist bekannt als LZW.
Bei dem Dekompressions-Untersystem 26 in Fig. 1 wird ein ähnliches Ausdruckswörterbuch aufgebaut. Der Dekompressor wird, wie im Schritt 1 oben, zuerst initialisiert und neue Ausdrücke werden zum Wörterbuch dann hinzugefügt, wenn die Daten dekomprimiert werden. Wenn der Dekompressor einen Kode für einen Ausdruck W, gefolgt von einem Kode für einen Aus­ druck, der mit dem Zeichen "a" beginnt, empfängt, addiert er den Ausdruck Wa zu dem Wörterbuch und ordnet ihm den nächs­ ten erhältlichen Kode zu. Folglich kann der Dekompressor das Wörterbuch, das durch den Kompressor aufgebaut wurde, rekon­ struieren, ohne daß letzterer das Wörterbuch zusammen mit den komprimierten Daten senden muß.
Bei einer praktischen Ausführung ist der Speicherplatz, der für den Kodierer vorhanden ist (und auf ähnliche Weise für den Dekodierer), beschränkt. Die Anzahl der Ausdrücke in dem Wörterbuch ist deshalb ebenfalls beschränkt und die Ausgabe­ kodes haben eine beschränkte Länge. Typischerweise liegt die obere Grenze des Kodes zwischen 12 und 16 Bit. Wenn die Ein­ gabedatenfolge ausreichend lang ist, wird sich das Wörter­ buch schließlich "auffüllen". Zu diesem Zeitpunkt wird das LZW-Wörterbuch entweder "eingefroren" oder "reinitial­ isiert".
Stufe 1 in dem oben beschriebenen LZW-Kompressions-Verfahren ruft die Initialisierung des Wörterbuchs mit allen Einzel- Zeichen-Folgen auf. Es bezeichne m die Größe, in Bits, der Einzel-Zeichen der Eingabedatenfolge (z. B. m = 8, oder 1 Byte, in dem herkömmlichsten Fall). Den anfänglichen Aus­ drücken in dem Wörterbuch werden die Kodes c₀, c₀ + 1, c₀ + 2, . . . ., c₀ + (2m -1) für eine anfängliche nicht-negative Zahl c₀ zugeordnet. Dies bedeutet, daß der erste Kode, der durch den Kodierer gesendet wird (d. h. der erste Kode, der eine Mehr-Zeichen-Folge darstellt) mindestens m+1 Bits lang sein muß. Bei praktischen Ausführungen ist es üblich, zu Be­ ginn des Kompressionsverfahrens Ausgabekodes mit einer Länge von m+1 zu verwenden und nachfolgend die Länge der Ausgabe­ kodes jedesmal, wenn die Anzahl der Einträge in dem Wörter­ buch die nächste Potenz von 2 erreicht, um 1 Bit zu erhöhen. Daher variiert die Länge der Ausgabekodes zwischen m+1 und b, wobei 2b die maximale Größe des Wörterbuchs ist und b < = m+1 ist. Der Einfachheit halber wird angenommen, daß die maximale Wörterbuchgröße eine Potenz von 2 ist. Dies ist bei den meisten praktischen Ausführungen der Fall, obwohl es keine notwendige Anforderung ist. Die Länge der Ausgabekodes hat offensichtlich einen direkten Einfluß auf das Kompres­ sionsverhältnis. Im besonderen gilt, je kürzer die Ausgabe­ kodes sind, desto besser ist das Kompressionsverhältnis.
Die Initialisierung beim obigen Schritt 1 arbeitet bei vielen Anwendungen gut, ist jedoch bei Anwendungen, bei denen die Alphabetgröße groß ist, ineffizient. Dieses Initialisierungsverfahren ist ebenfalls ineffizient, wenn lediglich erwartet wird, daß eine unbekannte Teilmenge des Eingabealphabets in den zu komprimierenden Daten auftreten. Bei einer Anwendung, bei der z. B. das "natürliche" Alphabet für die Eingabedaten aus 16-Bit Symbolen besteht, hat das anfängliche Wörterbuch eine Größe von 65,536 Einträgen und die minimale Länge eines Ausgabekodes beträgt 17 Bit. Bei einer Anwendung, bei der der Block von zu komprimierenden Daten relativ zu der Alphabetgröße klein ist, ist es oft unnötig, jede mögliche Einzel-Zeichen-Folge zu kodieren.
Um diese Probleme zu überwinden, verwenden einige Variatio­ nen des LZ-Algorithmus ein anfängliches leeres Wörterbuch. Wenn ein neues Eingabezeichen angetroffen wird, gibt der Kompressor einen Spezial-Kode aus, gefolgt von einer Kopie des neuen Zeichens. Bei diesem Verfahren verfolgt der De­ kompressor die Teilmenge des Eingabealphabets, die tatsäch­ lich verwendet wird und die Dekodierung erfolgt wie gewöhn­ lich. Das Hauptproblem bei diesem Verfahren ist der hohe Aufwand beim Kodieren neuer Zeichen. Für kurze Dateien ge­ genüber langen Alphabeten wird dieser Gesamtaufwand un­ akzeptabel hoch. In Fig. 3 sind z. B. sowohl ein Zeichenkode 46 als auch ein Spezial-Kode 48 erforderlich, um der Dekom­ pressionsmaschine 30 (Fig. 1) anzuzeigen, daß ein neues Zeichen aufgetreten ist. Wird eine Zeichenlänge von 8 Bit und eine derzeitige Kodelänge von 12 Bit angenommen, dann muß eine Gesamtlänge von 20 Bit an den Dekodierer übertragen werden, um jedes neue Zeichen zu identifizieren.
Zwischeninitialisierung des Wörterbuchs
Um die oben beschriebenen Probleme bezüglich der Bitlänge und dem Speicher auszuräumen, werden 2k unterschiedliche Spezial-Kodes c₀, c₀+1, c₀+2, . . . ., c₀+(2k-1) verwendet, wo­ bei 0 < = k < = m. Dies nimmt an, daß die Zahlen 0, 1, . . ., c₀-1 für andere Steuerungskodes verwendet werden. Auf diese Art trägt ein Spezial-Kode k-Bits an Informationen über das neue Zeichen und genau m-k zusätzliche Bits sind notwendig, um das neue Zeichen zu identifizieren. Dies ist in Fig. 4 mit k = 5 gezeigt. Die derzeitige Kodelänge für einen Spe­ zial-Kode 48 beträgt 12 Bit und ein Teil-Zeichenkode 49 hat eine Länge von 3 Bit (d. h. m-k = 8-5 = 3). Der Aufwand des Übertragens einer neuen Einzel-Zeichen-Folge wird folglich von 20 Bit auf 15 Bit reduziert. Wenn k = 0, reduziert sich das Verfahren auf eine leere Inititalisierung, und wenn k = m ist, arbeitet das System als eine Vollalphabetinitial­ isierung (d. h. jedes Zeichen in dem Alphabet wird durch ein Kodewort dargestellt).
Bezugnehmend auf Fig. 5 beginnt der Betrieb gemäß der Er­ findung mit einem anfänglich leeren Wörterbuch und läuft im wesentlichen in Übereinstimmung mit dem LZ-Algorithmus, der wie im folgenden beschrieben modifiziert ist, ab. Der Be­ trieb wird bei Block 50 durch Setzen des nächsten möglichen Kodes NAC auf den Wert c₀+2k initialisiert. Im nächsten Schritt, Block 52, wird eine Null-Folge als derzeitiger Aus­ druck W eingestellt. Dann wird bei Block 54 das nächste Eingabezeichen als "a" eingegeben. Der Schritt in Block 56 fragt ab, ob die Folge Wa bereits in dem Wörterbuch ge­ speichert ist. Wenn dies der Fall ist, setzt Block 58 W = Wa und kehrt zum Block 54 zurück. Dieses Verfahren wiederholt sich so lange eine Übereinstimmung in dem Wörterbuch, das in der Lempel-Ziv Methodik herkömmlich ist, gefunden wird.
Wenn Wa nicht in dem Wörterbuch gefunden wird, dann fragt Block 60 ab, ob W eine Null-Folge ist. Wenn sie dies nicht ist, läuft die Kompression durch Blöcke 62, 66 und 68 wie bei der herkömmlichen LZW ab. Block 62 gibt den Kode für W aus und Block 66 speichert die kodierte Folge Wa als einen Dateneintrag in dem Wörterbuch an dem Adreßort NAC. Block 68 erhöht NAC um 1 und "a" dient als nächster Wert von W. Das Verfahren geht dann zurück zu Block 54.
Wenn der Entscheidungsblock 60 feststellt, daß W eine Null- Folge ist, wird angenommen, daß das Eingabezeichen "a" ein neues Zeichen ist. Der Kompressor geht dann zu dem Ver­ fahrensblock 64 "neues Zeichen", der ein Unterverfahren ist, der im folgenden mit Bezug auf Fig. 6 beschrieben wird. Beim Zurückkehren aus dem Verfahren "neues Zeichen" wird das Ein­ gabezeichen "a" in das Wörterbuch an dem Adreßort NAC im Block 65 eingetragen. NAC wird dann im Block 67 erhöht und das Verfahren geht zu Block 52 zurück.
Bezugnehmend auf Fig. 6 ist es im Unterverfahren 64 (siehe Fig. 5) der erste Schritt, der in Fig. 70 gezeigt ist, das neue Zeichen a, das aus m Bits besteht, in zwei Teile, a₁, der aus k Bits besteht, und a₂, der aus m-k Bits besteht, zu teilen. Dann setzt der Block 72 c₁ auf den Wert c₀+a₁. Als nächstes gibt Block 74 c₁ unter Verwendung von b Bits und Block 76 gibt a₂ unter Verwendung von m-k Bits aus. Hierbei ist b die Anzahl von Bits, die derzeitig für die Ausgabeko­ dewörter verwendet werden. Dann geht das Unterverfahren zu­ rück zu Block 65 in Fig. 5.
Fig. 7 zeigt eine Schaltung 34 (siehe Fig. 1) für die Hard­ ware-Ausführung des Unterverfahrens aus Fig. 6. Das Zeichen a wird an ein m Bit-Register 80 eingegeben, in dem das Zei­ chen in zwei Teilen, a₁, das aus k Bits besteht, und a₂, das aus m-k Bits besteht, gespeichert wird. Der Wert c₀ wird in einem b-Bit-Register 82 gespeichert und wird an den Addierer 84 zusammen mit a₁ ausgegeben, um die b-Bit-Summe c₁ = c₀+a₁ zu bilden. Diese Summe wird in das erste b-Bit des Registers 86 abgelegt und mit a₂ in den unteren m-k Bits des Registers 86 verkettet. Die resultierende Folge von b+m-k Bits wird in einen Ausgabepuffer 88 zur Einfügung in den komprimierten Strom (Übertragung an das Dekompressions-System) geschoben.
Fig. 8 zeigt das Dekompressionsverfahren 90, das bei Block 91 durch Lesen des Spezial-Kodes c₁ aus b-Bits beginnt und dann bei Block 92 abfragt, ob der Kode c₁ kleiner als c₀ ist. Wenn dies der Fall ist, behandelt Block 93 den Kode c₁ als einen Verarbeitungs-Steuerungskode und kehrt zum Block 91 zurück. Ansonsten fährt das Verfahren fort, bei Block 94 abzufragen, ob der Kode c₁ kleiner ist als c₀+2k. Wenn dies nicht der Fall ist, geht die Routine zu Block 96, um den Kode c₁ als einen regulären LZ-Kode zu verarbeiten und kehrt dann zu Block 91 zurück. Ansonsten wird der Kode c₁ als ein Kode für ein neues Zeichen angesehen und die Routine bewegt sich zu Block 98, wo der Spezial-Kode c₁ und der zugeordnete Teil-Zeichenkode a₂ als neues Zeichen verarbeitet werden (das Paar c₁, a₂ wurde durch den Kompressor in der Schaltung aus Fig. 7 ausgegeben).
Fig. 9 zeigt die Schaltung 36 (Fig. 1), die Hardware-mäßig das Unterverfahren 98 aus Fig. 8 ausführt. Der Spezial-Kode c₁ und der Teil-Zeichenkode a₂ werden von einem Eingabepuf­ fer (nicht gezeigt) in den Registern 102 bzw. 104 aufgenom­ men. Der Inhalt eines festen Wertes c₀ im Register 100 wird von dem Inhalt des Registers 102 im Subtrahierer 106 abge­ zogen. Das b Bit-Ergebnis ist im Register 108 enthalten und die bedeutendsten b-k Bits des Registers 108 werden ge­ löscht. Die am wenigsten bedeutenden k-Bits des Registers 108 werden in einem Feld a₁ des Registers 110 gespeichert und mit dem Teil-Zeichenkode a₂ aus Register 104 verkettet. Die Inhalte des Registers 110 werden als Einzel-Zeichen- Folge in das Wörterbuch im Block 112 eingetragen und in einen Ausgabepuffer 114 geladen.
Die Anzahl der Spezial-Kodes (oder, äquivalent, der Para­ meter k) kann auf die Anwendung von Hand abgestimmt werden. Experimentelle Ergebnisse zeigen, daß für einen breiten Be­ reich von Eingabedateien die beste Kompression mit Werten von k, die nahe bei m/2 liegen, erreicht wird. Insbesondere wurden die Werte k=5 für m=8 und k=7 für m=16 experimentell als optimal festgestellt. Es wird darauf hingewiesen, daß die anfängliche Kodelänge für Mehr-Zeichen-Folgen lediglich k+1 Bits anstelle der typischen m+1 Bits sein wird. Das Ver­ fahren läßt deshalb ein Wörterbuch zu, das kleiner als die Alphabetgröße ist, und läßt Kodewörter zu, die kürzer sind, als die Eingabezeichen.
Folglich ist die Kompression mit sehr kleinen Wörterbüchern, die sehr wenig Speicher erfordern, möglich. Dieses Verfahren ist besonders für Anwendungen attraktiv, bei denen die Ein­ gabedatenblöcke kurz sind, und jeder Block unabhängig kom­ primiert werden muß. Auf der anderen Seite läßt das Ver­ fahren die Kompression von Quellen mit großen Alphabetgrößen (z. B. 16-Bit-Symbole) zu, während eine moderate Größe für die Wörterbücher beibehalten wird.
Angenommen m=8, k=5 und c₀=3, und daß das neue Zeichen, das übertragen werden soll, binär durch 01101010 dargestellt ist. Die ersten k Bits des Zeichens sind 01101, was die Zahl 13 darstellt. Daher ist der Spezial-Kode, der übertragen wird, c₀ + 13 = 16. Dieser Kode wird unter Verwendung der derzeitigen Kodelänge übertragen. Zusätzlich werden die m-k = 3 übrigbleibenden Bits, 010, "wie sie sind" dem Spezial- Kode folgend als Teil-Zeichenkode a₂ übertragen. Angenommen, die derzeitige Kodelänge beträgt 12 Bit, dann ist die resul­ tierende binäre Ausgabe für den Spezial-Kode [000000010000] und für den Zeichenkode [010].
Fig. 10 zeigt die Kompressionsergebnisse für verschiedene Zeichen und Spezial-Kode-Bitlängen. Die Eingabedatei für alle Kompressionsexperimente wurde durch Verkettung (unter Verwendung des UNIX-Befehls "tar") einer Auswahl von Computerdaten, die ASCII-Datendateien, binär ausführbare, C-Programmquellen- und Textdateien einschließt, erhalten. Die gesamte Größe der Eingabedatei betrug 6,594,560 Bytes. Fünf Kompressionsverfahren wurden getestet, wie in den nume­ rierten Spalten 1-5 angezeigt ist. Die numerierte Spalte 1 zeigt das Ergebnis einer herkömmlichen LZW-Ausführung mit m=8 und einer Vollalphabet-Wörterbuchinitialisierung; die numerierte Spalte 2 zeigt die Ergebnisse einer leeren Wör­ terbuchinitialisierung, mit m=8 und k=0; die numerierte Spalte 3 zeigt die Ergebnisse für eine Zwischeninitiali­ sierung des Wörterbuchs, mit m=8 und k=5; die numerierte Spalte 4 zeigt die Ergebnisse einer leeren Wörterbuchinitia­ lisierung, mit m=16 und k=0; und die numerierte Spalte 5 zeigt die Ergebnisse einer Zwischeninitialisierung des Wör­ terbuchs, mit m=16 und k=7.
Für jedes Schema wurden verschiedene Wörterbuchgrößen ver­ sucht, mit einer maximalen Ausgabekodelänge, die zwischen 6 und 16 Bits variiert, wie in der linkesten Spalte angezeigt. Das Kompressionsverhältnis (KV), das für jedes Schema ge­ geben ist, ist unter Verwendung der folgenden Beziehung ge­ messen worden;
KV = (komprimierte Dateigröße)/(ursprüngliche Dateigröße).
Deshalb zeigen niedrige KV-Zahlen ein besseres Kompressions­ verhalten an. Es ist aus Fig. 10 zu erkennen, daß Schemata mit zwischeninitialisierten Wörterbüchern eine bedeutende Kompression erzeugen, sogar wenn die Wörterbücher sehr klein sind (z. B. b < m) und eine vollständige Initialisierung un­ möglich ist. Dies ist bei Anwendungen, bei denen der Spei­ cher knapp ist, sehr nützlich. Zwischeninitialisierungen übertreffen ebenfalls vollständige Initialisierungen, wenn b etwas größer ist als m und die zwei Schemata sind bei höher­ en Werten von b konkurrenzfähig. Die Zwischeninitialisierung mit k < 0 übertrifft fast immer die leere Initialisierung.
Durch Verwendung von 16-Bit-Eingabesymbolen ist es möglich, gute Kompressionsverhältnisse mit Wörterbüchern mit moder­ ater Größe zu erreichen. Der Hauptvorteil der 16-Bit- Schemata ist es, daß sie den Durchsatz eines Kompressors verdoppeln können (durch Verarbeiten von 16-Bits bei jedem Kompressionsschritt und nicht von 8 Bits), mit lediglich einem geringen Anstieg der Speicheranforderungen. Typischer­ weise besteht ein Eintrag in einem LZW-Wörterbuch aus einem Zeiger auf einen vorhergehenden Eintrag (oder den entspre­ chenden Kode), und aus einem Zeichen. Folglich wird ein 16- Bit-Schema typischerweise ein weiteres Byte pro Wörterbuch­ eintrag erfordern, verglichen zu einem 8-Bit-Schema, mit derselben Anzahl von Wörterbucheinträgen. Wenn 16-Bit die natürliche Zeichengröße ist (z. B. bestimmte medizinische Ab­ bildungsanwendungen), wird zusätzlich die beste Kompression erreicht, wenn diese Zeichengröße beibehalten wird.
Das Initialisierungsschema, das oben beschrieben wurde, ist in Anwendungen vorteilhaft, bei denen kurze Blöcke von Daten unabhängig komprimiert werden (d. h., ohne Teilen der Wörter­ buchinformationen von einem Block mit dem nächsten). Ein Beispiel einer solchen Anwendung ist die Kompression von Datenpaketen in einem lokalen Netzwerk (LAN). In den Netz­ werkprotokollen, die derzeit mit typischen LANs verwendet werden, haben die Pakete eine Länge von 60 Byte bis weniger als 2048 Byte, und die kürzeren Pakete stellen einen höheren Prozentsatz des Verkehrs dar. Dies sind ungefähre Zahlen. Die genaue Länge eines Paketes hängt davon ab, wieviel des "Umschlags" des Paketes in Rechnung genommen wird. Dies hängt seinerseits von der Schicht des Protokolls ab, auf der die Pakete verarbeitet werden.
Lauf-Kodierungsverbesserung
Eines der einfachsten Verfahren der verlustfreien Daten­ kompression ist die Lauflängen-Kodierung (RLE = Run Length Encoding). Ein Lauf ist eine Folge von wiederholtem Auf­ treten desselben Zeichens in der Eingabe (z. B. a₀, a₁, a₃ . . . . an-1), wobei n die Anzahl des wiederholten Auftretens des­ selben Zeichens "a" in der Folge ist. Die Folge a₀, a₁, a₃ . . . . an-1 stellt n Kopien desselben Zeichens "a" dar. Bei der RLE wird ein solcher Lauf durch Senden des Zeichens gefolgt durch die Lauflänge n kodiert. Für große Werte von n beträgt das Kompressionsverhältnis für den Lauf O (log(n)/n). LZ2- Schemata arbeiten bei der Kompression von langen Läufen ebenfalls gut. Angenommen n ist groß, dann würde der obige Lauf in einem LZ2-Schema als eine Sequenz von Kodes A₀, A₁, A₁+1, A₁+2, A₁+3, . . . , A₁+(k-1), A₂ kodiert werden. A₀ ist der Kode für die längste Folge von a′s in dem Wörterbuch, A₁ ist der nächste vorhandene Kode, bevor der derzeitige Lauf gelesen wird, A₂ ist ein Kode, der im folgenden beschrieben wird, und k ist eine nicht-negative ganze Zahl.
Wenn die Länge der Folge der a′s, die durch A₀ dargestellt ist, L₀ ist, dann stellt A₁+(i-1) eine Folge von L₀ + i a′s dar, wobei 1 < = i < = k. A₂ stellt den restlichen "Schwanz" von L₁ a′s dar, 0 < = L₁ < (L₀+k), möglicherweise gefolgt durch ein­ ige andere Zeichen (wenn L₁ = 0, wird der Kode A₂ nicht als Teil des kodierten Laufs benötigt). Die Länge des Laufs ist n = L₀ + (L₀+1) + (L₀+2) + . . . . + (L₀+k) + L₁ = L₀ (k+1) + k (k+1)/2+L₁. Daraus folgt, daß für große n und ein ausreich­ end großes Wörterbuch das grundsätzliche LZ2-Schema ein Kom­ pressionsverhältnis von 0 (√ Log(n)/n) erreicht. Deshalb ist, obwohl beide Schemata ein Null-Kompressionsverhältnis asymptotisch erreichen, für begrenzte Eingänge die RLE bes­ ser geeignet, um lange Läufe zu komprimieren.
Die Effizienz der LZ2 zur Kodierung langer Läufe kann ba­ sierend auf den folgenden Beobachtungen verbessert werden. Wenn der LZ2-Dekompressor jeden Kode in der Folge A₁, A₁+1, A₁+2, A₁+3, . . . ., A₁+(k-1) liest, ist der gelesene Kode der größtmögliche zu diesem bestimmten Zeitpunkt (d. h., der ge­ lesene Kode ist derjenige, der gerade erzeugt wurde). Daher muß der Kodierer lediglich die Folge A₀, A₁+(k-1), A₂ für den Lauf von n "a"′2 senden. Wenn der Dekodierer den Kode A₁+(k-1) empfängt, erfaßt er, daß dieser Wert den derzeitig größten möglichen Kode A₁ überschreitet, "lernt", daß ein Lauf kodiert ist und kann ohne weiteres den Wert k und die "fehlende Folge" A₁, A₁+1, A₁+2, . . . ., A₁+(k-2) erneut auf­ bauen. Die Anzahl der übertragenen Bits beträgt nun 0 (log(k)) = 0 (log(n)), und das Kompressionsverhältnis bei dem verbesserten LZ2 wird 0(log(n)/n), wie beim RLE-Schema.
Fig. 11 ist ein Blockdiagramm, das einen herkömmlichen LZ- Kodierer ohne Lauf-Verbesserung zeigt. Eine Eingabemaschine 116 liest Zeichen aus dem Eingabedatenstrom (nicht gezeigt) und führt die Eingabezeichen an eine Kompressionsmaschine 118 (siehe Block 30 in Fig. 1). Die Kompressionsmaschine nimmt die Eingabezeichen und baut ein Wörterbuch auf und be­ hält dieses bei. Das Wörterbuch enthält z. B. Dateneinträge, die eindeutige Eingabezeichenfolgen darstellen. Die Kompres­ sionsmaschine 118 komprimiert den Eingabedatenstrom und gibt die komprimierten Eingabedaten als Kodewörter an die Aus­ gabemaschine 120 ab. Die Ausgabemaschine 120 speichert dann entweder die komprimierte Datenfolge für eine spätere De­ kompression oder überträgt die dekomprimierte Folge über einen Kommunikationskanal 28 (Fig. 1) mit einer reduzierten Bandbreite. Die komprimierten Daten werden an dem gegenüber­ liegenden Ende des Kommunikationskanals 28 dekomprimiert, wie im weiteren in Fig. 15 beschrieben wird. Die Kompres­ sionsmaschine 118 behält typischerweise einen Adreßzeiger 122 bei, der den nächsten verfügbaren Kode (NAC) identi­ fiziert, an dem die nächste eindeutige Zeichenfolge als ein Dateneintrag in dem Kompressions-/Dekompressionswörterbuch gespeichert ist. Der NAC stellt z. B. den nächsten Adreßort dar, der als ein Kodewort für die nächste eindeutige Ein­ gabezeichenfolge verwendet wird.
Fig. 12 ist ein genaues Blockdiagramm, das eine Kodierer- Lauf-Verbesserungsmaschine gemäß der Erfindung darstellt, wie in Fig. 1 gezeigt. Eine Eingabemaschine 124 liest die Zeichen aus dem Eingabedatenstrom. Eine Kompressionsmaschine 126 liest die Eingabezeichen, behält das Wörterbuch bei und erzeugt Zeichenkodes, wie in Fig. 11 oben beschrieben. Die kodierten Eingabedaten werden dann an eine Kodierer-Lauf- Verbesserungsmaschine 128, die eine zweite Ebene der Daten­ kompression schafft, abgegeben. Die komprimierten Kodes der Lauf-Verbesserungsmaschine 128 werden an eine Ausgabe­ maschine 130 abgegeben und in einer Art, die der Ausgabe­ maschine 120 in Fig. 11 ähnlich ist, verarbeitet.
Die Lauf-Verbesserungsmaschine 128 enthält einen getrennten Adreßzeiger 134 (RUNCODE), der in Koordination mit dem NAC- Adreßzeiger 132, der bei der Kompressionsmaschine 126 ver­ wendet wird, verwendet wird. Nachdem eine Zeichenfolge durch die Kompressionsmaschine 126 kodiert ist, fängt die Lauf- Verbesserungsmaschine 128 einen Ausgabekode ab und stellt fest, ob er Teil eines Zeichen-Laufs ist. Wenn festgestellt wird, daß der Kode ein Teil eines Laufs ist, verhindert die Lauf-Verbesserungsmaschine 128, daß die Ausgabemaschine 130 etwas von diesen Kodes, die die Zeichen aus dem Lauf ent­ halten, ausgibt. Die Lauf-Verbesserungsmaschine 128 erzeugt dann ein Lauf-Kodewort, das Informationen erhält, die die unübertragenen Kodes des Laufs identifizieren. Das Lauf- Kodewort wird dann ausgegeben, wenn das Ende des Laufs er­ faßt ist.
Fig. 13 ist ein detailliertes Flußdiagramm, das das Ver­ fahren darstellt, das durch die Lauf-Verbesserungsmaschine 128, die in Fig. 12 gezeigt ist, durchgeführt wird. Ein Kode "C" wird im Block 136 abgefragt, um festzustellen, ob der Kodewert gleich dem letzten Kode ist, der in dem Wörterbuch erzeugt wurde (d. h., NAC-1). Wenn der Kode C gleich NAC-1 ist, ist ein Lauf aufgetreten und der Entscheidungsblock 136 springt zu Block 138, wo der Kodewert "C" in den Adreßzeiger RUNCODE geschrieben wird. Die Lauf-Verbesserungsmaschine de­ aktiviert dann die Ausgabemaschine 130 (Fig. 12), um zu ver­ hindern, daß der Kode C ausgegeben wird. Das Verfahren springt dann für den nächsten Kode, der durch die Kompres­ sionsmaschine erzeugt wird, zurück zu dem Entscheidungsblock 136. Solange die nachfolgenden Kodes Zeichen darstellen, die innerhalb des Laufs enthalten sind (d. h. dieselben Zeichen darstellen), wird das Verfahren wiederholt. RUNCODE wird z. B. ständig auf den letzten Kodewert C zurückgesetzt und die Ausgabemaschine wird daran gehindert, Kodewörter aus­ zugeben. Es wird darauf hingewiesen, daß beim Zurückspringen zu Block 136 der Wert von NAC durch die Kompressionsmaschine erhöht sein wird.
Wenn ein neu abgefangener Kode nicht gleich NAC-1 ist (d. h. nicht gleich dem letzten Kode, der in der Kompressions- /Dekompressionsmaschine erzeugt wurde), ist entweder kein Lauf aufgetreten oder der Lauf wurde beendet. Der Entschei­ dungsblock 136 springt dann zum Entscheidungsblock 142, wo der Wert des Adreßzeigers RUNCODE überprüft wird. Wenn RUN- CODE ein Nullwert ist, dann ist kein vorheriger Lauf aufge­ treten und der Entscheidungsblock 142 springt zum Block 148. Der Block 148 gibt dann den Kode C aus, der derselbe ist wie jegliche andere nicht-laufkodierte Zeichenfolge. Das Ver­ fahren springt dann für den nächsten Kode, der durch die Kompressionsmaschine erzeugt wird, zum Entscheidungsblock 136 zurück. Wenn RUNCODE nicht Null ist, ist vorher ein Lauf aufgetreten und der Entscheidungsblock 142 gibt RUNCODE als nächste Kodeausgabe in Block 144 aus. Das Verfahren springt zum Block 146, wo RUNCODE auf einen Nullwert zurückgesetzt wird und Block 148 gibt dann den Kodewert C (Kodewort) aus, der den Lauf gebrochen hat. Die Lauf-Verbesserungsmaschine springt dann zum Entscheidungsblock 136 zurück, wo das näch­ ste Kodewort von der Kompressionsmaschine abgefangen wird.
Fig. 14 ist ein Blockdiagramm eines herkömmlichen Dekompres­ sionssystems. Eine Dekodierereingabemaschine 150 empfängt eine Folge von komprimierten Zeichenfolgen, die durch Kode­ wörter dargestellt sind und gibt die Kodewörter an eine De­ kompressionsmaschine 152 ab. Die Dekompressionsmaschine 152 nimmt die Kodewörter, baut ein Wörterbuch auf und behält dieses bei, und erzeugt dekodierte Ausgabezeichen. Der nächste vorhandene Adreßzeiger (NAC) 156 wird auf eine Art beibehalten, die ähnlich dem NAC-Zeiger ist, wie er in Fig. 5 beschrieben ist. Eine DekodiererAusgabemaschine 154 steu­ ert die Ausgabe der dekomprimierten Zeichen aus der Dekom­ pressionsmaschine 152.
Fig. 15 ist ein Blockdiagramm einer Lauflängen-Dekodierer­ verbesserung gemäß der Erfindung. Die Dekodierereingabe­ maschine 158 ist dieselbe wie die Dekodierereingabemaschine 150 in Fig. 15. Die Kodewörter von der Eingabemaschine 158 werden in der Dekodierer-Lauf-Verbesserungsmaschine 160 ab­ gefangen, bevor sie in der Dekompressionsmaschine 162 weiter dekomprimiert werden. Die Lauf-Verbesserungsmaschine 160 überprüft jedes Kodewort, um festzustellen, ob es ein Lauf­ kodewort bildet und erzeugt entsprechend einen geänderten Kodestrom. Wenn kein Laufkode existiert, wird das Kodewort an die Dekompressionsmaschine 162 geleitet, wo eine normale Dekompression stattfindet. Die Dekodiererausgabemaschine 164 steuert dann die Ausgabe der dekodierten Zeichen aus der De­ kompressionsmaschine. Die Dekodier-Lauf-Verbesserungs­ maschine 160 enthält einen Adreßzeiger (RUNCODE) 168, der Zugriff auf den Adreßzeiger (NAC) 166 in der Dekompressions­ maschine 162, auf ähnliche Art wie in Fig. 12 gezeigt, hat.
Fig. 16 ist ein detailliertes Datenflußdiagramm, das den Be­ trieb der Dekodierer-Lauflängenmaschine 160 in Fig. 15 zeigt. Ein Kode "C" wird im Block 170 abgefragt, um festzu­ stellen, ob der Kodewert außerhalb der Reihenfolge liegt, was der Dekompressor als nächste erhältliche Kodeadresse er­ wartet. Die Dekompressormaschine erwartet z. B. typischer­ weise, daß der Kode C kleiner als der nächste erhältliche Kode NAC ist. Wenn der Kode C nicht außerhalb der Reihe (d. h. Kode C < NAC) ist, dann sendet der Block 172 den Wert "C" zu der Dekompressionsmaschine zur Verarbeitung. Wenn C außerhalb der Reihenfolge ist (d. h. C · NAC), dann füllt die Dekodierer-Lauf-Verbesserungsmaschine "den Spalt" zwischen dem größten erwarteten Kodewert und dem Kodewert C.
Besonders Block 174 schreibt den Wert NAC in den Adreßzeiger RUNCODE und Block 176 führt RUNCODE der Dekompressions­ maschine als nächstes Kodewort zur Dekompression zu. Der Wert von RUNCODE wird im Block 178 erhöht und der Entschei­ dungsblock 180 stellt fest, ob die Dekodierer-Lauf-Verbesse­ rungsmaschine "den Spalt" zwischen dem Ausgabekode und der erwarteten nächsten möglichen Adresse ausgefüllt hat (d. h. RUNCODE < C). Wenn die Verbesserungsmaschine die Laufde­ kodierung beendet hat, zeigt der Entscheidungsblock 180 an, daß die Laufdekompression beendet ist. Wenn ein weiteres Kodewort benötigt wird, um "den Spalt" zwischen dem Lauf­ kodewort und NAC auszufüllen (d. h., RUNCODE C), springt der Entscheidungsblock 180 zurück zum Block 176 und der Wert des Adreßzeigers RUNCODE wird an die Dekompressionsmaschine gesendet. RUNCODE wird erhöht und das Verfahren wiederholt, bis alle Kodes in dem Lauf an die Dekompressionsmaschine ab­ gegeben wurden.
Fig. 17 ist eine Darstellung, die zeigt, wie das Zwischen­ initialisierungsverfahren und das Lauflängen-Verbesserungs­ verfahren zusammenarbeiten. Ein roher Datenstrom 182 wird in die Datenkompressionsmaschine 30 (Fig. 1) eingegeben und unter Verwendung des Zwischeninitialisierungsverfahrens, das in Fig. 5 dargestellt ist, komprimiert. Jedes Zeichen "a" in dem Eingabedatenstrom 182 wird mit einem Index notiert, um die Identifizierung seines Ortes in dem Datenstrom zu ver­ einfachen. Folglich stellen a₀, a₁, . . . , a₁₁, zwölf Kopien desselben Zeichens "a" dar. Ein Satz von anfänglichen Be­ triebsbedingungen 190 besteht aus einer 8-Bit Einzel-Zei­ chenlänge (m=8), 32 Spezial-Kodes (k=5), einem 12-Bit-Aus­ gabekode mit fester Länge (b=12) und aus einer anfänglichen Startadresse von 1 (c₀=1). Die ASCII-Darstellung von "a" in binärer Schreibweise ist [01100001]. Der nächste mögliche Kode (NAC) wird zuerst zu NAC = c₀+2k=1+32=33 berechnet. Der Speicher 184 zeigt die Dateneinträge des Datenstroms 182 an bestimmten Adreßorten innerhalb des Kompressions-/Dekompres­ sionswörterbuchs.
Das Kompressionsverfahren mit Zwischeninitialisierung liest das erste Eingabezeichen a₀ und sucht nach einer Überein­ stimmung im Speicher 184. Angenommen, daß a₀ das erste Zei­ chen in dem Datenstrom ist, dann tritt keine Übereinstimmung auf. Das Zeichen a₀ wird dann als ein "neues Zeichen" an dem Adreßort NAC (ADDR 33) gespeichert, wie im Speicher 184 dar­ gestellt. Die ersten fünf Bits von a₀ (d. h. binär [01100] = 12) werden mit c₀ summiert und als erstes Kodewort "13" im komprimierten Datenstrom 186 ausgegeben. Der Teil-Kode für die letzten drei Bits von a₀ (d. h. binär [001] = 1) werden dann als nächstes Kodewort 1 ausgegeben. Der Datenstrom 186 zeigt Kodewörter nach dem Kompressionsverfahren mit Zwischeninitialisierung und der Datenstrom 188 zeigt den Datenstrom 186 nach dem Lauf-Verbesserungsverfahren, das in Fig. 13 gezeigt ist.
Das Lauf-Verbesserungsverfahren stellt fest, daß der Spe­ zial-Zeichenkode "13" und der Teil-Zeichenkode "1" nicht gleich NAC-1 sind und übergibt deshalb die zu Kodes dem kom­ primierten Datenstrom 188. Der Adreßzeiger NAC wird dann er­ höht (NAC = 34). Das nächste Eingabezeichen a₁ wird gelesen und es wird nach einem übereinstimmenden Dateneintrag im Speicher 184 gesucht. Nachdem a₀ bereits an dem Adreßort ADDR 33 gespeichert wurde, tritt eine Übereinstimmung auf, und das nächste Eingabezeichen a₂ wird mit a₁ verkettet. Eine weitere Suche wird durchgeführt, wobei nach der Folge "aa" (d. h., a₁, a₂) gesucht wird. Diese Suche schlägt fehl (d. h. es tritt keine Übereinstimmung auf). Nachdem W nicht mehr "0" (d. h., W = Kode(a₁)) ist, wird das Kodewort "33" durch die Kompressionsmaschine 126 (Fig. 12) ausgegeben. Die Lauf-Verbesserungsmaschine 128 (Fig. 12) fängt das Kodewort "33" ab, um festzustellen, ob es gleich NAC-1 (d. h. NAC-1 = 34-1 =33) ist. Das Kodewort "33" ist gleich NAC-1, deshalb wird der Adreßzeiger RUNCODE auf "33" eingestellt und die Ausgabemaschine 130 (Fig. 12) wird deaktiviert, wobei ver­ hindert wird, daß das Kodewort "33" ausgegeben wird. Die Folge "a₁, a₂" wird dann an dem Adreßort NAC (ADDR 34) ge­ speichert und der Adreßspeicher NAC wird erhöht (NAC = 35).
Die nächste Zeichenfolge, die nicht mit einem vorher ge­ speicherten Dateneintrag im Speicher 184 übereinstimmt, ist die Folge [a₃, a₄, a₅]. Der Wörterbucheintrag "aa" (d. h., ADDR 34) wird dann typischerweise durch die Kompressions­ maschine ausgegeben. Die Lauf-Verbesserungsmaschine stellt fest, daß der Ausgabekode gleich NAC-1 (d. h., 35-1) ist. Deshalb wird der Wert des Adreßzeigers RUNCODE mit dem vor­ liegenden Ausgabekodewert (d. h., RUNCODE = 34) ersetzt. Die Lauf-Verbesserungsmaschine deaktiviert dann die Ausgabe­ maschine, um zu verhindern, daß das Kodewort "34" von der Kompressionsmaschine ausgegeben wird. Die Kompressions­ maschine speichert dann die Zeichenfolge [a₃, a₄₁ a₅] an dem Adreßort NAC (ADDR 35) und erhöht NAC (NAC = 36).
Die nächste Zeichenfolge aus dem rohen Datenstrom 182, die nicht mit einem Dateneintrag im Speicher 184 übereinstimmt, ist die Zeichenfolge [a₆, a₇, a₈, a₉]. Das Ausgabekodewort "35" wird dann durch die Kompressionsmaschine ausgegeben. Nachdem das Ausgabekodewort "35" gleich NAC-1 (36-1) ist, wird der Wert des Adreßzeigers RUNCODE auf den Wert 35 ge­ setzt und das Ausgabekodewort "35" wird deaktiviert, um nicht in den komprimierten Datenstrom 188 ausgegeben zu werden. Die Zeichenfolge [a₆, a₇, a₈, a₉] wird dann an dem Adreßort NAC (ADDR 36) gespeichert und der Adreßzeiger NAC wird erhöht (NAC = 37). Die Kompressionsmaschine verbindet dann zusätzliche Zeichen aus dem rohen Datenstrom 182, bis die Folge [a₁₀, a₁₁, b] nicht länger mit irgendeinem Eintrag im Speicher 184 übereinstimmt. Das Kodewort "34" für die letzte übereinstimmende Dateneintragsfolge (d. h., [a₁, a₂] bei ADDR34) wird dann durch die Kompressionsmaschine aus­ gegeben. Die Lauf-Verbesserungsmaschine stellt fest, daß das Kodewort "34" nicht gleich NAC-1 (36) ist (d. h., Ende des Laufs). Nachdem der Wert von RUNCODE "36" ist (d. h. nicht 0), werden der RUNCODE-Wert und das Kodewort "34" auf den komprimierten Datenstoff 188 (d. h. 36, 34) ausgegeben. RUN- CODE wird dann auf einen Null-Wert zurückgesetzt. Die Zei­ chenfolge [a₁₀, a₁₁, b] wird an den Speicherort NAC (ADDR 37) kopiert, bevor NAC erhöht wird. Dieses Verfahren wird fortgeführt, bis alle Zeichen aus dem rohen Datenstrom 182 komprimiert sind.
Der Datenstrom 188 wird zuerst durch Dekodieren des kodier­ ten Zeichens "13", wie in Fig. 8 gezeigt, dekomprimiert. Nachdem das Kodewort "13" größer als c₀ (d. h. "1") ist, und kleiner als c₀+2k (d. h. "33") ist, wird es als ein neues Zeichen verarbeitet, wie in Fig. 9 gezeigt. Die nächsten 3 Bits aus dem Datenstrom 188 (d. h. Kodewort "1") werden z. B. mit der dekodierten 5-Bit binären Darstellung des Spezial- Zeichenkodes "13" verkettet (d. h. 13-c₀ = 12 = [01100]).
Diese erzeugt die ASCII-Darstellung von "a" (d. h. [0110001]). Das erste dekodierte Zeichen wird als a₀ im de­ komprimierten Datenstrom 190 dargestellt. Das dekodierte Zeichen "a" wird dann in den Adreßort ADDR 33 des Dekompres­ sionswörterbuchs (nicht gezeigt) geladen.
Beim nächsten kodierten Zeichen "36" aus dem komprimierten Datenstrom 188 wird festgestellt, daß es größer als c₀+2k ist, wobei es als kodierte Mehr-Zeichen-Folge bestimmt wird. Das kodierte Zeichen wird durch die Dekodierer-Lauf-Verbes­ serungsmaschine 160 (Fig. 16) abgefangen. Das Kodewort "36" wird mit dem vorliegenden Wert von NAC (33) verglichen. Nachdem der Kodewert "36" größer als der Kodewert "33" ist, wird der Wert von NAC in den Adreßzeiger RUNCODE geschrieben und RUNCODE wird verwendet, wenn das nächste kodierte Zei­ chen durch die Dekompressionsmaschine dekomprimiert wird. Die Dekompressionsmaschine baut das Dekompressionswörterbuch am Adreßort ADDR 34 und gibt Zeichen aus dem Lauf in den de­ komprimierten Datenstrom 190 in einer für ein LZ2-Dekompres­ sionsschema typischen Art ab.
Das Dekodierer-Lauf-Verbesserungsverfahren in Fig. 16 erhöht dann RUNCODE (34) und überprüft, um zu sehen, ob der Wert von RUNCODE kleiner oder gleich dem kodierten Zeichenwert "36" ist. Nachdem der Wert von RUNCODE kleiner als "36" ist, wird der neue Wert von RUNCODE an die Kompressionsmaschine als nächstes kodiertes Zeichen geschickt. Das Verfahren wird wiederholt, bis RUNCODE gleich dem Kodewortwert "36" ist. Das nächste Kodewort "34" wird dann aus dem komprimierten Datenstrom 188 gelesen und auf ähnliche Weise durch die De­ kodierer-Lauf-Verbesserungsmaschine verarbeitet. Folglich wird der Spalt zwischen den Kodewörtern in dem komprimierten Datenstrom (d. h. zwischen den Kodewörtern 33, 34 und 35) durch die Lauf-Verbesserungsmaschine ausgefüllt.
Der rohe Datenstrom 182 wird auf einer ersten Ebene durch das LZ2-Kompressionsverfahren mit Zwischeninitialisierung, wie in Fig. 5 gezeigt, komprimiert und die Daten werden ferner auf einer zweiten Ebene durch das Lauf-Verbesserungs­ verfahren, der in Fig. 13 gezeigt ist, komprimiert. Es ist aus dem Datenstrom 188 offensichtlich, daß die Anzahl von Kodewörtern, die von der Lauf-Verbesserungsmaschine über­ tragen werden, kleiner ist, als die durch den Datenstrom 186 normalerweise übertragenen. Deshalb wird das Kompressions­ verhältnis durch die reduzierten kodierten Zeichenbitlängen, die durch das Zwischeninitialisierungsverfahren geschaffen werden, erhöht und durch das Lauf-Verbesserungsverfahren weiter erhöht.
Es wird darauf hingewiesen, daß das Laufkodierungsverbesse­ rungsverfahren keinen Kompressionsnachteil für andere Arten der Redundanz in den Eingabedaten mit sich bringt. Die Ver­ besserung nutzt etwas von der Restredundanz aus, die in dem Kodestrom, der durch das LZ2-Schema erzeugt wurde, zurück­ bleibt: zu jeglichem gegebenen Zeitpunkt gibt es einen "maximal gültigen Kode", der in dem Strom auftreten kann, und Werte, die größer als der maximale Kode sind, sind "il­ legal". Die Laufkodierungsverbesserung verwendet diese "il­ legalen" Kodes, um Läufe zu kodieren. Beim Ausführen der Lauf-Kodierungsverbesserung zusammen mit variablen Kode­ längen: kann nicht zugelassen werden, daß die Folge A₁, A₁+1, A₁+2, A₁+3, . . . ., A₁+(k-1) eine Kodelängen-Grenze überspannt. Die Anzahl der erforderlichen Bits, um A₁+(k-1) zu übertragen, muß z. B. dieselbe sein, die erforderlich ist, um A₁ zu übertragen, nachdem dies die Bitlänge ist, die von dem Dekompressor erwartet wird. Dies kann durch Teilen (wenn notwendig) des Laufs in Unter-Läufe erreicht werden. Ver­ schiedene Varianten der Laufkodierungsverbesserung sind mög­ lich. Eine solche Variante wäre es, die neuen Kodes A₁+1, A₁+2, . . . ., A₁+(k-1) nicht in das Wörterbuch einzutragen. Deshalb wird im Wörterbuch Platz gespart, während immer noch ein Weg zum Kodieren von Läufen erhalten wird. Welche Variante besser arbeitet, wird von der Verteilung der Lauf­ längen in den Eingabedaten abhängen.
Huffman-Kodierung
Netzwerk-Protokolle (z. B. TCP/IP) umwickeln die tatsächli­ chen Datenpakete, die übertragen werden, mit einem Umschlag aus Organisationsinformationen, die benötigt werden, um den Netzwerkverkehr zu verwalten. Eine empirische Beobachtung zeigt, daß dieser Zusatz dazu tendiert, die relative Fre­ quenz des Auftretens von Null-Bytes in dem Netzwerkverkehr bedeutend zu erhöhen. Dieses Phänomen geht teilweise auf das "Null-Ausfüllen" von verschiedenen Feldern in dem Paketum­ schlag zurück. Die Frequenz des Auftretens von Werten un­ gleich Null hängt von den Daten ab und es zeigt über lange Zeitperioden keine markante Abweichung von einer einheit­ lichen Verteilung. Daher ist eine grobe Annäherung der Wahr­ scheinlichkeitsverteilung von Byte-Werten gegeben durch:
wobei P(c) die Wahrscheinlichkeit des Auftretens eines Bytes mit einem Wert c ist, und 0 < = p < = 1. Die Werte von p, die durch Überwachen des Netzwerkverkehrs erhalten werden, lie­ gen typischerweise zwischen 0,2 und 0,3. Bei sehr kurzen Pa­ keten, oder wenn die tatsächlichen Paketdaten nicht kompri­ mierbar sind (z. B. Daten, die bereits an der Quelle kompri­ miert wurden), ist eine hohe Wahrscheinlichkeit eines Null- Wertes oft die einzige Redundanz, die in den Daten übrig­ bleibt. In diesen Fällen wird ein einfaches Huffman-Kodier­ schema ein LZ-Schema übertreffen.
Das grundsätzliche Prinzip der Huffman-Kodierung ist es, feste Zeichenlängen mit verschiedenen Kodelängen zu kodie­ ren, unter Verwendung kürzerer Kodes für die häufigsten Zeichen und längerer Kodes für die weniger häufigen. Die Huffman-Kodierung ist in Fachkreisen gut bekannt und wird deshalb nicht im Detail beschrieben. Mit der Verwendung des Huffman-Algorithmus ist es möglich, eine optimale Kodezu­ ordnung für eine gegebene Wahrscheinlichkeitsverteilung auf­ zubauen. Die resultierende Kodezuordnung hat ebenfalls ein "Präfix-freies" Merkmal (d. h. kein Kode tritt als ein Präfix eines anderen Kodes auf). Dies macht den kodierten Strom eindeutig und sofortig dekodierbar.
Für die einfache Wahrscheinlichkeitsverteilung, die oben be­ schrieben wurde, mit p < 1/256 und unter der Annahme eines 8-Bit Eingabe-Bytes, mit Werten zwischen 0 und 255, ist eine optimale Huffman-Kodezuordnung in Fig. 18 A gegeben. Bezug­ nehmend auf die Mittelspalte ist "z" eine ganze Zahl im Be­ reich von 1 < = z < = 8, deren optimaler Wert als eine Funk­ tion von p auf die folgende Art bestimmt wird. Das Kompres­ sionsverhältnis für dieses Kodierungsschema ist in Gleichung 1 wie folgt definiert:
R(z,p) = pz/8 + [(1-p)/2040] * (29-z + 2038) (1)
Für ein festes z im Bereich von 1 < = z < = 8, ist R(z,p) eine lineare Funktion von p. Ihre Steigung ist nicht-positiv und steigt monoton mit z. Der Wert R(z,0) fällt ebenfalls mono­ ton mit z. Fig. 18 B zeigt Zeichnungen von R(z, p) für 1 < = z < = 4 und 0 < = p < = 0,5. Daher existiert für ein gegebenes z ein Wert pz derart, daß R(z, p) < = R(z′, p) für alle z′ < z und p < pz. Es kann ohne weiteres verifiziert werden, daß pz die Wurzel einer linearen Gleichung 2 ist:
R (z,pz) = R (z+1, Pz) (2)
Ersetzt man in Gleichung 2 den Ausdruck für R (z, p) durch Gleichung 1 und löst nach pz auf, erzeugt man die folgende Gleichung:
pz = 28-z/[(255 * 2z) + 256].
Fig. 19 ist eine Tabelle, die die Werte von pz für 0 < = z < = 8 zeigen. Die Werte pz = 1 für z = 0 sind der Vollständig­ keit halber eingeschlossen. Ein gegebener Wert von z, 1 < = z < = 8, ist optimal, wenn p im Bereich von pz < = p < = pz-1 ist. Einige dieser Intervalle sind in Fig. 18 B gezeigt. Folglich ist z = 2 optimal für 64/319 < = p < = 128/383 (un­ gefähr gleich 0,2006 < = p < = 0,3342). Es wird darauf hinge­ wiesen, daß dieser Bereich die Werte von p einschließt, die empirisch beim typischen Lokalnetzwerkverkehr gefunden wurden.
Ein Kompressionsschema für Netzwerkpakete
Die verschiedenen Kompressionsverfahren, die im Vorher­ gehenden beschrieben wurden, sind in Fig. 20 kombiniert, um ein effektives Schema zur kundenspezifisch angepaßten Kom­ pression von Netzwerkpaketen zu erzeugen. Fig. 20 zeigt einen Block 202 zum Verarbeiten der Paketadreßfelder (nor­ malerweise zwei 6-Byte-Felder). Bei bestimmten Anwendungen (z. B. Netzwerkbrücken) tragen die meisten Pakete Adressen einer kleinen Teilmenge (nämlich die Adressen der Stationen, die durch die Brücke bedient werden). Diese häufig auf­ tretenden Adressen können in einer Tabelle gespeichert wer­ den und durch ihre Serien-Nummer in einer Tabelle kodiert werden. Wenn z. B. die Adreßtabelle 255 Bytes lang ist, kann eine Serien-Nummer in einem Byte kodiert werden, wobei folg­ lich ein 6 : 1 Kompressionsverhältnis für das Adreßfeld er­ reicht wird (ein Kode ist für die Markierung der Adressen, die nicht in der Tabelle gefunden werden, reserviert). Bei alternativen Anwendungen sind die Adreßfelder zusammen mit dem Rest des Pakets komprimiert oder werden unkomprimiert gesendet.
Bezugnehmend auf Fig. 20 wird ein Eingabepaket 200 in einen Adreßverarbeitungsblock 202 eingegeben. Der Block 208 stellt ein verbessertes LZ2-Schema dar, mit mittlerer anfänglicher Wörterbuch- und Laufkodierungsverbesserung (LZE). Der Block 204 stellt das einfache Huffman-Schema (Z-HUF) wie im voran­ gegangenen mit z=2 dar. Bei einer Hardware-Ausführung laufen LZE und Z-HUF parallel. Block 210 wählt den Ausgabe des Kompressionsverfahrens mit dem besten Verhalten für das derzeitige Paket aus. Block 210 gibt dann das komprimierte Paket zusammen mit einem kurzen Kopf aus, der die kompri­ mierte Paketlänge und einen Zeiger bezüglich des ausgewähl­ ten Kompressionsverfahrens enthält. Die Länge der kompri­ mierten Ausgabe wird ebenfalls gegenüber der Länge des ur­ sprünglichen Pakets aus Block 200 verglichen, um eine Paket­ ausdehnung zu verhindern. Wenn weder der LZE- noch der Z-HUF-Kompressor beim Komprimieren des Pakets erfolgreich war, wird eine Kopie des Originals von Block 206 zusammen mit einer geeigneten Anzeige in dem Kopf ausgegeben.
Im wesentlichen hat die Mehrheit der Pakete mit dem LZE im Block 208 eine bessere Kompression als mit der Z-HUF im Block 204 oder mit dem "Kopier"-Block 206. Der Z-HUF- und der "Kopier"-Block werden jedoch einige der Pakete gewinnen (meistens kürzere). Einige repräsentative Kompressions­ ergebnisse sind in Fig. 21 für zwei verschiedene Dateien von Paketen dargestellt. Die erste Zeile in Fig. 21 zeigt eine LZW-Ausführung (Unix-Kompression), mit Ausgabekodes bis zu 16 Bits. Alle Pakete werden als eine Datei komprimiert (d. h. die Paketgrenzen werden ignoriert und die Wörterbücher werden zwischen den Paketen geteilt). Die zweite Zeile in der Tabelle in Fig. 21 zeigt das Ergebnis einer Unix-Kom­ pression mit 12-Bit-Ausgabekodes, die dritte Reihe gibt die Ergebnisse des LZE-Kompressionsschemas, das oben beschrieben wurde, und die vierte Reihe gibt die Kompressionsergebnisse, die sowohl das LZE- als auch das Z-HUF-Kompressionsschema parallel verwenden, wie in Fig. 20 gezeigt. Die Ergebnisse in der dritten und vierten Reihe entsprechen der unab­ hängigen Kompression jedes Paketes.
Wie in Fig. 21 gesehen werden kann, ist das Kompressions­ verhalten für einzelne Pakete nahe an dem und in einigen Fällen sogar besser als das erreichbare, wenn große Dateien von Paketen komprimiert werden. Dies trifft sogar zu, obwohl es eine bessere Chance des Anpassens an die statistischen Charakteristika der Datenquelle in einer großen Datei von Paketen durch Ausnutzen von Zwischen-Paket-Redundanzen gibt. Die Kompressionsergebnisse in Fig. 21 sind über Langzeit­ kompressionstests konsistent, bei denen es einer Software- Ausführung gestattet war, für mehrere Tage kontinuierlich zu laufen. Die Netzwerkpakete wurden periodisch abgetastet, komprimiert, dekomprimiert und bezüglich des Kompressions­ verhältnisses überwacht.
Fig. 22 zeigt einen Graph des Kompressionsverhältnisses als eine Funktion der Zeit. Die Kompression wurde für eine Per­ iode von ungefähr 200 Stunden gemessen. Die abgetasteten Datensätze bestanden aus 1,420,998 Paketen, mit einer Ge­ samtgröße von 198,754,151 Bytes mit einer durchschnittlichen Paketlänge von 140 Bytes. Das durchschnittliche Kompres­ sionsverhältnis für den Datensatz war 0,572. Fig. 23 zeigt ein Histogramm der Verteilung der Daten (Bruchteil der Ge­ samtanzahl von Bytes) bezüglich der Paketlänge. Mehr als 50% der Bytes in diesen Datensätzen sind in Paketen mit Längen von 200 Byte oder weniger enthalten. Fig. 24 zeigt das durchschnittliche Kompressionsverhältnis für verschiedene Bereiche der Paketlängen. Ein konsistent gutes Kompressions­ verhältnis wird für jede Paketlänge erreicht.
Das System, wie es oben beschrieben wurde, verbessert das Kompressionsverhalten in Datenquellen, in denen das "na­ türliche" Alphabet groß ist (z. B. 16-Bit-Symbole). Zusätz­ lich verbessert das System das Kompressionsverhalten für Datenquellen, die in kurze Blöcke unterteilt sind, wobei jeder Block unabhängig komprimiert werden muß. Diese Ver­ besserungen schaffen ein Kompressionsschema, das kunden­ spezifisch auf Netzwerkpakete angepaßt ist. Folglich ist das Kompressionsverhalten auf einzelnen Netzwerkpaketen nun ver­ gleichbar mit dem, das mit großen Dateien von Paketen erreichbar ist, sogar wenn die durchschnittliche Paketlänge sehr kurz ist.

Claims (23)

1. Verfahren zum Dekodieren von Eingabedaten in einem Kom­ pressions-/Dekompressionssystem, das auf einem Wörter­ buch basiert, gekennzeichnet durch folgende Schritte:
Speichern eindeutiger Mehr-Zeichen-Folgen der Eingabe­ daten als Wörterbucheinträge in dem Kompressions-/Dekom­ pressionssystem (22);
Kodieren von Mehr-Zeichen-Folgen der Eingabedaten in Kodewörter gemäß der Adresse der Wörterbucheinträge, die mit der Zeichenfolge (66) übereinstimmen;
Identifizieren von Einzel-Zeichen-Folgen der Eingabe­ daten, die noch nicht in dem Kompressions-/Dekompres­ sions-Wörterbuch (64) gespeichert sind;
Kodieren jeder Einzel-Zeichen-Folge mit einem Spezial- Kode und einem Teil-Kode, wobei jeder Spezial- und Teil-Kode einen auswählbaren Abschnitt der zugeordneten Einzel-Zeichen-Folge (72, 74, 76) darstellt; und
Ausgeben eines komprimierten Datenstromes aus dem Kom­ pressions-/Dekompressions-System, der sowohl die Kode­ wörter, die den kodierten Einzel-Zeichen-Folgen ent­ sprechen, als auch die Kodewörter, die den kodierten Mehr-Zeichen-Folgen (62) entsprechen, hat, wobei jeder Spezial-Kode und zugeordnete Teil-Kode eindeutig eine Einzel-Zeichen-Folge identifizieren und eine Teilmenge der Gesamtzahl von eindeutigen Einzel-Zeichen-Folgen darstellen, die in den Eingabedaten existieren können.
2. Kodierverfahren gemäß Anspruch 1, gekennzeichnet durch Kodieren des Spezial-Kodes für jede Einzel-Zeichen-Folge in dem komprimierten Datenstrom gemäß einem auswählbaren Parameter k, der festlegt, wieviele Bits des Einzel-Zei­ chens in dem Spezial-Kode (80) enthalten sind.
3. Kodierverfahren gemäß Anspruch 1 oder 2, gekennzeichnet durch
Rekonstruieren von Einzel-Zeichen-Folgen aus dem kompri­ mierten Datenstrom (90), wobei das Rekonstruktionsver­ fahren folgende Schritte aufweist:
Identifizieren eines Spezial-Kodes in dem komprimierten Datenstrom (92);
Dekodieren des Spezial-Kodes zurück in einen ursprüng­ lichen Abschnitt der zugeordneten Einzel-Zeichen-Folge (93); und
Kombinieren des Spezial-Kodes mit seinem zugeordneten Teil-Kode (36).
4. Kodierverfahren gemäß einem der Ansprüche 1 bis 3, da­ durch gekennzeichnet, daß der Spezial-Kode (80) kodiert ist, um innerhalb eines vorher festgelegten Bereichs von Kodewerten, die durch das Kompressions-/Dekompressions-System erzeugt werden, zu existieren.
5. Kodierverfahren gemäß einem der Ansprüche 1 bis 4, da­ durch gekennzeichnet, daß das Kodieren von Einzel-Zeichen-Folgen das Zuordnen einer Teilmenge von Bits aus einer Einzel-Zeichen-Folge (80) zu dem Spezial-Kode und das Zuordnen der restlichen Bits des Einzel-Zeichens zu dem Teil-Kode (86) umfaßt, wobei die Anzahl von Bits in dem Spezial-Kode durch die Anzahl von Kodewörtern festgelegt wird, die in dem Kom­ pressions-/Dekompressions-System zugeordnet sind, um Einzel-Zeichen-Folgen darzustellen.
6. Kodierverfahren gemäß Anspruch 5, dadurch gekennzeich­ net, daß die Anzahl von Bits, die den Spezial-Kodes (80) der Einzel-Zeichen-Folgen zugeordnet sind, gemäß der Art und der Struktur der Eingabedaten verändert werden.
7. Kodierverfahren gemäß einem der Ansprüche 1 bis 6, ge­ kennzeichnet durch Erfassen eines Laufs von aufeinanderfolgenden Kodewör­ tern in dem komprimierten Datenstrom, wobei jedes Kode­ wort in dem Lauf eine Folge von Eingabedaten darstellt, die aus denselben Zeichen (128) bestehen.
8. Kodierverfahren gemäß Anspruch 7, gekennzeichnet durch Komprimieren des Laufs von Kodewörtern des komprimierten Datenstroms (128).
9. Kodierverfahren gemäß Anspruch 7 oder 8, gekennzeichnet durch Hindern des Kompressions-/Dekompressions-Systems am Aus­ geben eines Teils des Kodewortlaufs an den komprimierten Datenstrom (140).
10. Kodierverfahren gemäß Anspruch 9, dadurch gekenn­ zeichnet, daß der Wert des ersten Kodewortes, das den gesperrten Kodewörtern folgend gesendet wird, die Rekonstruktion der Sequenz der gesperrten Kodewörter (160) gestattet.
11. Kodierverfahren gemäß einem der Ansprüche 7 bis 10, ge­ kennzeichnet durch gleichzeitiges Komprimieren der Eingabedaten mit min­ destens einem zusätzlichen Kompressionsschema und Aus­ wählen des komprimierten Datenstroms aus dem Schema, das das beste Kompressionsverhältnis (208, 206, 204) schafft.
12. Kodierverfahren gemäß Anspruch 11, gekennzeichnet durch Auswählen der unkomprimierten Eingabedatenzeichen, wenn die Eingabedatengröße kleiner als jeder komprimierte Datenstrom (210) ist.
13. Kodierverfahren gemäß einem der Ansprüche 1 bis 12, da­ durch gekennzeichnet, daß die Gesamtzahl von eindeutigen Einzel-Zeichen-Folgen größer ist als die gesamte Anzahl von Wörterbuch­ eintragungen in dem Kompressions-/Dekompressions-System (22).
14. Kodierverfahren gemäß einem der Ansprüche 1 bis 13, da­ durch gekennzeichnet, daß die Anzahl der eindeutigen Einzel-Zeichen-Folgen 2¹⁶ beträgt.
15. Verfahren zum Kodieren von Eingabedaten in einem Kom­ pressions-/Dekompressions-System, das auf einem Wörter­ buch basiert, gekennzeichnet durch folgende Schritte:
Kodieren von Zeichenfolgen aus den Eingabedaten und Speichern eindeutiger Zeichenfolgen als Dateneinträge in dem Kompressions-/Dekompressionswörterbuch (64);
Ausgeben eines komprimierten Datenstroms aus dem Kom­ pressions-/Dekompressions-System, wobei der komprimierte Datenstrom, der aus Kodewörtern besteht, die kodierten Zeichenfolgen (62) darstellt;
Erfassen einer Sequenz von Kodewörtern in dem kompri­ mierten Datenstrom, die einen Lauf von Eingabedaten­ zeichen (128) darstellt, wobei der Lauf Eingabedaten­ zeichen darstellt, die denselben Wert haben und die durch das Kompressions-/Dekompressions-System in nach­ einanderfolgender Reihenfolge verarbeitet werden; und
Komprimieren des komprimierten Datenstroms durch Hindern des Kompressions-/Dekompressions-Systems am Ausgeben eines Teils des Kodewortlaufs in den komprimierten Datenstrom; wobei der Wert des ersten Kodewortes, das den gesperrten Kodewörtern folgend gesendet wird, die Rekonstruktion der Folge der gesperrten Kodewörter (128) erlaubt.
16. Kodierverfahren gemäß Anspruch 15, dadurch gekennzeich­ net, daß der Lauf durch Vergleichen der kodierten Wertausgabe aus dem Kompressions-/Dekompressions-System mit dem Speicherort des letzten Dateneintrags, der in dem Kom­ pressions-/Dekompressions-Wörterbuch (136) gespeichert ist, erfaßt wird.
17. Kodierverfahren gemäß Anspruch 16, gekennzeichnet durch Hindern des Kompressions-/Dekompressions-Systems am Aus­ geben kodierter Zeichenfolgen, bis die letzte kodierte Wertausgabe aus dem Kompressions- /Dekompressionssystem nicht länger mit dem Adreßwert der letzten Zeichenfolge, die in dem Wörterbuch (140) gespeichert ist, überein­ stimmt.
18. Kodierverfahren gemäß einem der Ansprüche 15 bis 17, ge­ kennzeichnet durch Dekomprimieren des ersten Kodewortes, das den gesperrten Kodewörtern folgend gesendet wurde, in Kodewörter die durch das Kompressions-/Dekompressions-System (160) wei­ ter in dekomprimierte Daten dekomprimiert werden.
19. Schaltung zum Kodieren von Eingabedaten in einem Korn­ pressions-/Dekompressions-System, das auf einem Wörter­ buch basiert, gekennzeichnet durch folgende Merkmale:
eine Kompressions-/Dekompressions-Maschine zum Kodieren von Einzel- und Mehr-Zeichen-Folgen aus den Eingabedaten in Kodewörter und zum Ausgeben der Kodewörter als kom­ primierter Datenstrom (126);
eine Einrichtung zum Trennen der Einzel-Zeichen-Folgen von den Eingabedaten in ein erstes und ein zweites Ko­ defeld (86);
eine Einrichtung zum Kodieren des ersten Kodefeldes, um Einzel-Zeichen-Folgen in dem komprimierten Datenstrom (82, 80, 84) zu identifizieren, wobei das erste Kodefeld kodiert ist, um innerhalb eines vorher festgelegten Be­ reichs der Kodewerte der Kompressions-/Dekompressions­ maschine zu sein; und
eine Einrichtung zum Erzeugen von Einzel-Zeichen-Folgen aus dem komprimierten Datenstrom durch Dekodieren des ersten Kodefeldes und Verbinden dieses mit dem zweiten Kodefeld (86), wobei das erste und das zweite Kodefeld die Bitlänge der kodierten Zeichenfolgen durch Darstel­ len einer Teilmenge aller Einzel-Zeichen-Folgen, die möglicherweise in den Eingabedaten auftreten können, re­ duziert.
20. Schaltung gemäß Anspruch 19, dadurch gekennzeichnet, daß die Kodiereinrichtung (84) eine auswählbare Anzahl von Bits aus dem ersten Kodefeld (80) mit einem vorher festgelegten Wert (82) summiert.
21. Schaltung gemäß Anspruch 19 oder 20, dadurch gekenn­ zeichnet, daß der Dekodierer einen vorher festgelegten Wert aus dem ersten Kodefeld (102) abzieht und eine auswählbare Anzahl von Bits des Ergebnisses mit dem zweiten Kodefeld (104) kombiniert.
22. Schaltung gemäß einem der Ansprüche 19 bis 21, gekenn­ zeichnet durch eine Kodierer-Lauf-Verbesserungsmaschine (128), die mit der Kompressions-/Dekompressions-Maschine (126) verbun­ den ist zum Verhindern, daß die Kompressions-/Dekompres­ sions-Maschine einige der Kodewörter an den kompri­ mierten Datenstrom ausgibt.
23. Schaltung gemäß Anspruch 22, gekennzeichnet durch eine Dekodierer-Lauf-Verbesserungsmaschine (160), die mit der Kompressions-/Dekompressions-Maschine (162) ver­ bunden ist zur Rekonstruierung der Sequenz von gesper­ rten Kodewörtern aus dem Wert des ersten Kodewortes, das den gesperrten Kodeworten folgend gesendet wird.
DE4340591A 1993-04-13 1993-11-29 Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete Expired - Lifetime DE4340591C2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/046,548 US5389922A (en) 1993-04-13 1993-04-13 Compression using small dictionaries with applications to network packets

Publications (2)

Publication Number Publication Date
DE4340591A1 DE4340591A1 (de) 1994-11-17
DE4340591C2 true DE4340591C2 (de) 1995-04-27

Family

ID=21944035

Family Applications (1)

Application Number Title Priority Date Filing Date
DE4340591A Expired - Lifetime DE4340591C2 (de) 1993-04-13 1993-11-29 Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete

Country Status (4)

Country Link
US (1) US5389922A (de)
JP (1) JPH07104971A (de)
DE (1) DE4340591C2 (de)
GB (1) GB2277179B (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024074249A1 (de) 2022-10-05 2024-04-11 Mercedes-Benz Group AG Verfahren zur kompression und dekompression von log-dateien und informationstechnisches system

Families Citing this family (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5530645A (en) * 1993-06-30 1996-06-25 Apple Computer, Inc. Composite dictionary compression system
US7190284B1 (en) 1994-11-16 2007-03-13 Dye Thomas A Selective lossless, lossy, or no compression of data based on address range, data type, and/or requesting agent
US5870036A (en) * 1995-02-24 1999-02-09 International Business Machines Corporation Adaptive multiple dictionary data compression
US5627534A (en) * 1995-03-23 1997-05-06 International Business Machines Corporation Dual stage compression of bit mapped image data using refined run length and LZ compression
DE19538852A1 (de) * 1995-06-30 1997-01-02 Deutsche Telekom Ag Verfahren und Anordnung zur Klassifizierung von Sprachsignalen
US5781881A (en) * 1995-10-19 1998-07-14 Deutsche Telekom Ag Variable-subframe-length speech-coding classes derived from wavelet-transform parameters
GB2310055A (en) * 1996-02-08 1997-08-13 Ibm Compression of structured data
JP3256121B2 (ja) * 1996-02-13 2002-02-12 富士通株式会社 データ符号化装置およびデータ復号装置およびその方法
US5861827A (en) * 1996-07-24 1999-01-19 Unisys Corporation Data compression and decompression system with immediate dictionary updating interleaved with string search
DE19706268A1 (de) * 1997-02-18 1998-08-20 Christian Wenz Dateiformatspezifisches Packverfahren
US5930399A (en) * 1997-04-03 1999-07-27 Microsoft Corporation Data encoding for a communication channel supporting a subset of the characters to be transmitted
US6879266B1 (en) * 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
JPH11143877A (ja) * 1997-10-22 1999-05-28 Internatl Business Mach Corp <Ibm> 圧縮方法、辞書の見出し語インデックス・データを圧縮するための方法、及び機械翻訳システム
US5870412A (en) * 1997-12-12 1999-02-09 3Com Corporation Forward error correction system for packet based real time media
US6145109A (en) * 1997-12-12 2000-11-07 3Com Corporation Forward error correction system for packet based real time media
EP1040611B1 (de) 1997-12-12 2002-06-05 3Com Corporation Ein vorwärtsfehlerkorrektionssystem für packetbasierte echtzeitmedien
JP3421700B2 (ja) 1998-01-22 2003-06-30 富士通株式会社 データ圧縮装置及び復元装置並びにその方法
US6216175B1 (en) * 1998-06-08 2001-04-10 Microsoft Corporation Method for upgrading copies of an original file with same update data after normalizing differences between copies created during respective original installations
JP4242970B2 (ja) * 1998-07-09 2009-03-25 富士通株式会社 データ圧縮方法及びデータ圧縮装置
US6624761B2 (en) * 1998-12-11 2003-09-23 Realtime Data, Llc Content independent data compression method and system
US6819271B2 (en) 1999-01-29 2004-11-16 Quickshift, Inc. Parallel compression and decompression system and method having multiple parallel compression and decompression engines
US6885319B2 (en) * 1999-01-29 2005-04-26 Quickshift, Inc. System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms
US7129860B2 (en) * 1999-01-29 2006-10-31 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
US7538694B2 (en) 1999-01-29 2009-05-26 Mossman Holdings Llc Network device with improved storage density and access speed using compression techniques
US6166665A (en) * 1999-03-08 2000-12-26 Unisys Corporation Data compression method and apparatus with embedded run-length encoding
US6601104B1 (en) 1999-03-11 2003-07-29 Realtime Data Llc System and methods for accelerated data storage and retrieval
US6604158B1 (en) * 1999-03-11 2003-08-05 Realtime Data, Llc System and methods for accelerated data storage and retrieval
GB2348065A (en) * 1999-03-19 2000-09-20 Nds Ltd Signal compression
IT1308456B1 (it) * 1999-04-26 2001-12-17 Olivetti Lexikon Spa Dispositivo per comprimere/decomprimere stringhe di bit
JP2000305822A (ja) * 1999-04-26 2000-11-02 Denso Corp データベース管理装置,データベースレコード抽出装置,データベース管理方法及びデータベースレコード抽出方法
US6137428A (en) * 1999-04-27 2000-10-24 Unisys Corporation Data compression method and apparatus with embedded run-length encoding using mathematical run processing
US6169499B1 (en) * 1999-06-19 2001-01-02 Unisys Corporation LZW data compression/decompression apparatus and method with embedded run-length encoding/decoding
US6453389B1 (en) 1999-06-25 2002-09-17 Hewlett-Packard Company Optimizing computer performance by using data compression principles to minimize a loss function
US6320523B1 (en) * 1999-07-30 2001-11-20 Unisys Corporation Method and apparatus for reducing the time required for compressing data
US6188333B1 (en) 1999-08-12 2001-02-13 Unisys Corporation LZW data compression apparatus and method using look-ahead mathematical run processing
US6404362B1 (en) * 1999-09-21 2002-06-11 Unisys Corporation Method and apparatus for reducing the time required for decompressing compressed data
GB0001707D0 (en) 2000-01-25 2000-03-15 Btg Int Ltd Data compression having more effective compression
US20010047473A1 (en) 2000-02-03 2001-11-29 Realtime Data, Llc Systems and methods for computer initialization
US20030191876A1 (en) * 2000-02-03 2003-10-09 Fallon James J. Data storewidth accelerator
US9143546B2 (en) * 2000-10-03 2015-09-22 Realtime Data Llc System and method for data feed acceleration and encryption
US7417568B2 (en) * 2000-10-03 2008-08-26 Realtime Data Llc System and method for data feed acceleration and encryption
US8692695B2 (en) 2000-10-03 2014-04-08 Realtime Data, Llc Methods for encoding and decoding data
US6359548B1 (en) * 2000-10-16 2002-03-19 Unisys Corporation Data compression and decompression method and apparatus with embedded filtering of infrequently encountered strings
US20020085764A1 (en) * 2000-12-29 2002-07-04 Brady Thomas S. Enhanced data compression technique
GB0102572D0 (en) * 2001-02-01 2001-03-21 Btg Int Ltd Apparatus to provide fast data compression
US7386046B2 (en) * 2001-02-13 2008-06-10 Realtime Data Llc Bandwidth sensitive data compression and decompression
US6606040B2 (en) * 2001-02-13 2003-08-12 Mosaid Technologies, Inc. Method and apparatus for adaptive data compression
US6392568B1 (en) * 2001-03-07 2002-05-21 Unisys Corporation Data compression and decompression method and apparatus with embedded filtering of dynamically variable infrequently encountered strings
US6400286B1 (en) * 2001-06-20 2002-06-04 Unisys Corporation Data compression method and apparatus implemented with limited length character tables
US7272663B2 (en) * 2001-08-28 2007-09-18 International Business Machines Corporation Method and system for delineating data segments subjected to data compression
US7252322B2 (en) * 2003-02-07 2007-08-07 William Rusu Hard tonneau cover
US7162583B2 (en) * 2003-12-29 2007-01-09 Intel Corporation Mechanism to store reordered data with compression
US20050219076A1 (en) * 2004-03-22 2005-10-06 Michael Harris Information management system
US7053803B1 (en) * 2005-01-31 2006-05-30 Hewlett Packard Development Company, L.P. Data compression
US7420992B1 (en) 2005-03-17 2008-09-02 Packeteer, Inc. Adaptive network traffic compression mechanism including dynamic selection of compression algorithms
US7102552B1 (en) * 2005-06-07 2006-09-05 Windspring, Inc. Data compression with edit-in-place capability for compressed data
US7167115B1 (en) 2005-08-26 2007-01-23 American Megatrends, Inc. Method, apparatus, and computer-readable medium for data compression and decompression utilizing multiple dictionaries
EP1780947B1 (de) * 2005-10-27 2009-06-17 Alcatel Lucent Datensammeln von Netzknoten in einem Telekommunikationsnetz
US9176975B2 (en) 2006-05-31 2015-11-03 International Business Machines Corporation Method and system for transformation of logical data objects for storage
US8868930B2 (en) 2006-05-31 2014-10-21 International Business Machines Corporation Systems and methods for transformation of logical data objects for storage
US7738717B1 (en) * 2006-06-27 2010-06-15 Verizon Services Corp. Systems and methods for optimizing bit utilization in data encoding
US7649909B1 (en) 2006-06-30 2010-01-19 Packeteer, Inc. Adaptive tunnel transport protocol
US20080017227A1 (en) * 2006-07-19 2008-01-24 Ward Barry D Walking aid apparatus
CN101543037B (zh) * 2007-05-17 2012-05-30 索尼株式会社 信息处理设备和方法
US8391148B1 (en) * 2007-07-30 2013-03-05 Rockstar Consortion USLP Method and apparatus for Ethernet data compression
US7827165B2 (en) * 2007-09-17 2010-11-02 International Business Machines Corporation Providing a social network aware input dictionary
JP5446328B2 (ja) * 2009-03-06 2014-03-19 セイコーエプソン株式会社 表示装置,電子機器および駆動コード生成回路
US8217813B2 (en) * 2010-04-29 2012-07-10 Advanced Micro Devices, Inc. System and method for low-latency data compression/decompression
US8897298B2 (en) * 2011-11-02 2014-11-25 Qualcomm Incorporated Systems and methods for compressing headers and payloads
US11741121B2 (en) 2019-11-22 2023-08-29 Takashi Suzuki Computerized data compression and analysis using potentially non-adjacent pairs
US10387377B2 (en) 2017-05-19 2019-08-20 Takashi Suzuki Computerized methods of data compression and analysis
CN114128240A (zh) * 2019-02-28 2022-03-01 华为技术有限公司 实现内部网关协议的网络中的压缩数据传输
CN115276666B (zh) * 2022-09-28 2022-12-20 汉达科技发展集团有限公司 一种装备训练模拟器数据高效传输方法
CN115988569B (zh) * 2023-03-21 2023-06-30 浙江省疾病预防控制中心 一种蓝牙设备数据快速传输方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2101155B1 (de) * 1970-08-31 1974-09-20 Ortf
DE3048273C2 (de) * 1980-12-20 1985-04-25 Messerschmitt-Bölkow-Blohm GmbH, 8012 Ottobrunn Verfahren und Schaltungsanordnung zur Aufbereitung multispektraler digitalisierter Bilddaten zu Übertragungszwecken
US4464650A (en) * 1981-08-10 1984-08-07 Sperry Corporation Apparatus and method for compressing data signals and restoring the compressed data signals
US4814746A (en) * 1983-06-01 1989-03-21 International Business Machines Corporation Data compression method
US4558302A (en) * 1983-06-20 1985-12-10 Sperry Corporation High speed data compression and decompression apparatus and method
US5003307A (en) * 1989-01-13 1991-03-26 Stac, Inc. Data compression apparatus with shift register search means
US5150430A (en) * 1991-03-15 1992-09-22 The Board Of Trustees Of The Leland Stanford Junior University Lossless data compression circuit and method

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024074249A1 (de) 2022-10-05 2024-04-11 Mercedes-Benz Group AG Verfahren zur kompression und dekompression von log-dateien und informationstechnisches system
DE102022003682A1 (de) 2022-10-05 2024-04-11 Mercedes-Benz Group AG Verfahren zur Kompression und Dekompression von Log-Dateien und informationstechnisches System

Also Published As

Publication number Publication date
DE4340591A1 (de) 1994-11-17
GB2277179A (en) 1994-10-19
GB9406407D0 (en) 1994-05-25
JPH07104971A (ja) 1995-04-21
US5389922A (en) 1995-02-14
GB2277179B (en) 1997-10-22

Similar Documents

Publication Publication Date Title
DE4340591C2 (de) Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete
DE68925798T2 (de) Datenverdichtung
DE10301362B4 (de) Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung und einer Dekompressionseinrichtung, und Verfahren zur schnellen Blockdatenkompression mit Multi-Byte-Suche
DE69725215T2 (de) Verfahren und Vorrichtung zur Komprimierung und Dekomprimierung von Schrifttypen
DE69833094T2 (de) Verfahren und Vorrichtung zur adaptiven Datenkompression mit höherem Kompressionsgrad
DE69027606T2 (de) Vorrichtung zur datenkompression
DE19622045C2 (de) Datenkomprimierungs- und Datendekomprimierungsschema unter Verwendung eines Suchbaums, bei dem jeder Eintrag mit einer Zeichenkette unendlicher Länge gespeichert ist
DE60127695T2 (de) Verfahren zur komprimierung von datenpaketen
DE60033184T2 (de) Verfahren und Vorrichtung zur Datenkomprimierung von Netzwerkdatenpaketen unter Verwendung von paketweisen Hash Tabellen
DE69026924T2 (de) Datenkomprimierungsverfahren
DE69834695T2 (de) Verfahren und Vorrichtung zur Datenkompression
DE69024629T2 (de) Vorrichtung zur kompression von datenlängen und datenfolgen
DE19742417A1 (de) Vorrichtung und Verfahren zur Durchführung von M-fachem Maschinenendzustands-Entropiekodieren bzw. Entropiekodieren mit einer Maschine mit finitem Zustand
DE10196890B4 (de) Verfahren zum Ausführen einer Huffman-Decodierung
EP2068448B1 (de) Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Verwendung mehrerer Tabellen
DE69433620T2 (de) Datenkomprimierungsverfahren
DE3485824T2 (de) Verfahren zur datenkompression.
DE3854490T2 (de) Dynamische Bestimmung von Multi-Mode-Kodierung für Datenkomprimierung.
DE69025160T2 (de) Verfahren zur Dekodierung komprimierter Daten
DE69021854T2 (de) Verfahren zur Dekomprimierung von komprimierten Daten.
DE69725280T2 (de) Kompressionsgerät mit arithmetischer Kodierung unter Verwendung eines kontextualen Models, das zu variablen Musterlängen in binären Bilddaten adaptiv ist
DE68927331T2 (de) Suchbaumdatenstrukturkodierung für Kettensubstitutionsdatenverdichtungssysteme
DE68927939T2 (de) Monadische Kodierung vom Start-Schritt-Stop-Typ für die Datenkomprimierung
DE19653133C2 (de) System und Verfahren zur pre-entropischen Codierung
DE69029544T2 (de) Speicherarchitektur und Schaltung zum Hashcodieren

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
D2 Grant after examination
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE),

8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE

R071 Expiry of right
R071 Expiry of right