DE60128146T2 - System und verfahren zum komprimieren und dekomprimieren von daten in echtzeit - Google Patents

System und verfahren zum komprimieren und dekomprimieren von daten in echtzeit Download PDF

Info

Publication number
DE60128146T2
DE60128146T2 DE60128146T DE60128146T DE60128146T2 DE 60128146 T2 DE60128146 T2 DE 60128146T2 DE 60128146 T DE60128146 T DE 60128146T DE 60128146 T DE60128146 T DE 60128146T DE 60128146 T2 DE60128146 T2 DE 60128146T2
Authority
DE
Germany
Prior art keywords
string
characters
match
character
token
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
DE60128146T
Other languages
English (en)
Other versions
DE60128146D1 (de
Inventor
Michel Drummondville LEVESQUE
Guillaume Drummondville PARENTEAU
Guillaume Trois-Rivieres PLANTE
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.)
Openwave Systems Canada Ltd
Original Assignee
Openwave Systems Canada Ltd
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 Openwave Systems Canada Ltd filed Critical Openwave Systems Canada Ltd
Application granted granted Critical
Publication of DE60128146D1 publication Critical patent/DE60128146D1/de
Publication of DE60128146T2 publication Critical patent/DE60128146T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • 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/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Optical Modulation, Optical Deflection, Nonlinear Optics, Optical Demodulation, Optical Logic Elements (AREA)
  • Apparatus For Radiation Diagnosis (AREA)
  • Reduction Or Emphasis Of Bandwidth Of Signals (AREA)

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich auf ein System und ein Verfahren zum Komprimieren und Dekomprimieren von Daten in Echtzeit.
  • Hintergrund der Erfindung
  • Eine Datenkompression ist möglich, weil Daten, die die Leute gewöhnlich benutzen, eine Menge an Redundanz, d. h. Teile von Daten, die während der gesamten Nachricht wiederholt werden, aufweisen. Zwei hauptsächliche Typen von Kompressionsalgorithmen existieren, verlustlose Komprimierer und verlustbehaftete Komprimierer. Der Unterschied zwischen den beiden besteht darin, dass verlustreiche Algorithmen Informationen über die Daten bei dem Kompressionsverfahren verlieren, und daher die Daten nicht genauso dekomprimieren können, wie sie waren. Verlustlose Kompressionsalgorithmen können in zwei unterschiedliche Klassen unterteilt werden, statistische Verfahren und Diktionär basierende Verfahren. Die vorliegende Erfindung basiert auf einem verlustlosen, Diktionär basierendem Algorithmus. Verlustlose Kompressions- und Dekompressionsalgorithmen sind im Stand der Technik bekannt. Es wird beispielsweise Bezug genommen auf den LZ77-Algorithmus und seine Variationen (siehe beispielsweise US-Patente Nr. 5,155,484 (Chambers), 4,701,745 (Waterworth) und 5,521,597 (Dimitri), um einige zu nennen.
  • Der LZ77-Kompressionsalgorithmus reduziert die Länge der Nachrichten, indem wiederholte Datenmuster durch Referenzen auf diese Datenmuster ersetzt werden. Die Referenzen werden mit einem Paar von Zahlen, der Länge der wiederholten Daten und ihrem „Versatz" von dem vorhergehenden Auftreten gegeben. Beispielsweise würde der String „abracadabra" als „<abracad><4,7>" komprimiert, was bedeutet, dass die ersten sieben Zeichen keine wiederholten Daten enthielten, und dass die letzten drei als eine Wiederholung von vier Zeichen bezeichnet werden, die um sieben Zeichen in dem String zurückliegen. Vier Zeichen (32 Bits) wären durch ein Paar (2) von Zahlen ersetzt, die gelegentlich als Referenz bezeichnet werden. Die Kompression tritt daher auf, wenn man die zwei Zahlen in weniger als 32 Bits ausdrücken kann. Da Bits keine Bedeutung haben, außer wenn eine vorgegebene Darstellung existiert, muss man auch in der Lage sein, zwischen einem Paar von Zahlen und einer Sequenz von normalen Zeichen zu unterscheiden (dies wird durch die Symbole <> dargestellt). Dies bedeutet, dass zusätzliche Bits benötigt werden, um zu bestimmen, ob Bits eine Referenz oder tatsächliche Zeichen darstellen.
  • Dieser Typ von Algorithmus und seine Ableitungen davon sind effizient, wenn es darauf ankommt, eine gesamte Datei zu komprimieren. Tatsächlich ist eine der Charakteristiken des LZ77-Algorithmus, dass er „statische" Daten benötigt, um die Kompression durchführen zu können.
  • Mit dem Auftreten des Internet sind jedoch Kommunikationen zwischen zwei oder mehreren Benutzern immer häufiger. Diese Kommunikationen sind entweder unkomprimiert oder komprimiert. Komprimierte Kommunikationen erfordern es, dass der Benutzer eine Kompression der Daten vor dem Abschicken der Kommunikation durchführt, und sie erfordern, dass der Empfänger eine Dekompression durchführt, um die Kommunikation zu lesen. Andererseits erfordern unkomprimierte Kommunikationen eine große Bandbreite.
  • Es gibt daher einen Bedarf, die Bandbreite auf Kommunikationsnetzwerken einzuhalten, während dennoch Datenkompressionen möglich sind, und insbesondere an Systemen und Verfahren, um eine Datenkompression- und Dekompression in Echtzeit durchzuführen.
  • US 4,730,348 (MacCrisken) offenbart ein System zum Komprimieren und Dekomprimieren eines Eingabestrings in Echtzeit, das einen Hash-Generator, der auf einen Zeichenstring von dem Eingabestring anspricht, um einen Indexwert als eine Funktion des Zeichenstrings zu erzeugen; eine Nachschlagetabelle, die eine Vielzahl von adressierbaren Speicherplätzen hat, wobei jeder der einstellbaren Speicherplätze eine Hinweismarke auf eine einstellbare Speicherstelle in einer Nachverfolgungstabelle speichert; eine Validierungseinrichtung, die auf den Indexwert, der von dem Hash-Generator erzeugt wird, und auf die Nachschlagetabelle anspricht, um festzustellen, ob die Hinweismarke, die in der Nachschlagetabelle an einer Adresse entsprechend dem Indexwert gespeichert ist, gültig ist; eine Best-Übereinstimmungs-Auffindeeinrichtung, die auf einer Anzeige von der Validierungseinrichtung, dass die in der Nachschlagetabelle gespeicherten Daten gültig sind, anspricht, um die Länge der längsten möglichen Übereinstimmung zwischen dem Zeichenstring und den Daten von dem Eingabestring zu bestimmen; eine Nachverfolgungstabelle, die eine Vielzahl adressierbarer, miteinander geketteter Listen von Speicherplätzen umfasst, wobei jede der adressierbaren, geketteten Listen der Speicherplätze einen oder mehrere Speicherplätze zum Speichern von Daten umfasst; und einen Token-Generator zum Erzeugen einer Sequenz von Indikatoren, die komprimierte und nicht komprimierte Zeichenstrings von dem Eingabestring darstellen, wobei die Indikatoren in einem Ausgangsstring gespeichert werden.
  • Dennoch gibt es immer noch den Bedarf für eine effizientere Datenkompression und -dekompression in Echtzeit.
  • Zusammenfassung der Erfindung
  • Die vorliegende Erfindung stellt ein System und ein Verfahren zum effizienten und schnellen Komprimieren und Dekomprimieren von Daten in Echtzeit zur Verfügung, wobei mehrere neuartige Ansätze für die Datenkompression, einschließlich der dynamischen Darstellung kodierter Werte, verwendet werden.
  • Eine Ausführungsform der vorliegenden Erfindung verarbeitet Zeichen dadurch, dass überprüft wird, um festzustellen, ob sie vorher in dem Eingabestring zu sehen waren. Wenn nicht, fügt das vorliegende System und das Verfahren sie zu einem Diktionär oder einer Tabelle hinzu, und wenn ja, findet das System und das Verfahren die längste Übereinstimmung, die mit dem vorherigen Auftreten des Zeichens oder der Zeichen und dem oder den gerade überprüften Zeichen möglich ist. Wenn eine Übereinstimmung gefunden wird, hat die vorliegende Erfindung eine Darstellung der Zeichen, die nicht komprimiert werden konnten (wenn Zeichen zwischen der letzten Übereinstimmung und der vorliegenden vorhanden sind), und eine Darstellung für die übereinstimmenden Zeichen. Dieses Verfahren wird wiederholt, bis keine Zeichen in dem Eingabestring mehr vorhanden sind. Das vorliegende System und Verfahren prüft auf vorhergehendes Auftreten von einem oder mehreren Zeichen, und es verwendet eine Nachschlagetabelle für diesen Zweck. Die Nachschlagetabelle enthält einfache Referenzen für gekettete Listen derselben Zeichen. Der erste Knoten der Liste bezeichnet das jüngste Auftreten der Zeichen.
  • Die vorliegende Erfindung verwendet auch einen Vektor von ganzen Zahlen, die Expansionsschemata genannt werden, der eine binäre Darstellung der Länge der nicht komprimierten Zeichen (nlen); die Länge der übereinstimmenden Zeichen (mlen) und die Anzahl der Zeichen, die seit der letzten Über einstimmung verarbeitet worden sind (Versatz). Die Expansionsschemata erzeugen Codes unterschiedlicher Länge, die bei der Darstellung von Werten effizient sind, die genau abfallenden Wahrscheinlichkeitsverteilungs-Funktionen gehorchen. Expansionsschemata liefern auch einen in hohem Maße ökonomischen Weg im Hinblick auf Speicherausnutzung, bei der Speicherung von Bit-Darstellungen. Je nach der Anzahl der Bytes, die verarbeitet worden sind, ändert der Komprimierer seine Expansionsschemata um Änderungen der Wahrscheinlichkeitsverteilung, der Länge sowie des Versatzes aufzuzeigen.
  • Je nach der Anzahl der Bytes, die verarbeitet worden sind, ändert der Komprimirer seine Expansionsschemata, um Änderungen in der Wahrscheinlichkeitsverteilung der Längen und der Versetzungen wiederzugeben.
  • Der Dekomprimirer, der der vorliegenden Erfindung zugeordnet ist, verwendet einen Eingabestring, der aus Token besteht, die den ursprünglichen String darstellen. Der Ausgabestring enthält den dekomprimierten String. Der Dekomprimirer liest ein Token, wenn das Token ein c-Token (ein Bit, das eine nicht komprimierte Sequenz, die nclen und die Zeichen selbst anzeigt) ist, dann liest er die Länge der Sequenz, kopiert diese Zeichen auf den Ausgabestring, liest den c-Token (ein Bit, das die Sequenz, wenn es unmittelbar auf einen anderen c-Token folgt und die Übereinstimmungslänge und ein Versatzpaar oder mlen und Versatz in Kurzform anzeigt) ist, kopiert er mlen – Zeichen mit einem vorgegebenen Versatz zu dem Ausgabestring. Dies geht weiter, bis alle Token gelesen sind.
  • Kurze Beschreibung der Zeichnungen
  • Diese und andere Merkmale und Vorteile der vorliegenden Erfindung sind besser verständlich durch Lesen der folgenden detaillierten Beschreibung, wenn sie im Zusammenhang mit den Zeichnungen genommen wird, in denen:
  • 1 ein Blockdiagramm eines Kompressionssystems gemäß der vorliegenden Erfindung ist;
  • 2 ein Blockdiagramm des Dekompressionssystems gemäß der vorliegenden Erfindung ist;
  • 3 eine schematische Darstellung von Strukturmanipulationen, die die temporäre Speicherstruktur nach dem Stand der Technik umfasst, die eine Referenz nur zu dem letzten Auftreten eines übereinstimmenden Zeichenstrings macht;
  • 4 eine schematische Darstellung von Strukturmanipulationen ist, die die Nachstarttabelle und das Nachverfolgungs-Tabellenfeld umfassen, welches eine gekettete Liste von übereinstimmenden Zeichenstrings umfasst, gemäß einem Merkmal der vorliegenden Erfindung;
  • 5 ein Hochniveau-Flussdiagramm des Kompressionsverfahrens gemäß dem Verfahren und dem System der vorliegenden Erfindung ist;
  • 6 ein Hochniveau-Flussdiagramm des Dekompressionsverfahrens gemäß dem Verfahren und dem System der vorliegenden Erfindung ist;
  • 7 ein detailliertes Flussdiagramm des Kompressionsverfahrens gemäß dem Verfahren und dem System der vorliegenden Erfindung ist;
  • 8 ein detailliertes Flussdiagramm des Dekompressionsverfahrens gemäß dem Verfahren und dem System der vorliegenden Erfindung ist;
  • 8 ein detailliertes Flussdiagramm der Schreibe-C-Token-Unterroutine der vorliegenden Erfindung ist;
  • 9 ein detailliertes Flussdiagramm der Schreibe-NC-Token-Unterroutine der vorliegenden Erfindung ist;
  • 10 ein detailliertes Flussdiagramm der Hash-Berechnungs-Unterroutine der vorliegenden Erfindung ist;
  • 11 ein detailliertes Flussdiagramm des Verfahrens ist, um den längsten übereinstimmenden String gemäß einem Merkmal der vorliegenden Erfindung zu finden;
  • 12 ein detailliertes Flussdiagramm des Verfahrens ist, um die Nachschlagetabelle und die Nachverfolgungstabelle auf den neuesten Stand zu bringe; und
  • 13 eine schematische Darstellung eines Ausgabestrings ist, der verschiedene unkomprimierte Daten und Tokens gemäß einem Merkmal der vorliegenden Erfindung enthält.
  • Beschreibung eines bevorzugten Ausführungsbeispiels
  • Die vorliegende Erfindung ist insbesondere auf ein System und ein Verfahren zur Verwendung in Paketbasierenden Kommunikationen gerichtet, obwohl ihre Verwendung nicht darauf beschränkt ist. Im Allgemeinen umfassen solche Kommunikationen einen Kopf und die Kommunikationsdaten. Die vorliegende Erfindung ist auf die Kompression und Dekompression der Daten selbst gerichtet, um die Bandbreite (d. h. die Zeit) zu reduzieren, die zum Versenden der Nachricht über ein Netzwerk erforderlich ist. Eine der wichtigen Überlegungen der vorliegenden Erfindung ist es, die Daten in Echtzeit komprimieren und dekomprimieren zu können. Obwohl die vorliegende Erfindung als eine Reihe von Computersoftwaremodule beschrieben und erläutert wird, ist dies keine Einschränkung der vorliegenden Erfindung, sondern stellt nur ein Ausführungsbeispiel und die gegenwärtig bevorzugte Ausführungsform dar.
  • Das System und das Verfahren der vorliegenden Erfindung ermöglicht eine mittlere Kompressionsrate von 30% bei typischen Beispielen einer Internetkommunikation, die Standarddienstleistungen, beispielsweise „ftp", „http", „telnet", „flash", „java", „streaming" und „mpeg", verwenden. Bei einer anfänglichen Kommunikationssitzung mit 10 Megabyte und einer mittleren Kompressionsrate von 30% ist beispielsweise die Information, die wirklich über das Netzwerk gesendet wird, 7 Megabyte. Das System und das Verfahren der Erfindung gestattet somit eine Optimierung von 1,4:1.
  • Die Kompressionsrate steht in direkter Beziehung zu der Natur der Information, die übertragen werden soll. Es ist daher unmöglich, eine konstante Kompressionsrate während einer Übertragung vorherzusagen. Wenn es vorkommt, dass die Natur der Information, die gesendet werden soll, nicht komprimierbar ist, und dass die Verwendung des Systems und des Verfahrens der vorliegenden Erfindung zu einer Erhöhung der Größe des Pakets führen würde, würde das Paket gesendet, ohne komprimiert zu werden.
  • Das System und das Verfahren der vorliegenden Erfindung benutzt den LZ77-Kompressionsalgorithmus mit wichtigen Modifikationen und einer Optimierung als Basis, die das Kompressionsverhältnis an eingeschränkten Mengen der Information (1,500 Byte im Falle von Internet) maximiert, um es auf der Nutzlast eines Informationspakets während seiner Übertragung zu verwenden. Ferner wurde die Leistungsfähigkeit erhöht, um die Kompression in Hochgeschwindigkeits-Übertragungsstrecken anzuwenden.
  • 1 ist ein Blockdiagramm 10 des Systems zur Durchführung der Datenkompression entsprechend der Lehre der vorliegenden Erfindung. Der Eingabestring 12 ist ein Vektor aus Acht-Bit-Zeichen (in diesem Zusammenhang bedeutet „Zeichen" einen beliebigen, möglichen Wert, den ein Feld aus acht Bits annehmen kann, d. h. es existieren 28 = 256 mögliche Zeichen). Bei der Kompression enthält der String die zu komprimierenden Daten, und die Anzahl der Zeichen ist bekannt. Bei der Dekompression enthält dieser String den komprimierten String. Der Ausgabestring 14 ist ein Vektor aus Acht-Bit-Zeichen. Bei der Kompression enthält dieser String die komprimierten Daten. Bei der Dekompression enthält er den dekomprimierten String.
  • Der Hash-Generator 16 ist für die Berechnung der Indizes der Nachschlagetabelle verantwortlich. Die Nachschlagetabelle 18, 4, ist ein Feld von 65536 Hinweismarken (Pointern) zu der Nachverfolgungstabelle (tractab) 20. Die Nachschlagetabelle 18 muss vor der Kompression nicht initialisiert werden. Die Indizes in der Nachschlagetabelle werden von dem Hash-Generatormodul erzeugt. Eine gültige Hinweismarke in der Nachschlagetabelle zeigt auf einen Schlitz in der Nachverfolgungstabelle, die eine einfache gekettete Liste von Auftrittereignissen desselben Zeichenpaares enthält. Das erste Element der Liste ist der am meisten zeitnahe Auftritt. Die Gültigkeit einer Hinweismarke in der Nachschlagetabelle wird durch das Validierungsmodul überprüft.
  • Die Nachverfolgungstabelle 20 ist eine Struktur, die einen sequentiellen Suchlauf gestattet, um den längsten übereinstimmenden String in den bereits aufgetretenen Strings zu finden, die mit demselben Zeichenpaar beginnen. Jeder tracktab-Schlitz enthält: eine Hinweismarke auf den Eingabespeicher und eine Hinweismarke auf den vorher angetroffenen tracktab-Schlitz, der den Hash-Wert des gleichen Zeichenpaares hat. Dies bedeutet, dass jedes Mal dann, wenn ein Paar angetroffen wird, ein neuer tracktab-Schlitz erzeugt und mit dem vorhergehenden verknüpft wird. Die Hinweismarke in der Nachschlagetabelle zeigt immer auf das am meisten zeitnahe Auftreten des Zeichenpaares. Im Gegensatz dazu hat die Nachschlagetabelle 21, 3, des Standes der Technik, die mit LZ77-Kompressions- und Dekompressoins-Algorithmen verwendet wurde, nur einen Eintrag, der nur auf das letzte Auftreten des Zeichenpaares hinweist.
  • Der Hash-Generator 16 berechnet den Index wie folgt: er wird mit einem Zeichenpaar erzeugt, das gegenwärtig einer Prüfung unterliegt (ein Zeichen, auf das durch „look_cur" 22, 4, hingewiesen wird, und das nächste oder nachfolgende Zeichen). Er wird durch die Konkatenation dieser beiden Zeichen vorgegeben. Da jedes Zeichen acht Bit breit ist, ist somit der Hash-Code 16 Bit breit, wodurch sich Werte zwischen 0 und 65535 ergeben. Der Index, der durch das Hash-Generatormodul gegeben wird, wird verwendet, um auf die Hinweismarke zu dem am meisten zeitnahen tracktab-(Nachverfolgungstabellen-)Schlitz zuzugreifen, der die Referenz zu dem gleichen Paar von Bytes wie der der Prüfung unterliegende bildet (bei look_cur).
  • Das Validierungsmodul (oder die Validierungseinrichtung) 24 verifiziert, dass eine gegebene Hinweis marke in der Nachschlagetabelle 18 eine gültige Hinweismarke ist. Um eine gültige Hinweismarke zu sein, muss sie eine Referenz zu einem tracktab-Schlitz innerhalb der Nachverfolgungstabelle 20 haben (zwischen dem Start der Nachverfolgungstabelle und dem letzten oder am meisten zeitnahen Element), und der tracktab-Schlitz muss eine Referenz zu einem Paar von Bytes, das seinem Hash-Code entspricht. Wenn diese Bedingungen wahr sind, dann ist die Hinweismarke in der Nachschlagetabelle 18 gültig, und der Schlitz, auf der er in der tracktab (Nachverfolgungstablle) als Referenz hinweist, ist ebenfalls gültig.
  • Das Best-Übereinstimmungs-Auffindungsmodul 26 sucht nach einem längsten, übereinstimmenden String durch Überprüfung des tracktab-Feldes. Der Best-Übereinstimmungs-Finder 26 startet an dem tracktab-Schlitz, auf den durch die Eingabe in die Nachschlagetabelle 18 hingewiesen wird. Der Eintrag in dieser Nachschlagetabelle ist das am meisten zeitnahe (letzte) Auftreten der übereinstimmenden Zeichen/des übereinstimmenden Zeichens unter Überprüfung. Der Best-Übereinstimmungs-Finder 26 beginnt mit der Überprüfung von Zeichen von der hingewiesenen Position in dem tracktab-Schlitz an, um die maximale Länge von jeder möglichen Übereinstimmung zu bestimmen, und er geht dann zu der Position und der Länge der längsten Übereinstimmung zurück, indem er sequentiell jeden tracktab-Schlitz in der Kette überprüft, auf die durch den Nachschlagetabelleneintrag 18 hingewiesen wird und jedes vorhergehende Auftreten Zeichenpaares unter Überprüfung.
  • Das tracktab-Update-Modul modifiziert die Nachverfolgungstabelle 20 und die Nachschlagetabelle 18, so dass sie Referenzen zu allen möglichen Auftritten des Zeichenpaares bilden, die vorher in dem Eingabestring gesehen worden sind. Wie oben erwähnt wurde, stellt jede gültige (wie durch das Validierungsmodul 24 bestimmt) Nachschlagetabellen-Hinweismarke 28, die durch einen Index gegeben ist, der von dem Hash-Generator 16 mit einem Zeichenpaar berechnet wird, einen Hinweis auf einen tracktab-Schlitz 30 des am meisten zeitnahen Auftritts dieses Zeichenpaares. Dieser Schlitz hat auch eine Hinweismarke 32 zu dem vorherigen Auftritt des Paares. Das Update-Modul 34 erzeugt einen neuen tracktab-Schlitz, initialisiert seine Zeichen-Hinweismarke auf die Position des in der Überprüfung befindlichen Zeichens (bei look_cur), initialisiert seine Hinweismarke zu einem vorhergehenden Auftritt auf die Adresse des tracktab-Schlitzes, auf die durch die Nachschlagetabelle-Hinweismarke hingewiesen wird, und initialisiert die Nachschlagetablle-Hinweismarke auf die Adresse des neuen tracktab-Schlitzes (am meisten zeitnaher Auftritt des Byte-Paares).
  • Das Token-Generatormodul 36 übernimmt die Aufgabe, die Token zu erzeugen, die Sequenzen von nicht komprimierten Zeichen (nc-Token) oder übereinstimmenden/komprimierten Zeichen (c-Token) repräsentieren. Er schreibt auch diese Token zu dem Ausgabestring 14. Das Token-Generatormodul 36 modifiziert auch die Expansionsschemata, die zum Schreiben von nclen, mlen und Versatz(offset)werten verwendet werden, auf der Grundlage der Position der Nachschlage-Positionsmarke in dem Eingabestring.
  • Das Token-Lesemodul 40, 2, ist Teil des Dekomprimierers 42. Es liest Token von dem Eingabestring 14 (welches der Ausgabestring des Komprimierers 10 ist) und extrahiert nclen-, mlen- und Versatz-Wert. Das Token-Lesemodul 40 teilt auch dem Unterstring-Kopiermodul 44 mit, wie viele Zeichen zu dem Ausgabestring 46 beschrieben werden sollen und wo diese Zeichen zu erhalten sind.
  • Wie alle LZ77-Komprimierer hat die vorliegende Erfindung ein Zeichenfenster, auf das Bezug genommen werden kann, und Zeichen außerhalb des Fenster können nicht für die Kompression verwendet werden. Eine in Bezug auf Speicherplatz effiziente Art der Speicherung des tracktab-Feldes und des Eingabestrings ist ein Ringspeicher. In diesem Zusammenhang werden eine festgelegte Anzahl von tracktab-Schlitzen verwendet, und alte Schlitze werden durch neuere Schlitze ersetzt.
  • Die Schritte, die durch das Verfahren der vorliegenden Erfindung verwendet werden, um Daten zu komprimieren, sind recht einfach. Sie können, wie in 5 gezeigt ist, wie folgt zusammengefasst werden: nach dem Bestimmen, dass mehr als ein (1) Zeichen in dem Eingabestring vorhanden ist, Schritt 60, und nach dem Berechnen eines Hash-Wertes zu dem gegenwärtigen, überprüften Zeichenpaar, Schritt 62, verarbeitet das Verfahren Zeichen, indem es überprüft, ob sie vorher in dem Eingabestring gesehen worden sind, Schritt 64. Wenn nicht, füge sie zu der Nachschlagetabelle hinzu, Schritt 66, und, wenn ja, finde die längste mögliche Übereinstimmung mit dem vorhergehenden Auftreten der Zeichen oder des Zeichens unter Überprüfung, Schritt 68, und führe ein Update der Nachschlagetabelle durch, Schritt 70. Wenn eine Übereinstimmung gefunden wird, schreibe ein nc-Token, das die Zeichen repräsentiert, die nicht komprimiert werden konnten (wenn jegliche Zeichen zwischen der letzten Übereinstimmung und der gegenwärtigen vorhanden sind) und ein c-Token, um die Übereinstimmung zu repräsentieren, Schritt 72. Wiederhole dieses Verfahren, bis keine Zeichen in dem Eingabestring übrig sind.
  • Das Verfahren der vorliegenden Erfindung überprüft die früheren Auftritte eines Zeichenpaares und verwendet eine Nachschlagetabelle 18, 4, zu diesem Zweck. Die Nachschlagetabelle referenziert einfach gekettet Listen 31 derselben Zeichenpaare. Der erste Knoten 50 der Liste referenziert das am meisten zeitnahe Auftreten des Zeichenpaares. Die binäre Darstellung von nclen-, mlen- und Versatz-Werten werden durch einen Vektor aus geraden Zahlen gegeben, was „Expansionsschemata" genannt wird. Expansionsschemata erzeugen Codes variabler Länge, die bei der Darstellung von Werten effizient sind, die strikt abfallenden Wahrscheinlichkeitsverteilungsfunktionen gehorchen. Expansionsschemata tiefem auch einen in hohem Maße ökonomischen Weg in Bezug auf die Speicherausnutzung zum Speichern von Bit-Darstellungen.
  • Im wesentlichen arbeitet das Verfahren der vorliegenden Erfindung auf dem folgenden Prinzip: Es ist ein Allgemeinplatz, dass die Häufigkeit, mit der jede Länge in der Kompression angetroffen wird, nach dem Wert der Länge stark abnimmt. Beispielsweise haben viele Tests gezeigt, dass man in etwa 50% der Zeit eine Länge von 2 schreibt, in 25% der Zeit von 3 schreibt, in 12% der Zeit von 4 schreibt usw., durch Division jeder Vergrößerung um 1 der Länge. Folglich ist es für den Zweck der vorliegenden Erfindung wesentlich, den Wirkungsgrad bei all den kurzen Sequenzen so weit wie möglich zu maximieren, da sie viel häufiger auftreten. Dies hat selbstverständlich als Ergebnis eine Strafe für die Längen größer als 7, diese sind jedoch sehr selten, d. h. zwischen 5% und 10% der Zeit.
  • Folglich ist das Verfahren der vorliegenden Erfindung für die Kompression von kleinen Sequenzen, beispielsweise solchen, die auf einem Datenpaket auf einem Netzwerk zu finden sind, wo die Länge im Allgemeinen kleiner ist, gut geeignet. Da die Kompression auf kleine Sequenzen gerichtet ist, muss man ferner das Schreiben der Übereinstimmungslänge, der nicht komprimierten Länge und des Versatzes als eine Funktion der Größe der Daten maximieren.
  • Zur Unterscheidung zwischen Sequenzen von Zeichen und Übereinstimmungen (Paare von Zahlen <Länge, Versatz>) geht das Verfahren der vorliegenden Erfindung wie folgt vor. Wenn das gelesene Bit eine 0 ist, erfolgen als nächstes eine Sequenz von Zeichen und eine Übereinstimmung, wenn das gelesene Bit 1 ist, folgt als nächstes eine Übereinstimmung. Dies geht, weil zwei aufeinander folgende Sequenzen von Zeichen als eine betrachtet werden können, d.h. „<abra><cada>" ist äquivalent zu „<abracada>". Da eine Übereinstimmung immer einer Sequenz von Zeichen folgt, ist nur ein Bit erforderlich, um zwischen „<seq><mlen, offset>" und „<mlen, offset>" zu unterscheiden. Es ist auch erfor derlich, die Länge der Sequenz der Zeichen zu kennen. Dies wird gewöhnlich als nicht komprimierte Länge oder kurz nc-Länge bezeichnet. Ein nc-Token entspricht dem Bit, das die Sequenz, die nc-Länge und die Zeichen selbst anzeigt. Ein komprimierter Token oder c-Token besteht aus einem Bit, das die Sequenz anzeigt, wenn er unmittelbar einem anderen c-Token folgt, und die Übereinstimmungslänge und das Versatz-(OFFSET) Paar oder mlen und Offset in Kurzform. Die Verfahren zum Beschreiben eines c-Tokens und eines nc-Tokens sind im Einzelnen in den 9 und 10 gezeigt und beschrieben.
  • Der Dekomprimierer gemäß der vorliegenden Erfindung ist recht einfach. In diesem Zusammenhang besteht der Eingabestring aus Tokens, die den ursprünglichen String repräsentieren und am Ende enthält der Ausgabestring den dekomprimierten String. Wenn zu lesende Bytes in dem Eingabstring übrig sind, Schritt 80, 6, liest der Dekompremierer einen Token, Schritt 82. Wenn der Token ein nc-Token ist, liest der Dekompremierer die Länge der Sequenz, kopiert diese Zeichen zu dem Ausgabestring, liest den c-Token, der folgt, und kopiert mlen Zeichen an dem vorgegebenen Versatz zu dem Ausgabestring, Schritt 84. Wenn der Token ein c-Token ist, kopiert der Dekompremierer mlen – Zeichen an einem vorgegebenen Versatz zu dem Ausgabestring, Schritt 84. Dies geht weiter, bis alle Token gelesen sind.
  • Ein Merkmal des Verfahrens und des Systems der vorliegenden Erfindung ist die Art und Weise, binäre Darstellungen zu Längen und Versatzwerten zuzuordnen. Dies kann als dynamische Modifikation der Expansionsschemata beschrieben werden. Expansionsschemata sind Vektoren von ganzen Zahlen, die expandiert werden können, um alle binären Darstellungen der gewünschten Werte zu erhalten. Je nach der Anzahl der Bytes, die verarbeitet worden sind, verändert der Komprimierer seine Expansionsschemata, um Änderungen in der Wahrscheinlichkeitsverteilung der Längen und Versatzwerte wiederzugeben.
  • Es wird die Kompression eines Stroms oder Eingabestrings aus 1000 Zeichen betrachtet. Es ist ersichtlich, dass nicht alle Werte für die Länge und den Versatz einer Übereinstimmung möglich sind. Wenn die zwei Zeichen, die gerade studiert werden, das fünfte und sechste Zeichen sind, ist beispielsweise bekannt, dass es möglich ist, eine Übereinstimmung mit einem Versatz länger als 4 und/oder einer Übereinstimmungslänge länger als 996 zu haben. Da es in hohem Maße uneffizient ist, binäre Darstellungen Werten zuzuordnen, die nicht verwendet werden, definieren wir Expansionsschemata, die für einen vorgegebenen Bereich in dem Eingabestring optimal sind. Jedes Element a[i] des mlen- und nclen-Expansionsschemas ist ein Inkrement zu der Zahl der Bits, die für die nächsten 2a[i]-1 Werte zu verwenden ist. Wir nehmen beispielsweise an, dass das Expansionsschema {1,1,2} ist, was bedeutet, dass der erste Wert 21-1 auf 1 Bit repräsentiert wird. Da das zweite Element des Expansionsschemas eine 1 ist, wird der nächste Wert auf zwei Bits repräsentiert (die Anzahl der Bits des vorhergehenden Wertes plus 1). Die letzten drei Werte werden auf vier Bits repräsentiert. Die Werte, die wir mit diesem Schema repräsentieren können, sind in Tabelle 1 unten gezeigt: Tabelle 1: Beispiele der Expansion des {1,1,2}-Expansionsschemas
    Vektor
    Wert 1 1 2 Anzahl der Bits
    1 1 1
    2 0 1 2
    3 0 0 01 4
    4 0 0 10 4
    5 0 0 11 4
  • Wie oben erwähnt wurde, sind Expansionsschemata ein effizienter Weg zum Speichern der binären Darstellung der zu kodierenden Werte. In dem vorhergehenden Beispiel würden wir einfach drei Zahlen ({1, 1, 2}) statt fünf binären Darstellungen und ihre Länge speichern.
  • Während mehr und mehr Bytes in der Eingabe verarbeitet werden, nimmt der maximal mögliche Versatz zu und der Übereinstimmungslängenwert nimmt ab. Wir können dies bei der dynamischen Modifizierung der Expansionsschemata sowohl für den Versatz als auch für die Übereinstimmungslänge ausnutzen. Wir können auch Expansionsschemata so definieren, dass sie die Länge von nicht komprimierten Sequenzen ausdrücken. Durch Berechnen der Wahrscheinlichkeitsverteilungen der Übereinstimmungslängen, der Versatzwerte und der Längen der nicht komprimierten Sequenzen auf der Grundlage der Position in dem Eingabestring kann die vorliegende Erfindung die optimalen, zu verwendenden Expansionsschemata für jeden ausgewählten Bereich von Positionen finden.
  • Die vorliegende Erfindung nutzt Vektoren von Expansionsschemata aus, um den Prozessor in die Lage zu versetzen, die Codes, die den Übereinstimmungslängen zugeordnet sind, die Versatzwerte und die Länge der nicht komprimierten Sequenzen dynamisch zu ändern. Drei diskrete Vektoren werden verwendet, weil die Wahrscheinlichkeitsverteilungen für diese drei Elemente recht unterschiedlich voneinander sind, und weil unterschiedliche Vektoren es ermöglichen, dass die Codes an die Verteilungen angepasst werden. Die Anzahl der Expansionsschemata pro Vektor muss gleich groß sein wie die erwünschte Anzahl von dynamischen Änderungen in den Codes (sie kann von 1 bis N, der maximalen Größe der zu komprimierenden Daten, gehen). Die Anzahl kann beliebig ausgewählt werden, oder sie kann durch eine ordnungsgemäße, statistische Analyse bestimmt werden. Die Position, an der der Komprimierer von einem Expansionsschema zu dem nächsten wechselt, kann ebenfalls beliebig gewählt oder durch eine statistische Analyse bestimmt werden.
  • Das Folgende ist ein Beispiel eines Codes des C-Codes, der einen Vektor für die Positionen liefert, an denen die Expansionsschemata geändert werden könnten, wobei neunzehn Änderungen umfasst werden.
    Unsigned int bsizesswitch [19] =
    (32, 64, 96, 128, 192, 256, 320, 384, 448, 512, 640, 768, 896, 1024, 1280, 1536, 2048, 3072, 4096);
  • Dies bedeutet, dass, wenn mehr als 31 Byte der Eingabe verarbeitet worden sind, der Prozessor das gegenwärtige Expansionsschema in ein zweites Expansionsschema ändert, wenn mehr als 63 Byte verarbeitet worden sind, ändert er das Expansionsschema auf ein drittes, und dies geht so weiter, bis das Ende der Eingabe erreicht worden ist. Wenn keine Änderungen auftreten, wird das gleiche Expansionsschema beibehalten. Ein spezifischer Vektor von Positionen könnte auch für jeden Typ von Codes existieren, die wir verändern wollen (Übereinstimmungslängen, Offsetwerte usw.).
  • Tabelle 2: Bit-Darstellungen. Gegeben durch das mlen – Expansionsschema {1,2,4,4,7,12}
    Figure 00140001
  • Übereinstimmungslängen (mlen) können gemäß dem folgenden Vektor von Expansionsschemata geschrieben werden:
    Unsigned int mlen_exp[][6] =
    {{1, 2, 4, 4, 7, 12},
    {1, 2, 5, 6, 8, 12},
    {1, 2, 4, 4, 7, 12},
    {1, 2, 5, 7, 9, 12}
    {1, 2, 5, 7, 9, 12}
    {1, 2, 5, 7, 9, 12}
    {1, 2, 5, 7, 9, 12}},
  • Diese Vektoren enthalten 7 unterschiedliche Expansionsschemata mit je 6 ganzen Zahlen. Normalerweise werden die tatsächlichen Werte, die in den Expansionsschemata enthalten sind, entsprechend den Ergebnissen einer vorherigen Analyse der Messdaten zugeordnet. Die Expansionsschemata können eine beliebige Anzahl von ganzen Zahlen enthalten (solange es genügend Codes gibt, um alle möglichen Werte darzustellen), und der Vektor der Expansionsschemata sollte eine Anzahl von Expansionsschemata enthalten, die gleich der Anzahl ist, mit der eine dynamische Änderung der Codes erwünscht ist.
  • Binäre Codes, die Übereinstimmungslängen repräsentieren, starten an einem Wert 2, weil die minimale Übereinstimmungslänge, die verwendet werden kann, die Länge 2 ist. In anderen Worten werden keine binären Darstellungen für die Werte 0 oder 1 für mlen verschwendet, da sie ohnehin nicht verwendet würden. Tabelle 3: Bit-Darstellungen gegeben durch das nclen – Expansionsschema {1,2,2,3,5,12}
    Vektor
    Wert 1 2 2 3 5 12 Anzahl der Bits
    1 1 1
    2 0 01 3
    3 0 10 3
    4 0 11 3
    5 0 00 01 5
    6 0 00 10 5
    7 0 00 11 5
    8 0 00 00 001 8
    ... ... ...
    14 0 00 00 111 8
    15 0 00 00 000 00001 13
    ... ... ...
    45 0 00 00 000 11111 13
    46 0 00 00 000 00000 000000000001 25
    ... ... ...
    4140 0 00 00 000 00000 111111111111 25
  • Die Längen der nicht komprimierten Byte-Sequenzen (nclen) werden ebenfalls unter Verwendung von Expansionsschemata kodiert. Diese Vektoren sind jedoch unterschiedlich, da ihre Wahrscheinlichkeiten unterschiedlich sind. Nicht komprimierte Längen (nclen) könnten entsprechend den folgenden Vektor-Expansionsschemata geschrieben werden:
    Unsigned int nclen_exp[][6] =
    {{1, 2, 3, 3, 5, 12},
    {1, 2, 3, 4, 5, 12},
    {1, 2, 4, 5, 7, 12},
    {1, 2, 4, 5, 7, 12},
    {1, 2, 4, 5, 7, 12},
    {1, 2, 4, 5, 7, 12}}
  • Tabelle 3 gibt ein Beispiel von nclen-Werten und ihrer binären Darstellung gegeben durch das Expansionsschema {1, 2, 2, 3, 5, 12}. Die Versatz-Codes ändern sich ebenfalls dynamisch in ähnlicher Weise unter Verwendung des gleichen Prinzips. Der Unterschied zwischen den Codes, die für die Übereinstimmungslängen und die Versatzwerte erzeugt werden, besteht darin, dass den Versatzwerte ein Längenindikator mit einem festen Bi voran gestellt wird, und dass die ganzen Zahlen der Expansion nicht die gleiche Bedeutung haben. In dem bevorzugten Ausführungsbeispiel wird die Länge des Feldes auf drei Bits gesetzt. Tabelle 4: Bit-Darstellungen gegeben durch das Versatz-Expansionsschema {1,1,1,1,1,1,4}
    Versatz (offset) Versatz-Code Anzahl der Bits
    Indikator Rest
    1 000 0 4
    2 000 1 4
    3 001 0 4
    4 001 1 4
    5 010 0 4
    6 010 1 4
    7 011 0 4
    8 011 1 4
    9 100 0 4
    10 100 1 4
    11 101 0 4
    12 101 1 4
    13 110 00 5
    14 110 01 5
    15 110 10 5
    16 110 11 5
    17 111 0000 7
    ... ... ... ...
    32 111 1111 7
  • Der Drei-Bit-„Indikator" teilt dem Dekomprimierer mit, wie viele Bits gelesen werden sollen, um den Versatz zu bestimmen. Die Anzahl der zu lesenden Bits sind ganze Zahlen des Expansionsschemas, und ihre Position entspricht den Drei-Bit-Indikatoren. Die Werte, die von den vorhergehenden Indikatoren verwendet werden, werden auch von dem gewünschten Wert subtrahiert, um so wenig Code-Raum wie möglich zu verschwenden. Das folgende ist ein Beispiel für Expansionsschemata von Versatzwerten.
    Unsigned int nclen_exp[][8] =
    {{1, 1, 1, 1, 1, 1, 2, 4},
    {1, 1, 2, 3, 3, 3, 3, 5},
    {2, 4, 4, 4, 4, 4, 6, 6},
    {2, 5, 5, 5, 6, 6, 7, 7},
    {4, 5, 5, 6, 7, 7, 8, 8},
    {5, 6, 8, 8, 8, 8, 9, 11}}
  • Wenn die verwendete Versatz(offset)-Expansion gleich {1, 1, 2, 3, 3, 3, 3, 5) ist, wird der Wert 5 als 01000 kodiert. Dieses Verfahren ist wie folgt: für jede der Zahlen offset_exp[1][i] der Expansion soll 2(offset_exp[1][i]) errechnet und überprüft werden, ob sie größer als die zu kodierende Zahl ist. Wenn sie größer ist, subtrahiere diesen Wert von der zu kodierenden Zahl, inkrementiere i und wiederhole dieses Verfahren, bis die erhaltene Zahl kleiner als 2(offset_exp[1][i]) ist. Subtrahiere 1 von dem Rest der zu kodierenden Zahl (dies geschieht deshalb, weil wir keinen Code benötigen, um einen Versatz von 0 darzustellen, und deshalb ziehen wir diese Möglichkeit ab). Schreibe i auf drei Bits und schreibe den Rest der Zahl auf offset_exp[1][i]-Bits. In dem vorhergehenden Fall ergibt dies 5-21-21-1=0 bei i=2, so dass die binäre Darstellung gleich 01000 ist, d. h. 2 auf drei Bits konzentriert mit dem Wert 0 auf 2 Bit. Die Tabelle 4 ist ein Beispiel von Versatzwerten und ihrer binären Darstellung, wie sie durch das Expansionsschema {1, 1, 1, 1, 1, 1, 2, 4} gegeben ist.
  • Als Beispiel eines teilweisen Ausgabestrings 100 zeigt 13 den Aufbau des Ausgabestrings in Begriffen von Zeichen (im Falle keiner Übereinstimmung) und Token (sowohl Übereinstimmungs- als auch Nicht-Übereinstimmungs-Token). Es sei angenommen, dass der zu komprimierende Zeichenstring gleich „abracadebrabrac" ist, sind die Komprimierungsschritte wie folgt (es ist zu beachten, dass den binären Zahlen der Buchstabe „b" nachgestellt ist, um sie von den Standardzahlen auf der Basis von 10 unterscheiden): der Hash-Generator erzeugt einen Index mit den ersten zwei (2) Zeichen „ab"; die Validierungseinrichtung bestimmt, ob dieses Zeichenpaar vorher aufgetreten ist. In dem gegenwärtigen Beispiel sind sie nicht aufgetreten, und daher werden die Nachschlagtabelle und die Nachverfolgungstabelle auf den neuesten Stand gebracht, so dass sie die Referenz auf dieses Zeichenpaar enthält. Der Komprimierer kodiert dann das nächste Zeichenpaar („br"), gefolgt von dem nächsten Zeichenpaar („ra") usw. solange keine Übereinstimmung auftritt, und er macht ein Update der Datenstrukturen, bis er eine Übereinstimmung findet. Das zweite Mal, wenn der Zeichenpaarstring „br" auftritt, stellt die Validie rungseinrichtung eine Übereinstimmung fest. Der Best-Übereinstimmung-Finder berechnet die Länge der Übereinstimmung und findet eine Übereinstimmungslänge (mlen) von drei (3) Zeichen „bra", der Versatz (Anzahl von Zeichen seit dem Beginn der vorhergehenden Übereinstimmung) ist 7, und die Anzahl der nicht komprimierten Zeichen (nclen) ist 8 (d. h. die Zeichen „abracade").
  • Der Token-Generator erzeugt dann einen nc-Token 102 und einen c-Token 103 zu dem Ausgabestring 100. Der nc-Token besteht aus einer Marke (ncm) 104 (das Bit „0" in diesem Beispiel), die eine nicht komprimierte Sequenz anzeigt, gefolgt von dem nclen-8-Code und der Ascii-Darstellung der 8 Zeichen selbst. Der c-Token 103 enthält den mlen-3-Code und den Versatz-7-Code. Die Bit-Muster werden entsprechend den Expansionsschemata {1, 2, 2, 3, 5, 12} für den nclen, {1, 2, 4, 4, 7, 12} für den mlen und {1, 1, 1, 1, 1, 1,2, 4} für den Versatz erzeugt. Die Expansionsschemata des ersten Niveaus werden verwendet, weil die Anzahl der verarbeiteten Zeichen kleiner als 32 Zeichen ist (der erste Wert des Bsizeswitch-(Umschalt) Vektors). Dies ergibt den Code 00000001(b) für einen nclen von 8, 001(b) für einen mlen von 3 und 0110(b) für einen Versatz von 7.
  • Das Verfahren startet wiederum und überprüft nun den nächsten Zeichenstring, das Zeichenpaar „br". Die Validierungseinrichtung erfasst eine Übereinstimmung, der Best-Übereinstimmungs-Finder berechnet eine Übereinstimmung der Länge 3 („bra") mit dem vorherigen Auftreten von „br" und eine Übereinstimmungslänge von 4 („brac") mit dem ersten Auftreten. Der mlen von 4 wird als beste Übereinstimmung ausgewählt, sein Versatz ist 10. Der Token-Generator gibt dann einen anderen c-Token 105 aus. Der c-Token 105 besteht aus einer komprimierten Marke cm 106 (das Bit 1), da der letzte Token ein c-Token war, einem mlen von 4 (beschrieben als 010(b)) und einem Versatz von 10 (geschrieben als 1001(b)).
  • Modifikationen und Ersatzmerkmale durch einen Durchschnittsfachmann werden als innerhalb des Schutzumfangs der vorliegenden Erfindung betrachtet, der nicht eingeschränkt ist mit Ausnahme durch die folgenden Ansprüche.
  • 1
    • 12 = Eingabestring
    • 34 = Nachverfolgungstabellen-Update-Modul
    • 16 = Hash-Generatormodul
    • 24 = Validierungsmodul (Validierungseinrichtung)
    • 26 = Best-Übereinstimmungs-Findermodul
    • 36 = Token-Generatormodul
    • 14 = Ausgabestring
  • 2
    • 14 = Eingabestring
    • 40 = Token-Lesemodul
    • 44 = Kopiermodul-Unterstring
    • 46 = Ausgabestring
  • 3
    • PRIOR ART = Stand der Technik
    • COPIED AND ANALYZED BYTES = kopierte und analysierte Bytes
    • NOT COPIED AND NOT ANALYZED BYTES = nicht kopierte und nicht analysierte Bytes
    • START OF INPUT STORE = Start von Eingabespeicherung
    • LOOK CUR = Lesecursor LOOK cur
    • END OF INPUT STORE = Ende von Eingabespeicherung
    • TEMPORARY STORE = Zeitweise Speicherung
  • 4
    • COPIED AND ANALYZED BYTES = kopierte und analysierte Bytes
    • NOT COPIED AND NOT ANALYZED BYTES = nicht kopierte und nicht analysierte Bytes
    • START OF INPUT STRING = Start von Eingabestring
    • LOOK CUR = Lesecursor LOOK CUR
    • END OF INPUT STRING = Ende von Eingabestring
    • LOOKUP TABLE = Nachschlagetabelle
    • TRACKTAB ARRAY = Nachverfolgungstabellenfeld
  • 5
    • COMPRESSION = Komprimierung
    • 60 = Ist mehr als ein Zeichen in dem Eingabestring? (Eingabestringmodul)
    • No = Nein
    • Yes = Ja
    • WRITE LAST NCTOKEN TO OUTPUT STRING (TOKEN GENERATOR MODULE) = Schreibe letzten NC-Token zu dem Ausgabestring (Token-Generatormodul)
    • 62 = Berechne Hash-Wert mit dem gegenwärtigen Zeichenpaar (Hash-Generatormodul)
    • 66 = Mache Update der Nachschlagetabelle und des Nachverfolgungstabellenfeldes auf die gegenwär tige Position (Nachverfolgungstabellen-Update-Modul)
    • 64 = Wurde diesem Paar in dem Eingabestring vorher begegnet? (Validierungsmodul)
    • 68 = Berechne Best-Übereinstimmungs-Länge (Best-Übereinstimmungs-Findermodul)
    • 70 = Mache Update der Nachschlagetabelle und des Nachverfolgungstabellenfeldes für alle Elemente in dem übereinstimmenden String (Nachfolgetabelle-Updatemodul)
    • 72 = Schreibe C-Token und NC-Token zu dem Ausgabestring (Tokengeneratormodul)
    • END COMPRESSION = Ende der Komprimierung
  • 6
    • DECOMPRESSION = Dekomprimierung
    • 80 = Sind alle Bytes des Eingabestrings verarbeitet? (Eingabestring)
    • No = Nein
    • Yes = Ja
    • 82 = Lese Token (Tokenlesemodul)
    • 84 = Kopiere dekomprimierten Unterstring zu dem Ausgabestring (Unterstring-Kopiermodul)
    • END DECOMPRESSION = Ende der Dekomprimierung
  • 7A
    • COMPRESSION = Komprimierung
    • SET LOOK AND CUR TO THE 1ST CHARACTER OF INPUT STRING = Setze LOOk und CUR auf das erste Zeichen des Eingabestrings
    • INCREMENT LOOK = Inkrementiere LOOK
    • IS THERE MORE THAN 1 CHARACTER LEFT TO ANALYZE IN THE INPUT STRING? = Ist mehr als ein Zeichen übrig zum Analysieren in dem Eingabestring?
    • No = Nein
    • Yes = Ja
    • ARE THERE ANY NOT COPIED BYTES IN THE INPUT STRING? = Gibt es irgendwelche nichtkop ierte Bytes in dem Eingabestring?
    • TRACKTAB UPDATER MODULE = Nachverfolgungstabellen-Update-Modul
    • STORE THE ADDRES OF THIS TRACKTAB SLOT AT INDEX IN THE LOOKUP TABLE = Speichere die Adresse dieses Nachverfolgungstabellenschlitzes an dem Index in der Nachschlagetabelle
    • FILL THE NEXT FREE TRACKTAB SLOT WITH THE POINTER LOOK AS INPUT STRING POINTER AND A NULL POINTER AS PREVIOUS TRACKTAB POINTER = Fülle den nächsten freien Nachver folgungstabellenschlitz mit der Hinweismarke als Eingabestring-Hinweismarke und eine Null- Hinweismarke als frühere Nachverfolgungstabellen-Hinweismarke
    • FROM = von
    • EVALUATE INDEC HASHFUNCTION (LOOK) = Ermittle Index-Hashfunktion (LOOK)
    • HASH GENERATOR MODULE = Hash-Generatormodul
    • WRITE NCTOKEN = Schreibe NC-Token
    • TOKEN GENERATOR MODULE = Tokengeneratormodul
    • END COMPRESSION = Ende der Komprimierung
  • 7B
    • FROM = von
    • VALIDITY MODULE = Validierungsmodul
    • POINTER AT INDEX IN LOOKUP TABLE POINTS TO A VALID TRACKTAB SLOT? = Zeigt eine Hin weismarke an dem Index in der Nachschlagetabelle auf einen gültigen Nachverfolgungstabellenschlitz?
    • No = Nein
    • Yes = Ja
    • SET PRE TO THE INPUT STRING POINTER OF THE TRACKTAB SLOT POINTED BY THE LOOKUP TABLE POINTER = Setze PRE an die Eingabestringhinweismarke des Nachverfolgungstabellen schlitzes, auf den durch die Nachschlagetabelle-Hinweismarke hingewiesen wird.
    • IS THE CURRENT PAIR POINTED BY LOOK IDENTICAL TO THE ONE AT PRE? = Ist das gegenwär tige Paar, auf das durch LOOK hingewiesen wird, identisch mit dem bei PRE?
    • SEARCH FORT HE BEST MATCH LENGTH = Suche nach der Best-Übereinstimmungs-Länge
    • BEST MATCH FINDER MODULE = Best-Übereinstimmungs-Findermodul
    • UPDATE THE LOOKUP TABLE AND THE TRACKTAB ARRAY = Mache Update von Nachschlageta belle und Nachverfolgungstabellenfeld
    • CHANGE THE EXPANSION SCHEME IF REQUIRED = Ändere das Expansionsschema, wenn erforderlich
    • ARE THERE ANY CHARACTERS BETWENN LOOK AND CUR? = Gibt es irgendwelche Zeichen zwischen LOOK und CUR? (Look-cur! = 0)
    • WRITE NCTOKEN = Schreiben NC-Token
    • WRITE CTOKEN = Schreibe C-Token
    • SET CUR AT LOOK = Setze CUR auf LOOK
  • 8A
    • DECOMPRESSION = Dekomprimierung
    • SET CUR TO THE START OF THE OUTPUT STRING = Setze CUR an den Start des Ausgabestrings
    • ARE ALL BYTES OF THE INPUT STRING PROCESSED? = Sind alle Bytes des Eingabestrings verar beitet?
    • No = Nein
    • Yes = Ja
    • END DECOMPRESSION = Ende der Dekomprimierung
    • CHANGE THE EXPANSION SCHEME IF REQUIRED = Ändere das Expansionsschema, wenn erfor derlich
    • READ THE MARK BIT FROM THE INPUT STRING = Lese das MARK-Bit von dem Eingabestring
    • DOES MARK = 0? = Ist MARK = 0?
    • Token reader module = Token-Lesemodul
    • ARE ALL BYTES OF THE INPUT STRING PROCESSED = Sind alle Bytes des Eingabestrings verar beitet
    • READ THE NUMBER OF COMPRESSED BYTES MLEN BASED ON THE MLEN EXPANSION SCHEME FROM THE INPUT STRING = Lese die Zahl der komprimierten Bytes auf MLEN-Basis auf dem MLEN-Expansionsschema von dem Eingabestring
    • READ OFFSET BASED ON THE OFFSET EXPANSION SCHEME FROM THE INPUT STRING = Lese OFFSET basierend auf dem OFFSET-Expansionsschema von dem Eingabestring
    • FROM = von
  • 8B
    • FROM = von
    • READ THE NUMBER OF NOT COMPRESSEN BYTES NCLEN BASED ON THE NCLEN EXPANSION SCHEME FROM THE INPUT STRING = Lese die Zahl der nichtkomprimierten Bytes auf NCLEN-Basis auf den NCLEN-Expansionsschema von dem Eingabestring
    • TOKEN READER MODULE = Tokenlesemodul
    • READ NCLEN BYTES FROM THE INPUT STRING AND COPY THEM TO THE OUTPUT STRING AT CUR = Lese NCLEN Bytes von dem Eingabestring und kopiere sie zu dem Ausgabestring bei CUR
    • SUBSTRING COPIER MODULE = Unterstring-Kopiermodul
    • SET CUR TO CUR + NCLEN = Setze CUR auf CUR + NCLEN
    • SET PRE TO CUR-OFFSET = Setze PRE auf CUR-OFFSET
    • READ MLEN BYTES IN OUTPUT STRING FROM PRE AND COPY THEM AT CUR = Lese MLEN- Bytes in Ausgabestring von Vorgänger und kopiere sie bei CUR
    • SET CUR TO CUR + MLEN = Setze CUR auf CUR + MLEN
  • 9
    • WRITE CTOKEN = Schreibe C-Token
    • WAS THE PREVIOUS TOKEN A CTOKEN? = War der vorhergehende Token ein C-Token?
    • No = Nein
    • Yes = Ja
    • WRITE THE COMPRESSED STRING MARK (1) TO THE OUTPUT STRING = Schreibe dekomprim ierte Stringmarke (1) zu dem Ausgabestring
    • WRITE THE NUMBER OF MATCHING BYTES MLEN BASED ON THE MLEN EXPANSION SCHEME TO THE OUTPUT STRING = Schreibe die Anzahl der übereinstimmenden Bytes auf MLEN-Basis auf dem MLEN-Expansionsschema zu dem Ausgabestring
    • WRITE THE DIFFERENCE (OFFSET) BETWEEN LOOK AND PRE BASED ON THE OFFSET EX PANSION SCHEME TO THE OUTPUT STRING = Schreibe die Differenz (OFFSETR) zwischen LOOK und PRE basierend auf dem OFFSET-Expansionsschema zu dem Ausgabestring
    • END WRITE CTOKEN = Ende des Schreibens des C-Token
  • 10
    • WRITE NCTOKEN = Schreibe NC-Token
    • WRITE THE NOT COMPRESSED STRING MARK (0) TO THE OUTPUT STRING = Schreibe die nicht- komprimierte String-Marke (0) zu dem Ausgabestring
    • WRITE THE DIFFERENCE (NCLEN) BETWEEN LOOK AND CUR BASED ON THE NCLEN EXPAN SION SCHEME TO THE OUPUT STRING = Schreibe die Differenz (NCLEN) zwischen LOOK und CUR basierend auf dem NCLEN-Expansionsschema zu dem Ausgabestring
    • WRITE ALL BYTES BETWEEN CUR AND LOOK TO THE OUTPUT STRING = Schreibe alle Bytes zwischen CUR und LOOK zu dem Ausgabestring
    • CHANGE EXPANSION SCHEME IF NECESSARY = Ändere Expansionsschema, wenn erforderlich
    • END WRITE NCTOKEN = Ende des Schreibens des NC-Token
  • 11A
    • SEARCH BEST MATCH LENGTH = Suche nach Best-Übereinstimmungs-Länge
    • SET PSTRUCT TO THE POINTER AT INDEX IN THE LOOKUP TABLE AND SET BESTMLEN = 0 = Setze PSTRUCT auf die Hinweismarke bei dem Index in der Nachschlagetabelle und setze BESTMLEN = 0
    • SET MLEN = 2 AND SET TMP TO THE VALUE OF THE INPUT STRING POINTER OF PSTRUCT = Setze MLEN = 2 und setze TMP auf den Wert der Eingabestring-Hinweismarke von PSTRUCT
    • AT LEAST 1 CHARACTER LEFT BETWEEN LOOK + MLEN AND THE END OF INPUT STRING? = Ist wenigstens ein Zeichen zwischen LOOK + MLEN und dem Ende des Eingabestrings vorhanden?
    • No = Nein
    • Yes = Ja
    • IS THE CHARACTER AT TMP + MLEN THE SAME AS THE ONE AT PRE + MLEN? = Ist das Zeichen an TMP + MLEN das gleiche wie das bei PRE + MLEN?
    • INCREMENT MLEN = Erhöhe MLEN inkrementell
    • FROM = von
    • TO = zu
  • 11B
    • IS MLEN LONGER THAN BESTMLEN? = Ist MLEN länger als BESTMLEN?
    • No = Nein
    • Yes = Ja
    • SET BESTMLEN = MLEN AND SET PRE = TMP = Setze BESTMLEN = MLEN und setze PRE = TMP
    • IS THE POINTER TO THE PREVIOUS TRACKTAB SLOT OF PSTRUCT A NULL POINTER? = Ist die Hinweismarke zu dem vorhergehenden Nachverfolgungstabellenschlitz von PSTRUCT eine Null-Hinweismarke?
    • SETMLEN = BESTMLEN = Setze MLEN = BESTMLEN
    • SET PSTRUCT TO THE VALU OF THE TRACKTAB SLOT POINTER OF PSTRUCT = Setze PSTRUCT auf den Wert der Nachfolgetabelleschitz-Hinweismarke von PSTRUCT
    • END SEARCH BEST MATCH LENGTH = Ende der Suche nach Best-Übereinstimmungs-Länge
    • FROM = von
    • TO = zu
  • 12A
    • TO = zu
    • UPDATE LOOKUP TABLE AND TRACKTAB ARRAY = Mache Update von Nachschlagetabelle und Nachverfolgungstabellenfeld
    • SET MLENCP = MLEN = Setze MLENCP = MLEN
    • MLENCP >1?
    • DECREMENT MLENCP AND INCREMENT LOOK = Vermindere MLENCP inkrementell und erhöhe LOOK inkrementell
    • EVALUATE INDEX = HASHFUNCTION (LOOK) = Ermittle Index = Hash-Funktion (LOOK)
    • INITIALIZE THE NEXT FREE TRACKTAB WITH THE POINTER LOOK AND THE POINTER AT INDEX IN THE LOOKUP TABLE = Initialisiere die nächste freie Nachverfolgungstabelle mit der Hinweismarke LOOK und die Hinweismarke an dem Index in der Nachschlagetabelle
    • PUT THE ADDRESS OF THIS TRACKTAB SLOT AT INDEX IN THE LOOKUP TABLE = Füge die Ad resse des Nachfolgetabellenschlitzes an den Index in die Nachschlagetabelle ein
  • 12B
    • FROM = von
    • EVALUATE INDEX + HASHFUNCTION (LOOK) = Ermittle Index + Hash-Funktion (LOOK)
    • POINTER AT INDEX IN LOOKUP TABLE POINTS TO A VALID TRACKTAB SLOT? = Weist die Hin weismarke an dem Index in der Nachschlagetabelle auf einen gültigen Nachverfolgungstabellenschlitz hin?
    • No = Nein
    • Yes = Ja
    • SET PRE TO THE INPUT STRING POINTER OF THE TRACKTAB SLOT POINTED BY THE POIN TER AT INDEX IN THE LOOKUP TABLE = Setze PRE auf die Eingabestring-Hinweismarke des Nachverfolgungstabellenschlitzes, auf den durch die Hinweismarke an dem Index in der Nachschlage tabelle hingewiesen wird
    • IS THE CURRENT PAIR POINTED BY LOOK IDENTICAL TO THE ONE AT PRE? = Ist das gegenwär tige Paar, auf das durch LOOK hingewiesen wird, identisch mit dem bei PRE?
    • INITIALIZE THE NEXT FREE TRACKTAB SLOT WITH THE POINTER LOOK AND THE POINTER AT INDEX IN THE LOOKUP TABLE = Initialisiere den nächsten freien Nachverfolgungstabellenschlitz mit der Hinweismarke LOOK und der Hinweismarke an dem Index in der Nachschlagetabelle
    • FILL THE NEXT FREE TRACKTAB SLOT WITH THE POINTER LOOK AS INPUT STRING POINTER AND A NULL POINTER AS PREVIOUS TRACKTAB POINTER = Fülle den nächsten freien Nachver folgungstabellenschlitz mit der Hinweismarke LOOK als Eingabestring-Hinweismarke und eine Null- Hinweismarke als vorhergehende Nachverfolgungstabellenhinweismarke
    • PUT THE ADDRESS OF THIS TRACKTAB SLOT AT INDEX IN THE LOOKUP TABLE = Setze die Adresse dieses Nachfolgetabellenschlitzes an dem Index in der Nachschlagetabelle
    • INCREMENT LOOK = Erhöhe LOOK inkrementell
    • END UPDATE LOOKUP TABLE AND TRACKTAB ARRAY = Ende des Updates der Nachschlagtabelle und des Nachverfolgungstabellenfeldes
  • 13
    • OFFSET = Versetz
    • NCTPOKEN = NC-Token
    • CTPOKEN = C-Token
    • ASCII VALUE OF A = ASCII Wert von A

Claims (13)

  1. System zum Komprimieren und Dekomprimieren eines Eingabestrings in Echtzeit umfassend: einen Hash-Generator (16), der auf einen Zeichenstring von dem Eingabestring (12) anspricht, um einen Indexwert als eine Funktion des Zeichenstrings zu erzeugen; eine Nachschlagetabelle (18) mit einer Vielzahl von adressierbaren Speicherplätzen, wobei jeder der adressierbaren Speicherplätze eine Hinweismarke auf einen adressierbaren Speicherplatz in einer Nachverfolgungstabelle (20) speichert; eine Validierungseinrichtung (24), die auf den Indexwert, der von dem Hash-Generator (16) erzeugt wird, und auf die Nachschlagetabelle (18) anspricht, um zu bestimmen, ob die Hinweismarke, die in der Nachschlagetabelle an einer Adresse, die dem Indexwert entspricht, gespeichert ist, gültig ist; eine Best-Übereinstimmungs-Auffindeeinrichtung (28), die auf einer Meldung von der Validierungseinrichtung (24), dass die in der Nachschlagetabelle (18) gespeicherten Daten gültig sind, anspricht, um die Länge der längsten möglichen Übereinstimmung zwischen dem Zeichenstring und den Daten von dem Eingabestring zu bestimmen; eine Nachverfolgungstabelle (20), die eine Vielzahl geketteter Listen von adressierbaren Speicherplätzen umfasst, wobei jede der geketteten Listen der adressierbaren Speicherplätze einen oder mehrere Speicherplätze zum Speichern von Daten umfasst; einen Token-Generator (36) zum Erzeugen einer Sequenz von Indikatoren, die komprimierte und nicht komprimierte Zeichenstrings von dem Eingabestring darstellen, wobei die Indikatoren in einem Ausgangsstring (14) gespeichert werden; und dadurch gekennzeichnet, dass die Indikatoren in einer optimalen Weise entsprechend einem vorgewählten Expansionsschema dargestellt sind.
  2. System nach Anspruch 1, worin der Zeichenstring wenigstens zwei Zeichen von dem Eingabestring umfasst.
  3. System nach Anspruch 2, worin die wenigstens zwei Zeichen wenigstens zwei nebeneinander liegende Zeichen von dem Eingabestring umfasst.
  4. System nach Anspruch 3, worin die wenigstens zwei nebeneinander liegenden Zeichen ein Zeichen, auf das hingewiesen wird, und ein nachfolgendes Zeichen umfassen.
  5. System nach Anspruch 1, worin die Bestimmung, dass der Indexwert gültig ist, anzeigt, dass ein Zeichenstring vorher in dem Eingabestring aufgefunden worden ist.
  6. System nach Anspruch 1, worin die Sequenz der Indikatoren, die von dem Token-Generator (36) erzeugt werden, darstellt, ob eine Zeichenstringübereinstimmung festgestellt worden ist, wobei die Sequenz der Indikatoren einen oder mehrere Indikatoren von der Liste umfasst, die besteht aus: einem oder mehreren Zeichen unkomprimiert; der Länge des Zeichenstrings unkomprimiert (nclen); der Länge eines Übereinstimmungs-Zeichenstrings (mlen); und die Anzahl der Zeichen, die seit der letzten Übereinstimmungsprüfung verarbeitet worden sind (offset).
  7. System nach Anspruch 6, worin der Token-Generator (36) einen nc-Token-(102) Indikator, wenn keine komprimierten Zeichen zwischen der letzten Übereinstimmung oder dem Beginn des Eingabestrings und einer gegenwärtigen Übereinstimmung vorhanden sind, und ein c-Token-(103)-Indikator erzeugt, wenn eine Zeichenstringübereinstimmung aufgetreten ist.
  8. System nach Anspruch 7, worin der c-Token (103) einen Versatzwert-Code umfasst, der dynamisch optimal auf der Grundlage von vorgewählten Kriterien dargestellt werden kann.
  9. System nach Anspruch 7, worin der c-Token (103) wenigstens einen Zeichenübereinstimmungs-Längenwert-Code (mlen) oder die Anzahl der Zeichen umfasst, die seit der letzten Übereinstimmung verarbeitet worden sind (offset), die dynamisch optimal auf der Grundlage vorgewählter Kriterien dargestellt werden.
  10. System nach Anspruch 7, worin der nc-Token (102) eine Länge von den Sequenzcodes nicht komprimierter Zeichen (nclen) umfasst, die dynamisch optimal auf der Grundlage vorgewählter Kriterien dargestellt werden.
  11. System nach Anspruch 9, worin die vorgewählten Kriterien ein vorgewähltes Expansionsschema umfassen.
  12. System nach Anspruch 10, worin die vorgewählten Kriterien ein vorgewähltes Expansionsschema umfassen.
  13. System zum Komprimieren und Dekomprimieren eines Eingabestring in Echtzeit umfassend: einen Hash-Generator (16), der auf einen Zeichenstring von dem Eingabestring (12) anspricht, um einen Indexwert als eine Funktion des Zeichenstrings zu erzeugen; eine Nachschlagetabelle (18) mit einer Vielzahl von adressierbaren Speicherplätzen, wobei jeder der adressierbaren Speicherplätze eine Hinweismarke auf einen adressierbaren Speicherplatz in einer Nachverfolgungstabelle (20) speichert; eine Validierungseinrichtung (24), die auf den Indexwert, der von dem Hash-Generator (16) erzeugt wird, und auf die Nachschlagetabelle (18) anspricht, um zu bestimmen, ob die Hinweismarke, die in der Nachschlagetabelle an einer Adresse, die dem Indexwert entspricht, gespeichert ist, gültig ist; eine Best-Übereinstimmungs-Auffindeeinrichtung (28), die auf einen Indikator von der Validierungseinrichtung anspricht, dass die in der Nachschlagetabelle gespeicherten Daten gültig sind, um die Länge der längsten möglichen Übereinstimmung zwischen dem Zeichnstring und den Daten von dem Eingabestring festzustellen; eine Nacherfolgstabelle (20), die eine Vielzahl adressierbarer, geketteter Listen von Speicherplätzen umfasst, wobei jeder der adressierbaren, geketteten Listen der Speicherplätze einen oder mehrere Speicherplätze zum Speichern von Paaren von Bezugszeichen umfasst, wobei jedes der Paare der Bezugszeichen wenigstens ein erstes Bezugszeichen und ein zweites Bezugszeichen umfasst, wobei das erste Bezugszeichen als Hinweismarke auf eine Stelle in dem Eingabestring von einem jüngsten Auftreten des Zeichenstrings, das verarbeitet wird, dient, wobei das zweite Bezugszeichen entweder einen Null-Wert oder eine Hinweismarke auf einen anderen Speicherplatz in der geketteten Liste umfasst, wobei der andere Speicherplatz wenigstens ein erstes und ein zweites Hinweiszeichen umfasst, wobei das erste Hinweiszeichen als Hinweismarke auf einen Platz in dem Eingabestring des dem jüngsten am nächsten liegenden Auftretens des Zeichenstrings, der verarbeitet wird, dient; einen Token-Generator (36) zum Erzeugen einer Sequenz von Meldungen, die komprimierte und nicht komprimierte Zeichenstrings von dem Eingabestring darstellen, wobei die Meldungen in einem Ausgangsstring (14) gespeichert werden; und dadurch gekennzeichnet, dass die Indikatoren in einer optimalen Weise entsprechend einem vorgewählten Expansionsschema dargestellt sind.
DE60128146T 2000-12-22 2001-12-19 System und verfahren zum komprimieren und dekomprimieren von daten in echtzeit Expired - Lifetime DE60128146T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US25710100P 2000-12-22 2000-12-22
US257101P 2000-12-22
PCT/IB2001/002614 WO2002052731A2 (en) 2000-12-22 2001-12-19 System and method for compressing and decompressing data in real time

Publications (2)

Publication Number Publication Date
DE60128146D1 DE60128146D1 (de) 2007-06-06
DE60128146T2 true DE60128146T2 (de) 2008-02-07

Family

ID=22974888

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60128146T Expired - Lifetime DE60128146T2 (de) 2000-12-22 2001-12-19 System und verfahren zum komprimieren und dekomprimieren von daten in echtzeit

Country Status (6)

Country Link
US (1) US6515598B2 (de)
EP (1) EP1360771B1 (de)
AT (1) ATE360920T1 (de)
CA (2) CA2432939A1 (de)
DE (1) DE60128146T2 (de)
WO (1) WO2002052731A2 (de)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6370571B1 (en) 1997-03-05 2002-04-09 At Home Corporation System and method for delivering high-performance online multimedia services
US7529856B2 (en) * 1997-03-05 2009-05-05 At Home Corporation Delivering multimedia services
JP3541930B2 (ja) 1998-08-13 2004-07-14 富士通株式会社 符号化装置及び復号化装置
US6678733B1 (en) * 1999-10-26 2004-01-13 At Home Corporation Method and system for authorizing and authenticating users
US6985963B1 (en) * 2000-08-23 2006-01-10 At Home Corporation Sharing IP network resources
US7313587B1 (en) * 2003-07-14 2007-12-25 Microsoft Corporation Method and apparatus for localizing Web applications
US7464101B2 (en) * 2006-04-11 2008-12-09 Alcatel-Lucent Usa Inc. Fuzzy alphanumeric search apparatus and method
US8819288B2 (en) * 2007-09-14 2014-08-26 Microsoft Corporation Optimized data stream compression using data-dependent chunking
US8725927B2 (en) * 2008-10-15 2014-05-13 Micron Technology, Inc. Hot memory block table in a solid state storage device
US10019378B1 (en) * 2014-10-09 2018-07-10 Google Llc Addressing recent strings with ring buffer
US9912624B2 (en) * 2015-09-25 2018-03-06 International Business Machines Corporation Lossy text source coding by word length
US10097201B1 (en) * 2017-11-30 2018-10-09 Intel Corporation LZ77 compression of data with data runs
CN108494408B (zh) * 2018-03-14 2021-07-13 电子科技大学 基于哈希字典的随钻密度测井仪井下高速实时压缩方法
CN109361398B (zh) * 2018-10-11 2022-12-30 南威软件股份有限公司 一种基于并行和流水线设计的lz过程硬件压缩方法及***
CN116032292B (zh) * 2023-03-27 2023-06-09 山东智慧译百信息技术有限公司 一种基于翻译文件的大数据高效存储方法

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2172127B (en) 1985-03-06 1988-10-12 Ferranti Plc Data compression system
US4730348A (en) * 1986-09-19 1988-03-08 Adaptive Computer Technologies Adaptive data compression system
US4906991A (en) 1988-04-29 1990-03-06 Xerox Corporation Textual substitution data compression with finite length search windows
US5126739A (en) 1989-01-13 1992-06-30 Stac Electronics Data compression apparatus and method
US5003307A (en) 1989-01-13 1991-03-26 Stac, Inc. Data compression apparatus with shift register search means
US5016009A (en) 1989-01-13 1991-05-14 Stac, Inc. Data compression apparatus and method
US4955066A (en) 1989-10-13 1990-09-04 Microsoft Corporation Compressing and decompressing text files
US5001478A (en) 1989-12-28 1991-03-19 International Business Machines Corporation Method of encoding compressed data
US5049881A (en) 1990-06-18 1991-09-17 Intersecting Concepts, Inc. Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique
US5051745A (en) 1990-08-21 1991-09-24 Pkware, Inc. String searcher, and compressor using same
US5140321A (en) 1991-09-04 1992-08-18 Prime Computer, Inc. Data compression/decompression method and apparatus
US5155484A (en) 1991-09-13 1992-10-13 Salient Software, Inc. Fast data compressor with direct lookup table indexing into history buffer
US5455943A (en) * 1992-10-08 1995-10-03 Salient Software, Inc. Method and apparatus for finding longest and closest matching string in history buffer prior to current string
US5455577A (en) 1993-03-12 1995-10-03 Microsoft Corporation Method and system for data compression
WO1995019662A1 (en) * 1994-01-13 1995-07-20 Telco Systems, Inc. Data compression apparatus and method
US5710895A (en) * 1994-03-22 1998-01-20 Intel Corporation Method and apparatus for capturing and compressing video data in real time
US5798718A (en) * 1997-05-12 1998-08-25 Lexmark International, Inc. Sliding window data compression method and apparatus
US6252830B1 (en) * 1999-10-15 2001-06-26 William Hsu Real-time compressing and decompressing apparatus for recording and reproducing multi-soundtrack voice data

Also Published As

Publication number Publication date
WO2002052731A3 (en) 2003-05-22
CA2365544A1 (en) 2002-06-21
EP1360771A2 (de) 2003-11-12
EP1360771B1 (de) 2007-04-25
DE60128146D1 (de) 2007-06-06
ATE360920T1 (de) 2007-05-15
WO2002052731A2 (en) 2002-07-04
US6515598B2 (en) 2003-02-04
US20020140583A1 (en) 2002-10-03
CA2432939A1 (en) 2002-07-04

Similar Documents

Publication Publication Date Title
DE60128146T2 (de) System und verfahren zum komprimieren und dekomprimieren von daten in echtzeit
DE69535118T2 (de) Verfahren zur Datenkomprimierung und -dekomprimierung und zugehöriges Datenkomprimierungs- und -dekomprimierungsgerät
DE3606869C2 (de) Vorrichtung zur Datenkompression
DE69023329T2 (de) Vorrichtung zur adaptiven datenkompression für ein bandantriebssystem.
DE68907812T2 (de) Verfahren und Vorrichtung zur Kodierung, Dekodierung und Übertragung von Daten in komprimierter Form.
DE19635251C2 (de) Verfahren und Apparat zur Komprimierung beliebiger Daten
DE60129643T2 (de) Verfahren und Gerät für die Ermittlung vom längsten Prefixzusammenbringen in einem Kommunikationsnetz
DE60213760T2 (de) Verfahren zur kompression und dekompression eines strukturierten dokuments
DE19622045C2 (de) Datenkomprimierungs- und Datendekomprimierungsschema unter Verwendung eines Suchbaums, bei dem jeder Eintrag mit einer Zeichenkette unendlicher Länge gespeichert ist
DE68925798T2 (de) Datenverdichtung
DE60316696T2 (de) Verfahren zum Routen von Datenpaketen und Routing-Vorrichtung
DE4340591C2 (de) Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete
DE69737892T2 (de) Lempel-Ziv Datenkompressionsverfahren unter Verwendung eines Wörterbuches mit häufig auftretenden Buchstabenkombinationen, Wörtern und/oder Sätzen
DE3882738T2 (de) Datenkomprimierungsverfahren und -vorrichtung.
DE3788563T2 (de) Verfahren und Einrichtung um eine Datenbankadresse zu bestimmen.
DE19531049C2 (de) Verfahren zum Komprimieren von Daten und Codierungsvorrichtung
DE69026924T2 (de) Datenkomprimierungsverfahren
DE3485824T2 (de) Verfahren zur datenkompression.
DE69726661T2 (de) Verfahren und vorrichtung zur kodierung eines digitalen informationssignales
DE60107964T2 (de) Vorrichtung zur kodierung und dekodierung von strukturierten dokumenten
DE10301362A1 (de) Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung und einer Dekompressionseinrichtung, und Verfahren zur schnellen Blockdatenkompression mit Multi-Byte-Suche
DE69915725T2 (de) Datenkompression unter Verwendung von Primzahlexponenten
DE2208664A1 (de) Verfahren zur Decodierung eines vorsatzfreien Verdichtungscodes veränderlicher Länge
DE102006062062A1 (de) Komprimierung von Lieddaten und Komprimierer/Dekomprimierer
DE19625157A1 (de) Datenkompressions- und -expansionsverfahren

Legal Events

Date Code Title Description
8332 No legal effect for de
8370 Indication related to discontinuation of the patent is to be deleted
8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: PUSCHMANN & BORCHERT, 82041 OBERHACHING