DE69123660T2 - Datenkompressionsmethode und Gerät - Google Patents

Datenkompressionsmethode und Gerät

Info

Publication number
DE69123660T2
DE69123660T2 DE69123660T DE69123660T DE69123660T2 DE 69123660 T2 DE69123660 T2 DE 69123660T2 DE 69123660 T DE69123660 T DE 69123660T DE 69123660 T DE69123660 T DE 69123660T DE 69123660 T2 DE69123660 T2 DE 69123660T2
Authority
DE
Germany
Prior art keywords
registered
subsequence
subsequences
list
input
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 - Fee Related
Application number
DE69123660T
Other languages
English (en)
Other versions
DE69123660D1 (de
Inventor
Hirotaka Atsusi-Shi Kanagawa 243 Chiba
Yasuhiko Atsusi-Shi Kanagawa 243 Nakano
Yoshiyuki Ise Hara-Shi Kanagawa 259-11 Okada
Shigeru Ebina-Shi Kanagawa 243-04 Yoshida
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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
Priority claimed from JP2213990A external-priority patent/JP2535655B2/ja
Priority claimed from JP2281431A external-priority patent/JP3012677B2/ja
Priority claimed from JP2281432A external-priority patent/JP3012678B2/ja
Priority claimed from JP2281433A external-priority patent/JP3012679B2/ja
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Application granted granted Critical
Publication of DE69123660D1 publication Critical patent/DE69123660D1/de
Publication of DE69123660T2 publication Critical patent/DE69123660T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related 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

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

  • Die vorliegende Erfindung betrifft allgemein Datenkomprimierungsschemata, und spezieller ein Datenkomprimierungsverfahren und eine Daßenkomprimierungsvorrichtung basierend auf dem LZW-Algorithmus.
  • Neuerdings wird eine Vielzahl von Daten, wie Zeichencodes, Vektorinformationen und Bildinformationen von einem Computer verarbeitet. Ferner nimmt die Menge der Daten, die von dem Computer verarbeitet wird, rapide zu. Um eine große Menge von Daten mit einer hohen Geschwindigkeit effizient zu verarbeiten, ist es erforderlich, redundante Teile der Daten auszuwerten. Eine universelle Codierung, die geeignet ist, eine Vielzahl von Daten durch einen einzigen Komprimierungsalgorithmus zu komprimieren, wurde vorgeschlagen. In dieser Beschreibung werden Daten, die bis zu einem Wort betragen, als ein "Zeichen" bezeichnet, und Daten, die einer Mehrzahl von aufeinanderfolgenden Wörtern entsprechen, werden als eine "Zeichenfolge" bezeichnet.
  • Die Ziv-Lempel-Codierung ist als eines der typischen universellen Codierverfahren bekannt (siehe S. Munataka, "Ziv-Lempel Data compression Algorithms", Information Processing, Vol 26, Nr. 1, 1985, Seiten 2 - 6). Ein Universaltyp-Algorithmus und ein inkrementaler Zergliederungsalgorithmus wurden als geeignete Algorithmen der Ziv- Lempel-Codierung vorgeschlagen. Ferner ist ein LZSS-Code als eine Verbesserung bei dem Universaltyp-Algorithmus bekannt (siehe T. C. Bell, "Better OPM/L Text Compression", IEEE Trans. on Commun. Vol., COM-34, Nr. 12, Dez. 1986, Seiten 1176 - 1182). Zwischenzeitlich ist ein LZW- (Lempel-Ziv-Welch) Code als eine Verbesserung bei dem inkrementalen Zergliederungsalgorithmus bekannt (siehe T. A. Welch, "A Technique for High=Performance Data Compression", Computer, Juni 1984, Seiten 8 - 19). Unter den oben angegebenen Codes wird der LZW-Code zur Dateikomprimierung in einer Speichereinrichtung verwendet, da sein Algorithmus einfacher als die anderen Algorithmen ist.
  • Nun wird unter Bezugnahme auf die Fig. 1, 2 und 3 eine Beschreibung der LZW-Codierung angegeben. Genauer sind die Fig. 1 ein Flußdiagramm einer LZW-Codierprozedur, die Fig. 2 ein Flußdiagramm einer LZW-Decodierprozedur und die Fig. 3 zeigt das LZW-Codieren und -Decodieren. In der Fig. 3 werden Daten (eine Nachricht), die aus Kombinationen von drei Zeichen 'a', 'b' und 'c' bestehen, zum Zwecke der Einfachheit verarbeitet.
  • Unter Bezugnahme auf die Fig. 1 wird die LZW-Codierung folgendermaßen ausgeführt. Beim Schritt S1 werden alle Teilfolgen, von denen jede aus einem einzigen Zeichen besteht, als Anfangswerte in einem programmierbaren Verzeichnis registriert. Danach beginnt die LZW-Codierung. Eine Referenznummer wird jeder der Teilfolgen zugewiesen, die jeweils aus einem einzelnen Zeichen besteht. Beim Schritt 1 wird das Verzeichnis durch das erste Eingabezeichen K erlangt, und die Referenznummer, die dem ersten Eingabezeichen K entspricht, wird erhalten. Das erste Eingabezeichen wird als eine Präfixfolge definiert.
  • Beim Schritt S2 wird das zweite Eingabezeichen K eingegeben, das auf das erste Eingabezeichen folgt, und beim Schritt S3 wird bestimmt, ob das erste Eingabezeichen K existierteoder nicht. Wenn das Ergebnis beim Schritt S3 JA ist, wird beim Schritt S4 bestimmt, ob eine Teilfolge (ωK), die durch Hinzufügen des zweiten Eingabezeichens K zur Referenznummer ω des ersten Eingabezeichens erhalten wurde, in dem Verzeichnis registriert wurde (oder erkannt wurde). Wenn das beim Schritt S4 erhaltene Ergebnis NEIN ist, werden beim Schritt S6 die Referenznummer ω des Zeichens K, die beim Schritt S1 bestimmt wurde, als ein Code oder Code (ω) ausgegeben und die Teilfolge (Kω) zusammen mit einer neuen Referenznummer in dem Verzeichnis registriert. Ferner wird beim Schritt S6 die beim Schritt S2 erhaltene Teilfolge durch die Referenznummer ω ersetzt, und der Vorgang kehrt zum Schritt S2 zurück. Dann wird die mit n gekennzeichnete Verzeichnisadresse, zum Eingeben der folgenden Zeichen einzeln um 1 inkrementiert. Wenn das beim Schritt 3 erhaltene Ergebnis NEIN ist, wird die Referenznummer ω beim Schritt S7 als der Code (ω) ausgegeben. Auf diese Weise wird der oben angegebene Vorgang wiederholt ausgeführt, bis erkannt wird, daß das Verzeichnis keinerlei Teilfolge (ωK) hat.
  • Nun wird ein Beispiel der LZW-Codierung unter Bezugnahme auf (A) und (B) von Fig. 3 beschrieben. Eingabedaten, die in (A) von Fig. 3 gezeigt sind, werden von links nach rechts gelesen. Nach dem ersten Zeichen 'a' wird in einem Verzeichnis 10 gesucht. Es ist zu beachten, daß drei Zeichen 'a', 'b' und 'c' vor dem Beginn des Codierens registriert wurden. Da das erste Zeichen in dem Verzeichnis registriert wurde, wird nach seiner erweiterten Folge, die durch Hinzufügen des zweiten Eingabezeichens zum ersten Eingabezeichen, d.h. 'ab' erhalten wurde, in dem Verzeichnis gesucht. Zu diesem Zeitpunkt hat das Verzeichnis 10 keinerlei erweiterte Folgen. Somit wird der Code (ω), d.h. Code 1, für diese Folge ausgegeben, und die Referenznummer 4 wird der Teilfolge 'ab' zugewiesen. Tatsächlich wird die Referenznummer 4 in der Form von ωK registriert. Das heißt, die Teilfolge 'ab' wird als 1b beschrieben. Dann wird das zweite Eingabezeichen b verwendet, um die nächste Folge zu beginnen. Da seine Erweiterung 'ba' nicht im Verzeichnis 10 ist, wird es dort unter der Referenznummer 5 eingesetzt, der Code für 'b' wird ausgegeben, und 'a' beginnt die nächste Folge. Der oben angegebene Prozeß setzt sich problemlos fort.
  • Unter Bezugnahme auf die Fig. 2 wird das LZW-Decodierverfahren, das das umgekehrte Verfahren des LZW- Codierverfahrens ist, folgendermaßen ausgeführt. Beim Schritt S11 werden alle Teilfolgen, von denen jede aus einem Zeichen besteht, zusammen mit jeweiligen Referenznummern in einem Verzeichnis auf der Decodierseite registriert. Beim Schritt S1 wird der erste Code (Referenznummer) gelesen, und eine Variable CODE, die den gegenwärtigen Code angibt, wird durch eine Variable OLDCode ersetzt. Da der erste Code immer der Referenznummer eines der bereits in dem Verzeichnis registrierten Zeichen entspricht, wird nach dem Zeichen-Code (K), der der Variablen CODE entspricht, gesucht, und das Zeichen K wird ausgegeben. Das Ausgabezeichen (K) wird in eine Variable FINchar geschrieben, die für ein Ausnahmeverfahren Schritt S18 verwendet wird, der später genau beschrieben wird.
  • Beim Schritt S12 wird der nächste (zweite) Code gelesen und als INcode in die Variable CODE geschrieben. Beim Schritt S13 wird bestimmt, ob eine Codeeingabe existierte oder nicht. Wenn das Ergebnis beim Schritt S13 NEIN ist, endet das Verfahren. Wenn andererseits das Ergebnis beim Schritt S13 JA ist, wird beim Schritt S14 bestimmt, ob der beim Schritt S12 definierte Code CODE in dem Verzeichnis definiert (registriert) wurde oder nicht. Wenn das beim Schritt S14 erhaltene Ergebnis NEIN ist, geht das Verfahren weiter zum Schritt S15, bei welchem Schritt bestimmt wird, ob die Teilfolge (ωK), die dem Code CODE entspricht, in dem Verzeichnis registriert wurde oder nicht. Wenn das Ergebnis beim Schritt S15 JA ist, wird die Teilfolge K temporär gestapelt, und der Referenznummerncode (ω) wird in die Variable CODE geschrieben. Dann kehrt der Vorgang zum Schritt S15 zurück. Die Schritte S15 und S16 werden wiederholt ausgeführt, bis die Referenznummer ω identisch gleich einem einzigen Zeichen wird. Wenn das Ergebnis beim Schritt S15 JA wird, werden die Zeichen, die beim Schritt S16 gestapelt wurden, durch einen LIFO- (Last In First Out) Prozeß ausgegeben. Gleichzeitig wird einer Teilfolge (ωK), die aus dem vorher verwendeten Code ω und dem ersten Zeichen der Teilfolge besteht, die diesmal decodiert wurde, eine neue Referenznummer zugewiesen.
  • Ein Beispiel des LZW-Decodierverfahrens wird unter Bezugnahme auf (C) und (D) von Fig. 3 beschrieben. Der erste Eingabecode ist 1, wie in (D) von Fig. 3 gezeigt ist, und die Referenznummern der Zeichen 'a', 'b' und 'c' wurden entsprechend als 1, 2 und 3 in dem Verzeichnis registriert, wie in (C) von Fig. 3 gezeigt ist. Somit wird der erste Eingabecode 1 durch die Teilfolge 'a' ersetzt, die die Referenznummer 1 hat. Der nächste (zweite) Eingabecode 2 wird in derselben Weise durch das Zeichen 'b' ersetzt. Zu diesem Zeitpunkt wird der Kombination des vorher verarbeiteten Codes 1 und des gegenwärtig verarbeiteten Codes 2, das heißt '1b', die Referenznummer 4 zugewiesen, die in dem Verzeichnis 10 auf der Decoderseite registriert wird.
  • Der dritte Eingabecode 4 wird durch '1b' und dann 'ab' durch Auslesen des Verzeichnisses 10 ersetzt. Gleichzeitig wird der Teilfolge '2a' (='ba'), die der Kombination des vorher verarbeiteten Codes 2 und dem ersten Zeichen 'a' der diesmal verarbeiteten Teilfolge entspricht, die Referenznummer 5 zugewiesen, die in dem Verzeichnis 10 registriert wird. Der oben angegebene Prozeß geht problemlos weiter.
  • Das LZW-Decodierverfahren hat einen Ausnahmeprozeß. Dieser Ausnahmeprozeß wird zum Decodieren des sechsten Eingabecodes 8 benötigt. Der Code 8 wird während des oben angegebenen Vorgangs nicht in dem Verzeichnis 10 registriert, so daß er nicht decodiert werden kann. In diesem Fall wird die Teilfolge '5b' durch Hinzufügen des ersten Zeichens der Teilfolge 'ba', die vorher decodiert wurde, zu dem vorher verarbeiteten Code 5 erhalten, und wird weiter durch '2ab' und dann 'bab' ersetzt. Dann wird die durch Hinzufügen des ersten Zeichens der Teilfolge 'ba' zum vorher verarbeiteten Code 5 erhaltene Teilfolge '5b' zusammen mit der Referenznummer 8 in dem Verzeichnis 10 registriert.
  • Der oben angegebene Ausnahmeprozeß wird durch in der Fig. 2 gezeigt Schritte S14 und S18 ausgeführt. Schließlich wird beim Schritt S17 die Teilfolge 'bab' ausgegeben, und die Kombination (ωK) wird zusammen mit der entsprechenden Referenznummer 8 in dem Verzeichnis 10 registriert.
  • Die LZW-Codier- und Decodierverfahren, die jeweils in den Fig. 1 und 2 gezeigt sind, werden ausgeführt, während dasselbe Verzeichnis erstellt wird. Jedoch erfordert es eine lange Zeit, um durch die LZW-Codier- und Decodierverfahren nach einer Teilfolge zu suchen. Im ungünstigsten Fall ist es erforderlich, das gesamte Verzeichnis 10 auszulesen. Um dieses Problem zu beseitigen, und um die Codier- und Decodierverfahren zu beschleunigen, wurde ein Verfahren durch offenes Zerstückeln (Aufreihen) zum Verzeichnisauslesen vorgeschlagen (siehe "Information Processing Handbook", The Institute of Information Processing, Ohm Corporation).
  • Die Fig. 4 zeigt eine Skizze des Offen-Zerstückelungs-Verfahrens. Das Offen-Zerstückelungs-Verfahren definiert eine Zerstückelungsfunktion zum Erhalten der Adresse, die den Speicherbereich angibt, in dem ein Element x (Zeichenfolge) eines Satzes S aus Zeichenfolgen auf der Basis des Elements x besteht. Das Element x ist in dem Speicherbereich gespeichert, der durch die Adresse angegeben ist, die durch die Zerstückelungsfunktion erhalten wurde. Wenn Speicherbereiche (eine Zerstückelungstabelle) Adressen 0 bis m-1 zugewiesen werden, wird die folgende Zerstückelungsfunktion, die mit h gekennzeichnet ist, folgendermaßen definiert:
  • H : S T [0, 1, ..., m-1].
  • Die Adresse des Elements (Zeichenfolge) x im Satz S ist durch eine Zerstückelungsadresse h(x) bestimmt. Normalerweise wird der Zerstückelungsvorgang in einem Fall eingesetzt, in dem die Größe des Satzes S viel größer als m ist. Selbst wenn irgend eine Zerstückelungsfunktion ausgewählt wurde, gibt es eine Möglichkeit, daß h(x1) = h(x2), wobei x1 und x2 verschiedene Zeichenfolgen in dem Satz S sind. Dies wird Kollision genannt. Das Offen-Zerstückelungs-Verfahren kann eine derartige Kollision bewältigen.
  • Gemäß dem Offen-Zerstückelungs-Verfahren wird, wie in der Fig. 4 gezeigt ist, für jede Zerstückelungsadresse i eine Liste vorgesehen, und die Zeichenfolgen x, die h(x) = i erfüllen, werden vom Kopf (Anfang) der Liste in dieselbe Liste eingesetzt. Die Liste, die dieselbe Zerstückelungsadresse hat, wird ein Speicherbereich genannt.
  • Die Figuren 5, 6 und 7 zeigen ein herkömmliches LZW- Codierverfahren basierend auf dem Offen-Zerstückelungs- Verfahren. Genauer zeigt die Fig. 5 eine Baumstruktur zum Verzeichnisauslesen, die Fig. 6 zeigt den Zustand einer Teilfolgen-Tabelle 10b, und die Fig. 7 zeigt ein herkömmliches LZW-Codierverfahren, das das Offen-Zerstückelungs- Verfahren verwendet (siehe "Hard Disk Cook Book", AP-Labo Inc., Shoeisha, 15. August 1987, Seiten A-28 - A-34).
  • Unter Bezugnahme auf die Fig. 6 speichert die Teilfolgen-Tabelle 10b einen Zeichencode für jeden Index i und ein Zeichen (Erweiterungszeichen) Ext[i]. Die Offen-Zerstückelungs-Tabelle 10a besteht aus zwei Tabellenteilen 100 und 101. Der Tabellenteil 100 definiert eine Sequenz First und der Tabellenteil 101 definiert eine Sequenz Next. Der Tabellenteil 100 entspricht dem Indexverzeichnis, das in der Fig. 4 gezeigt ist, und der Tabellenteil 101 entspricht den verknüpften Listen (Speicherbereich). Die Komponente First[i] der Sequenz First gibt den Index (die Adresse) an, der die erste Teilfolge zeigt, die am Anfang der Liste positioniert ist, die durch den Index (Referenznummer) i spezifiziert ist, und die Komponente Next[i] der Sequenz Next gibt den Index (Zeiger) i an, der ein Element zeigt, das einem "Bruder" des Elements der Referenznummer i entspricht. Die Komponente Ext[i] der Sequenz Ext gibt ein Erweiterungszeichen an, das dem i-ten Element der Teilfolgen-Tabelle hinzugefügt ist.
  • Das Offen-Zerstückelungs-Verfahren ist bestimmt, um mit hoher Geschwindigkeit die Referenznummer einer Teilfolge zu berechnen, die durch Hinzufügen des Erweiterungszeichens zur Referenznummer (Zerstückelungsadresse) i der vorher aufgetretenen Teilfolge erhalten wurde. Die Zerstückelungstabelle 10a wird durch die Zerstückelungsadresse der Teilfolge erlangt, die durch Hinzufügen des Erweiterungszeichens zur Referenznummer (Zerstückelungsadresse) i erhalten wurde. Die Liste enthält Informationen über das Erweiterungszeichen, das der Referenznummer i hinzugefügt wird. Das Erweiterungszeichen wird mit dem Eingabezeichen K verglichen. Wenn beide Zeichen voneinander verschieden sind, wird das nächste Erweiterungszeichen, das durch den Zeiger (die Adresse) Next[i] des Erweiterungszeichens, das als nicht identisch mit dem Eingabezeichen bestimmt ist, angegeben wird, mit dem Eingabezeichen K verglichen. Auf diese Weise ist es möglich, alle Teilfolgen mit einem hinzugefügten Zeichen zu erlangen, die vorgefunden wurden. Wenn alle Teilfolgen mit einem hinzugefügten Zeichen geprüft wurden und sie nicht mit der Teilfolge, zu der K hinzugefügt wurde, übereinstimmen, wird schließlich die verknüpfte Adresse 0 erhalten, so daß erkannt wird, daß die identische Teilfolge nicht registriert ist.
  • Unter Bezugnahme auf die Fig. 5 wird nun eine Beschreibung eines Verfahrens zum Suchen nach 'ahf' angegeben, wenn Teilfolgen 'ab', 'ah', 'az', 'abf', 'ahd', 'ahf' und 'azc' in dem Verzeichnis registriert wurden. Der Anfangszustand der Teilfolgen-Tabelle 10b und der Offen- Zerstückelungs-Tabelle 10a sind in der Fig. 6 gezeigt. Das erste Zeichen 'a' wurde in dem Verzeichnis registriert. Um nach dem zweiten Zeichen 'h' zu suchen, wird auf die Komponente First[i=a] der Sequenz First durch die Zerstückelungsadresse 'a' Bezug genommen, so daß P1 erhalten wird. Dadurch wird die Teilfolge 'ab' beginnend von 'a', angegeben durch den Index P1, gefunden. Jedoch ist das zweite Zeichen der Teilfolge 'ab' nicht dasselbe wie jenes der Teilfolge 'ahf'. Dann wird die Sequenz Next durch die Zerstückelungsadresse P1 erlangt, so daß P2 erhalten wird. Die Teilfolge, die durch den Index P2 angegeben wird, ist 'ah', deren zweites Zeichen dasselbe wie jenes der Teilfolge 'ahf' ist. Dann wird nach dem dritten Zeichen 'f' der Teilfolge 'ahf' gesucht. Die Sequenz First wird durch die Zerstückelungsadresse P2 erlangt, so daß P6 erhalten wird. Das dritte Zeichen der Teilfolge, die durch P6 angegeben wird, ist 'd', welches nicht dasselbe wie jenes der Teilfolge 'ahf' ist. Somit wird die Sequenz Next durch die Zerstückelungsadresse P6 erlangt, so daß P7 erhalten wird. Das dritte Zeichen der Teilfolge, das durch P6 angegeben wird, ist 'f', das dasselbe wie jenes der Teilfolge 'ahf' ist. Der Weg zum Erlangen der Teilfolge 'ahf' besteht aus Pfaden 1, 2, 3 und 4, in dieser Reihenfolge, wie in der Fig. 5 gezeigt ist.
  • Die Fig. 7 zeigt das oben angegebene LZW-Codierverfahren. Beim Schritt S20 wird das Verzeichnis initialisiert, so daß jedes in der eingegebenen Zeichenfolge enthaltene Einzelzeichen registriert wird. Dann wird die Referenznummer, die der Teilfolge zugeordnet ist, die als nächste registriert werden soll, in die Variable n geschrieben. Zum Beispiel werden die Referenznummern 1, 2 und 3, die entsprechend Zeichen 'a', 'b' und 'c' zugewiesen sind, in dem Verzeichnis registriert, und die Referenznummer 4 wird in die Variable n geschrieben. Eine Maximalanzahl Nmax von Teilfolgen wird bestimmt, und die vorerwähnten Sequenzen First, Next und Ext, von denen jede die Maximalanzahl von Teilfolgen hat, werden definiert. Anfangs wird Null in die Sequenzen First, Next und Ext als Ausgangswerte geschrieben. Die i-te Komponente First[i] der Sequenz First zeigt die Nummer, die eine Komponente der Sequenz Ext angibt, die am Kopf der Liste angeordnet ist, die dem Knoten entspricht, der durch die Referenznummer i angegeben ist. Die i-te Komponente Ext[i] der Sequenz Ext zeigt das Erweiterungszeichen K eines Elements, das durch die Referenznummer i angegeben ist. Ferner hat die i-te Komponente Next[i] einen Zeiger, der ein Zeichen angibt, das einem "Bruder" des Elements entspricht, das durch die Referenznummer i angegeben ist.
  • Das erste Zeichen (Präfixfolge) K wird gelesen, und die Referenznummer davon wird in die Variable i geschrieben. Dann beginnt der Codiervorgang. Beim Schritt S21 wird das nächste Zeichen, das auf das erste Zeichen folgt, als das Erweiterungszeichen gelesen. Beim Schritt S22 wird bestimmt, ob das erste Eingabezeichen existierte oder nicht. Wenn das Ergebnis beim Schritt S22 JA ist, wird ein Verzeichnis-Ausleseverfahren 50, das aus Schritten S23 - S27 besteht, ausgeführt.
  • Beim Schritt S23 wird die Variable i in einer weiteren Variablen ω gesichert, und ein Anfangswert "0" wird in die Variable "j" geschrieben. Beim Schritt S24 wird die Nummer der Komponente der Sequenz Next, die durch den Wert der Komponente First[i] angegeben ist, die der Variablen i entspricht, in die Variable i geschrieben. Beim Schritt S25 wird, wenn bestimmt ist, daß der Wert der Variablen i nicht "0" ist, das Ausleseverfahren für die entsprechende Liste gestartet. Die entsprechende Liste enthält ein oder mehrere Kandidatenelemente. Beim Schritt S26 wird die Komponente Ext[i] mit dem Erweiterungszeichen K verglichen. Wenn das Ergebnis beim Schritt S26 NEIN ist, wird der Wert der Variablen i in der Variablen j gesichert, und die Komponente Next[i], die als ein Zeiger dient, der das nächste Kandidatenelement zeigt, wird in die Variable i geschrieben. Durch wiederholtes Ausführen der Schritte S25 - S27 wird die entsprechende Liste erlangt.
  • Wenn beim Schritt S26 bestimmt ist, daß Ext[i] = K, wird bestimmt, daß die Teilfolge, die mit der eingegebenen Zeichenfolge identisch ist, in dem Verzeichnis registriert wurde. In diesem Fall kehrt das Verfahren zum Schritt S21 zurück, und das Codierverfahren für eine Zeichenfolge wird ausgeführt, wobei das nächste Zeichen, das beim Schritt S21 eingegeben wurde, hinzugefügt wird.
  • Andererseits ist, wenn die Komponente First[i] oder die Komponente Next[i] entsprechend der Variablen i "0" ist, das Ergebnis beim Schritt S25 JA. In diesem Fall wird erkannt, daß das Verzeichnis keinerlei Kandidatenelement hat, das mit der Teilfolge verknüpft werden soll, die durch die Referenznummer i angegeben ist. In diesem Fall wird ein Verzeichnis-Registrierverfahren 60, das aus Schritten 29 - 32 besteht, ausgeführt.
  • Die Referenznummer, die der Teilfolge entspricht, die beim Schritt S23 ausgelesen wurde, wird jedesmal, wenn die Teilfolge ausgelesen wird, in der Variablen ω gesichert. Somit zeigt die in der Variablen ω gesicherte Referenznummer die bereits aufgetretene Teilfolge, die die längste Übereinstimmung mit der eingegebenen Zeichenfolge erzeugt. Beim Schritt S28 wird ein Code entsprechend der Referenznummer ω ausgegeben, und die neue Teilfolge wird in dem Verzeichnis durch die Schritte S29 - S32 registriert.
  • Beim Schritt S29 wird der Wert der Variablen n in die Variable i geschrieben und dann um 1 inkrementiert. Ferner wird die Komponente Ext[i], die der Variablen i entspricht, auf das Erweiterungszeichen K eingestellt. Beim Schritt S30 wird bestimmt, ob der Wert der Variablen j "0" ist oder nicht. Wenn das Ergebnis beim Schritt S30 JA ist, wird beim Schritt S31 der Wert der Variablen i in die Komponente First[ω] geschrieben, und die Liste entsprechend der Referenznummer ω wird definiert. Andererseits wird, wenn das Ergebnis beim Schritt S30 NEIN ist, der Wert der Variablen i in die Komponente Next[ω] geschrieben, wobei der neue "Bruder¹' der in Betracht gezogenen Liste hinzugefügt wird. Beim Schritt S33 wird die Referenznummer, die dem Erweiterungszeichen K entspricht, in die Variable i geschrieben, und das Verfahren kehrt zum Schritt S21 zurück. Wenn es kein Zeichen gibt, das eingegeben werden soll, wird die Variable ω, die zu diesem Zeitpunkt erhalten wurde, bei einem Schritt S34 ausgegeben, und das Verfahren endet.
  • Jedoch hat das oben angegebene herkömmliche Codierverfahren die folgenden Nachteile. Zunächst ist es nicht ausgelegt, um die Offen-Zerstückelungs-Tabelle 10a, die in der Fig. 6 gezeigt ist, zu modifizieren. Das heißt, sie ist nicht ausgelegt, die Position jeder Teilfolge in der Baumstruktur zu ändern. Somit erfordert es, wenn eine Teilfolge, die häufig ausgelesen wird, an einer tiefen Position registriert ist, die über einen langen Weg von der Wurzel der Baumstruktur erreichbar ist, eine lange Zeit, um auf eine solche Teilfolge zuzugreifen, da diesem Weg jedesmal gefolgt werden muß, wenn danach gesucht wird, so daß das Wiedererlangungsverfahren nicht effizient ausgeführt wird. Wenn die Codierrate gleich ungefähr 10KB/s ist, ist es unmöglich, die eingegebene Zeichenfolge in Echtzeit zu codieren, so daß das Codierverfahren an eine Übertragungsgeschwindigkeit angepaßt ist (wenige 100 KB/s bis 1 MB/s), mit der codierte Daten zu einer Speichervorrichtung übertragen werden, wie einem Magnetplattenlaufwerk oder einer Magnetplatten-Bandvorrichtung. Zweitens treten, da jede Teilfolge in der Baumstruktur in der Reihenfolge des Auftretens registriert ist, wenn eine Teilfolge, die häufig ausgelesen wird, an einer Position fern der Wurzel der Baumstruktur registriert ist, dieselben Probleme auf, wie sie oben beschrieben wurden. Drittens ist das herkömmliche Codierverfahren nicht ausgelegt, um den Weg zum Auslesen zu ändern. Daher finden dieselben Probleme statt, wie sie oben beschrieben wurden.
  • Es ist ein allgemeines Ziel der vorliegenden Erfindung, ein verbessertes Datenkomprimierungsverfahren und eine verbesserte Datenkomprimierungsvorrichtung zu schaffen, bei dem/der die oben angegebenen Nachteile beseitigt sind.
  • Ein genaueres Ziel der vorliegenden Erfindung ist es, ein Datenkomprimierungsverfahren und eine Datenkomprimierungsvorrichtung zu schaffen, das/die geeignet ist, ein Codieren effizient bei einer höheren Geschwindigkeit auszuführen.
  • Gemäß einem ersten Aspekt der vorliegenden Erfindung wird somit ein Datenkornprirnierungsverfahren geschaffen, enthaltend die Schritte: (a) Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Datenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angegeben ist, in einem Verzeichnis registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in einer Reihenfolge angeordnet sind, in der die registrierten Teilfolgen auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist, (b) Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit der Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde, und (c) Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis, dadurch gekennzeichnet, daß das Verfahren einen Schritt (d) des Modifizierens der Liste ent hält, so daß die Position einer ersten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur, wenn darauf zugegriffen wird, mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, welche zweite registrierte Teilfolge vor dem Umordnen vor der er sten registrierten Teilfolge in der Liste eingeordnet ist, welche ersten und zweiten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen.
  • Gemäß einem zweiten Aspekt der Erfindung wird eine Datenkomprimierungsvorrichtung geschaffen, enthaltend: erste Einrichtungen zum Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Zeichenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angegeben ist, in einem Verzeichnis registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in der Reihenfolge angeordnet sind, in der die registrierten Teilfolgen zuerst auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist, zweite Einrichtungen, die mit den ersten Einrichtungen gekoppelt sind, zum Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit einer Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde, und dritte Einrichtungen, die mit den ersten und zweiten Einrichtungen gekoppelt sind, zum Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis, dadurch gekennzeichnet, daß die Datenkomprimierungsvorrichtung vierte Einrichtungen enthält, die mit den ersten Einrichtungen gekoppelt sind, zum Modifizieren der Liste, so daß die Position einer ersten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur, nachdem darauf zugegriffen wurde, mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, welche zweite registrierte Teilfolge vor dem Umordnen vor der ersten registrierten Teilfolge in der Liste eingeordnet ist, welche ersten und zweiten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen.
  • Gemäß einem dritten Aspekt der Erfindung wird somit ein Datenkomprimierungsverfahren geschaffen, enthaltend die Schritte: (a) Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Datenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angegeben ist, in einem Verzeichnis registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in einer Reihenfolge angeordnet sind, in der die registrierten Teilfolgen auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist, (b) Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit einer Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde, und (c) Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis, dadurch gekennzeichnet, daß das Verfahren die weiteren Schritte enthält (d) Aufzeichnen der Zugriffsfrequenz jeder der registrierten Teilfolgen, und (e) Modifizieren der Liste, so daß die Position einer er sten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, so daß sie in einer abnehmenden Reihenfolge der aufgezeichneten Zugriffsfrequenz umgeordnet werden, welche ersten und zwei ten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen.
  • Gemäß einem vierten Aspekt der vorliegenden Erfindung wird eine Datenkomprimierungsvorrichtung geschaffen, enthaltend: erste Einrichtungen zum Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Zeichenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angegeben ist, in einem Verzeichnis registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in der Reihenfolge angeordnet sind, in der die registrierten Teilfolgen zuerst auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist, zweite Einrichtungen, die mit den ersten Einrichtungen gekoppelt sind, zum Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit einer Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde, und dritte Einrichtungen, die mit den ersten und zweiten Einrichtungen gekoppelt sind, zum Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis, dadurch gekennzeichnet, daß die Datenkompri mierungsvorrichtung vierte Einrichtungen zum Aufzeichnen der Zugriffsfrequenz der registrierten Teilfolgen und fünfte Einrichtungen, die mit den ersten Einrichtungen gekoppelt sind, zum Modifizieren der Liste enthält, so daß die Position einer ersten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, so daß sie in einer abnehmenden Reihenfolge der aufgezeichneten Zugriffsfrequenz umgeordnet werden, welche ersten und zweiten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen.
  • Zum besseren Verständnis der Erfindung, und um zu zeigen, wie selbige zur Wirkung gebracht wird, wird nun lediglich beispielsweise auf die begleitenden Zeichnungen Bezug genommen, in welchen:
  • Fig. 1 ein Flußdiagramm eines herkömmlichen LZW- Codierverfahrens ist,
  • Fig. 2 ein Flußdiagramm eines herkömmlichen LZW- Decodierverfahrens ist,
  • Fig. 3 ein Diagramm der herkömmlichen LZW-Codier- und Decodierverfahren ist,
  • Fig. 4 ein Diagramm ist, das ein Offen-Zerstückelungs-Verfahren zeigt,
  • Fig. 5 ein Diagramm einer Baumstruktur eines Verzeichnisses ist,
  • Fig. 6 ein Diagramm ist, das eine Teilfolgen-Tabelle und eine Offen-Zerstückelungs-Tabelle zeigt,
  • Fig. 7 ein Flußdiagramm eines herkömmlichen LZW- Codierverfahrens ist, das das Offen-Zerstückelungs-Verfahren zum Verzeichnisauslesen verwendet,
  • Fig. 8A ein Diagram ist, das eine Skizze einer ersten bevorzugten Ausführung der vorliegenden Erfindung zeigt,
  • Fig. 8B ein Diagram ist, das eine Skizze einer zweiten bevorzugten Ausführung der vorliegenden Erfindung zeigt,
  • Fig. 8C ein Diagram ist, das eine Skizze einer dritten bevorzugten Ausführung der vorliegenden Erfindung zeigt,
  • Fig. 9A und 9B jeweils Diagramme sind, die eine erste bevorzugte Ausführung der vorliegenden Erfindung zeigen,
  • Fig. 10 ein Flußdiagramm eines Codierverfahrens gemäß der ersten bevorzugten Ausführung der vorliegenden Erfindung ist,
  • Fig. 11A, 11b, 12A, 12B, 13A, 13B, 14A und 14B jeweils Diagramme sind, die ein Beispiel des Codierverfahrens gemäß der ersten bevorzugten Ausführung der vorhegenden Erfindung zeigen,
  • Fig. 15 ein Flußdiagramm eines Codierverfahrens gemäß einer zweiten bevorzugten Ausführung der vorliegenden Erfindung ist,
  • Fig. 16 ein genaueres Flußdiagramm des in der Fig. 15 gezeigten Codierverfahrens ist,
  • Fig. 17A, 17B, 18A, 18B, 19A, 19B, 20A und 20B jeweils Diagramme eines Beispiels des Codierverfahrens gemäß der zweiten bevorzugten Ausführung der vorliegenden Erfindung sind,
  • Fig. 21A und 21B jeweils Diagramme sind, die eine dritte bevorzugte Ausführung der vorliegenden Erfindung zeigen,
  • Fig. 22, 23 und 24 jeweils Diagramme eines Codierverfahrens gemäß der dritten bevorzugten Ausführung der vorliegenden Erfindung sind,
  • Fig. 25A und 25B jeweils Diagramme sind, die zeigen, wie eine Teilfolgen-Tabelle und eine Offen-Zerstückelungs- Tabelle modifiziert werden,
  • Nun wird eine Beschreibung der Skizze der ersten bevorzugten Ausführung der vorliegenden Erfindung unter Bezugnahme auf die Fig. 8A angegeben. Die Fig. 8A-(I) zeigt eine herkömmliche Baumstruktur, in der die Teilfolgen in der Reihenfolge ihres Auftretens miteinander verknüpft sind. Die in der Fig. 8A-(I) gezeigte Baumstruktur hat eine erste Ebene, die aus Zeichen 'a' und 'b' besteht, und eine zweite Ebene, die Zeichen 'b', 'c' und 'a', die mit dem Zeichen 'a' auf der ersten Ebene verknüpft sind, und Zeichen 'a' und 'b' hat, die mit dem Zeichen 'b' auf der ersten Ebene verknüpft sind. Nach dem Zeichen 'a', das durch das Symbol * angegeben ist, wird in einer Reihenfolge 'a', 'b', 'c' und 'a' gesucht, wie in der Fig. 8A-(I) gezeigt ist. Zwischenzeitlich kann gemäß der ersten bevorzugten Ausführung der vorliegenden Erfindung die Auslesereihenfolge geändert werden, wie in der Fig. 8A-(II) gezeigt ist. Die Registrierposition des Zeichens 'a', das in der Fig. 8A-(I) durch * angegeben ist, wird mit jener des Zeichens 'c' unmittelbar vor dem Zeichen 'a', das durch * angegeben ist, getauscht, wie in der Fig. 8A-(II) gezeigt ist. Es ist zu beachten, daß drei Zeichen 'b', 'c' und 'a', die von dem Knoten 'a' ausgehen, in derselben Liste enthalten sind. Dadurch wird das Zeichen 'a', das durch * angegeben ist, über einen Weg erhalten, der durch die Zeichen 'a', 'b' und 'a' in dieser Reihenfolge geht. Das oben angegebene Austauschverfahren wird ausgeführt, wenn das mit * angegebene Zeichen 'a' eine hohe Auftrittsfrequenz hat.
  • Die Fig. 9A zeigt eine Systemstruktur der ersten bevorzugten Ausführung der vorliegenden Erfindung. Die Struktur in der Fig. 9A besteht aus einem Prozessor 210 und einem Verzeichnis (Speicher) 220. Das Verzeichnis 220 hat eine Offen-Zerstückelungs-Tabelle loa und die Teilfolgen-Tabelle 10b. Der Prozessor 210 arbeitet gemäß einem Verfahren, das später genauer beschrieben wird.
  • Die Fig. 9B ist ein Flußdiagramm eines Codierverfahrens gemäß der ersten bevorzugten Ausführung der vorliegenden Erfindung. Beim Schritt S201 wird das Verzeichnis durch Verwendung der Offen-Zerstückelungs-Tabelle 10a ausgelesen. Beim Schritt S202 wird die Offen-Zerstückelungs- Tabelle loa modifiziert, so daß die Position der Teilfolge, nach der gesucht wird, mit der Position einer Teilfolge unmittelbar davor ausgetauscht wird, wobei diese Teilfolgen eine identische Zerstückelungsadresse haben. Beim Schritt S203 wird die erhaltene Teilfolge, die eine längste Übereinstimmung mit der eingegebenen Zeichenfolge hat, ausgegeben.
  • Die Fig. 10 ist ein Flußdiagramm des Codierverfahrens gemäß der ersten bevorzugten Ausführung der vorliegenden Erfindung. In der Fig. 10 haben jene Teile, die dieselben wie jene sind, die in der Fig. 7 gezeigt sind, dieselben Bezugszeichen erhalten. Beim Schritt S20 wird das Verzeichnis initialisiert, so daß jedes einzelne Zeichen, das in der eingegebenen Zeichenfolge enthalten ist, registriert wird. Das heißt, daß der Zeichencode in einem Speicherbereich des Verzeichnisses 220 registriert wird, der durch eine Adresse m (=l) des Verzeichnisses 220 angegeben wird. Dann wird die Referenznummer, die der Teilfolge zugeordnet ist, die als nächste registriert werden soll, in die Variable n geschrieben. Zum Beispiel werden die Referenznummern 1, 2 und 3, die entsprechend den Zeichen 'a', 'b' und 'c' zugeordnet sind, in dem Verzeichnis registriert, und die Referenznummer 4 wird in die Variable n geschrieben. Eine Maximalanzahl von Teilfolgen wird in die Sequenzen First, Next und Ext geschrieben, so daß Sequenzen First, Next und Ext, von denen jede die maximale Anzahl von Teilfolgen hat, definiert werden. Anfangs wird Null in die Sequenzen First, Next und Ext als die Anfangswerte geschrieben. Wie vorher beschrieben wurde, entspricht die Sequenz First der in der Fig. 6 gezeigten Tabelle 100, und die Sequenzen Next und Ext entsprechen den Tabellen 101 bzw. 10b. Die i-te Komponente First[i] der Sequenz First zeigt die Nummer, die eine Komponente der Sequenz Ext angibt, die am Kopf der Liste angegeben ist, die dem dem Knoten entspricht, der durch die Referenznummer i angegeben ist. Die i-te Komponente der Sequenz Ext[i] der Sequenz Ext zeigt ein Erweiterungszeichen K eines Elements, das durch die Referenznummer i angegeben ist. Ferner hat die i-te Komponente Next[i] einen Zeiger, der eine Element entsprechend dem "Bruder" des Elements angibt, das durch die Referenznummer i angegeben ist.
  • Das erste Zeichen K wird gelesen, und die Referenznummer, die dem ersten Zeichen entspricht, wird in die Variable i geschrieben. Dann beginnt der Codiervorgang. Beim Schritt S21 wird das nächste (zweite) Zeichen, das auf das erste Zeichen folgt, als das Erweiterungszeichen K gelesen. Beim Schritt S22 wird bestimmt, ob das erste Eingabezeichen K existierte oder nicht. Wenn das Ergebnis beim Schritt S22 JA ist, wird ein Verzeichnis-Ausleseverfahren 50A, das aus Schritten 523a - 527a besteht, ausgeführt.
  • Beim Schritt S23a wird die Variable i in die Variable ω geschrieben, und 0 wird in die Variable "j" geschrieben. Ferner wird der Wert der Variablen i in einem Positionsdetektionsindex lk gesichert. Beim Schritt S24 wird die Nummer der Komponente der Sequenz Next, die durch den Wert der Komponente First[i] entsprechend der Variablen i angegeben ist, in die Variable i geschrieben. Beim Schritt S25 wird, wenn bestimmt ist, daß die Variable i nicht gleich Null ist, das Ausleseverfahren an der entsprechenden Liste gestartet. Diese Liste enthält Kandidatenelemente. Beim Schritt S26 wird die Komponente Ext[i] mit dem Erweiterungszeichen K verglichen. Wenn das Ergebnis beim Schritt S26 NEIN ist, wird beim Schritt S27a der Wert der Variablen i in der Variablen j gesichert, und die Komponente Next[i] wird in der Variablen i gesichert. Ferner wird der Wert der Variablen j beim Schritt 527a in der Variablen lk gesichert. Durch wiederholtes Ausführen der Schritte S25 - S27a wird der entsprechenden Liste sequentiell gefolgt.
  • Wenn beim Schritt S26 bestimmt ist, daß Ext[i] = das heißt, wenn das Erweiterungszeichen Ext[ ] das Eingabezeichen K ist, wird beim Schritt S35 bestimmt, ob lk = oder nicht. Wenn lk nicht gleich 0 ist, wird das Eingabezeichen K durch den dritten verknüpften Index oder einen verknüpften Index nach dem dritten verknüpften Index gefunden. In diesem Fall wird das vorerwähnte Auswechselverfahren ausgeführt.
  • Genauer wird beim Schritt S36 der Wert der Variablen i in Next[lk] des Index lk geschrieben, der Index der Variablen j wird in Next[i] geschrieben, und der Wert der Variablen Next[i] wird in Next[j] geschrieben. Dann kehrt das Verfahren zum Schritt S21 zurück.
  • Andererseits wird, wenn beim Schritt S35 bestimmt ist, daß lk = 0, das Eingabezeichen K durch den zweiten verknüpften Index oder einen verknüpften Index vor dem zweiten verknüpften Index gefunden. Somit wird beim Schritt S37 j = 0 bestimmt. Wenn j = 0, wird das Zeichen K durch die Komponente First[i] gefunden, das heißt, durch den ersten verknüpften Index. In diesem Fall ist es nicht erforderlich, die Positionen der benachbarten Teilfolgen in der Baumstruktur miteinander auszutauschen. Wenn andererseits j nicht gleich 0 ist, wird das Zeichen K durch den zweiten verknüpften Index oder einen verknüpften Index vor dem zweiten verknüpften Index gefunden. Beim Schritt S38 wird die Komponente Next[i] des Index i der Sequenz Next 101 zur Komponente Next[j] des Index j unmittelbar vor der Komponente Next[i] geschoben, und die Komponente First[ω] des Index ω der Sequenz First 100 wird zur Komponente Next[i] geschoben. Ferner wird der Index i zur Sequenz First[ω] geschoben. Durch das Verfahren beim Schritt S38 wird der Index i des Eingabezeichens K neu geschrieben, so daß es den Kopf (Anfang) der Liste angibt.
  • Andererseits ist, wenn die Komponente First[i] oder die Komponente Next[i] Null ist, das Ergebnis beim Schritt S25 JA. In diesem Fall wird erkannt, daß das Verzeichnis 220 keinerlei Kandidatenelement registriert hat, das mit der Teilfolge verknüpft ist, die durch die Referenznummer i angegeben ist. In diesem Fall wird ein Verzeichnis- Registrierverfahren 60, das aus Schritten 29 - 32 besteht, ausgeführt.
  • Die Referenznummer, die der Teilfolge entspricht, die beim Schritt S23 verwendet wurde, wird jedesmal, wenn die Teilfolgen ausgelesen werden, in der Variablen ω gesichert. Somit gibt die in der Variablen ω gesicherte Referenznummer eine Teilfolge an, die in dem Verzeichnis 220 registriert wurde und die längste Übereinstimmung mit der eingegebenen Zeichenfolge hat. Beim Schritt S28 wird ein Code entsprechend der Referenznummer ω ausgegeben, und die neue Teilfolge wird in dem Verzeichnis 220 durch die Schritte S29 - S32 registriert.
  • Beim Schritt S29 wird der Wert der Variablen n in die Variable i geschrieben und dann um 1 inkrementiert. Ferner wird die Komponente Ext[i], die der Variablen i entspricht, auf das Erweiterungszeichen K eingestellt. Beim Schritt S30 wird bestimmt, ob der Wert der Variablen j gleich Null ist oder nicht. Wenn das Ergebnis beim Schritt S30 JA ist, wird beim Schritt S31 der Wert der Variablen i in die Komponente First geschrieben, und die Liste entsprechend der Referenznummer ω wird definiert. Andererseits wird, wenn das Ergebnis beim Schritt S30 NEIN ist, der Wert der Variablen i in die Komponente Next[ω] geschrieben, wobei der neue "Bruder" der in Betracht gezogenen Liste hinzugefügt wird. Beim Schritt S33 wird die Referenznummer, die dem Erweiterungszeichen K entspricht, in die Variable i geschrieben, und das Verfahren kehrt zum Schritt S21 zurück. Wenn es kein Zeichen gibt, das eingegeben werden soll, wird ein Code, der der Variablen ω entspricht, die zu diesem Zeitpunkt erhalten wurde, beim Schritt S34 ausgegeben, und das Verfahren endet.
  • Unter Bezugnahme auf die Fig. 11a und 11b wird nach einer Teilfolge 'azw' gesucht. Das Verzeichnis 220, das in der Fig. 9A gezeigt ist, hat die Teilfolgen-Tabelle lob und die Offen-Zerstückelungs-Tabelle 10a, die aus einer Sequenz First 100 und einer Sequenz Next 101 besteht. Das Zeichen z wird in K geschrieben, und es wird auf die Sequenzen First und Next Bezug genommen, so daß die Komponente (der Index) Next[i = P2] = P3 erhalten wird. Da zu diesem Zeitpunkt Ext[P3] = z, gilt j = P2 und lk = P1. Somit wird beim Schritt S35 bestimmt, daß lk nicht gleich 0 ist, so daß die Baumposition des Zeichens 'z' mit jener des Zeichens 'h' unmittelbar vor dem Zeichen 'z' ausgetauscht wird, wie in der Fig. 11a gezeigt ist. Das heißt, wie in den Fig. 12A und 12B gezeigt ist, i = P3 wird in die Komponente Next[lk = P1] geschrieben, Next[i = P3] = 0 wird in die Komponente Next[j = P2] geschrieben, und j = P2 wird in die Komponente Next[i = P3] geschrieben. Ferner wird die Sequenz Next[i] geschrieben, wie in der Fig. 12B gezeigt ist.
  • Dann wird das nächste Zeichen 'w' beim Schritt S21 eingegeben. Die Sequenz First 100 und die Sequenz Next 101 folgen, wie in der Fig. 13B gezeigt ist, so daß Next[P9] = P10 als der Index erhalten wird. Zu diesem Zeitpunkt gilt Ext[P10] = w, und j = P9 und lk = P8. Somit ist beim Schritt S35 bestimmt, daß lk nicht gleich 0 ist, so daß die Position des Zeichens 'w' mit jener des Zeichens 'g' getau'scht wird, wie in der Fig. 13A gezeigt ist. Das heißt, i = P10 wird in Next[lk = 8] geschrieben, Next[i = P10] = 0 wird in Next[j = P9] geschrieben, und j = P9 wird in Next[i = P10] geschrieben. Dadurch wird, wie in der Fig. 14A gezeigt ist, die Position des Zeichens 'g' mit der Position des Zeichens 'w' getauscht, und die Sequenz Next[i] wird geändert, wie es in der Fig. 14B gezeigt ist.
  • Wie oben beschrieben wurde, wird jedesmal, wenn ausgelesene Zeichen einzeln gefunden werden, die Position der in Betracht gezogenen Teilfolge mit jener der Teilfolge ausgetauscht, die dieselbe Zerstückelungsadresse wie die in Betracht gezogene Teilfolge hat, und die hierzu unmittelbar vorher ist. Somit wird in dem in der Fig. 14A gezeigten Fall auf die Teilfolgen 'azc', 'azw' und 'azg' in dieser Reihenfolge Bezug genommen, während in dem in der Fig. 13A gezeigten Fall auf die Teilfolgen 'azc', 'azg' und 'azw' in dieser Reihenfolge Bezug genommen wird. Folglich ist es möglich, das Verzeichnis auf der Basis der Frequenz des Auftretens von Teilfolgen dynamisch zu erstellen.
  • Verschiedene Variationen der ersten Ausführung der vorliegenden Erfindung können vorgenommen werden. Es ist möglich, ein Format der Offen-Zerstückelungs-Tabelle zu verwenden, das von jenem verschiedenen ist, das die Sequenz First und die Sequenz Next verwendet. Es ist möglich, codierte Datenfolgen anstelle von Zeichenfolgen zu verarbeiten.
  • Nun wird eine Beschreibung einer zweiten bevorzugten Ausführung der vorliegenden Erfindung unter Bezugnahme auf die Fig. 8B angegeben. Die in der Fig. 8B-(I) gezeigte Baumstruktur wird durch das herkömmliche Codierverfahren erzeugt. Gemäß der zweiten bevorzugten Ausführung der vorliegenden Erfindung wird die Position eines Zeichens 'a', das durch * angegeben ist, mit jener eines Zeichens 'b' ausgetauscht, das am Kopf der zweiten Ebene positioniert ist, die vom Zeichen 'a' auf der ersten Ebene ausgeht, so daß die Teilfolge 'aa' anstelle der Teilfolge 'ac' am Kopf der Liste positioniert ist.
  • Unter Bezugnahme auf die Fig. 15 wird der in der Fig. 9B gezeigte vorerwähnte Schritt S202 durch den Schritt S202A ersetzt. Beim Schritt S202A ist die Offen-Zerstückelungs-Tabelle 10a, die in der Fig. 9A gezeigt ist, modifiziert, so daß die Teilfolge, nach der gesucht wird, zum Auslesen am Kopf der Liste positioniert ist.
  • Die Fig. 16 ist ein Flußdiagramm eines Codierverfahrens gemäß der zweiten bevorzugten Ausführung der vorliegenden Erfindung. In der Fig. 16 haben jene Teile, die dieselben wie jene sind, die in der Fig. 10 gezeigt sind, dieselben Bezugszeichen erhalten. Das Flußdiagramm in der Fig. 16 wird durch Weglassen der Schritte S35 und S36 von dem Flußdiagramm der Fig. 10 und durch Ersetzen der Schritte S23a und S27a in der Fig. 10 durch Schritte S23 und S27 erhalten, die in der Fig. 7 gezeigt sind.
  • Unter Bezugnahme auf die Fig. 17A und 17B wird nach der Teilfolge 'ahf' auffolgende Weise gesucht. In dem Fall haben die Sequenz First 100 und die Sequenz Next 101 der Offen-Zerstückelungs-Tabelle 10a und die Teilfolgen- Tabelle 10b jeweilige Daten, wie in der Fig. 17B gezeigt ist. Das Zeichen 'h' wird als das Eingabezeichen K eingegeben, und es wird auf die Sequenzen First und Next Bezug genommen, so daß die Komponente Next[i = P1] = P2 erhalten wird. Da zu diesem Zeitpunkt Ext[i] = h, sind die Komponenten Next so, daß i = P2 und j = P1. Somit wird die Teilfolge 'ab' beim Schritt S38, der in der Fig. 16 gezeigt ist, mit der Teilfolge 'ah' ausgetauscht. Das heißt, wie in den Fig. 18A und 18B gezeigt ist, Next[i] = P3 wird in Next[j = P1] geschrieben, First[ω = a] = P1 wird in Next[P2] geschrieben, und i (= P2) wird in First[ω = a] geschrieben. Dadurch wird die in der Fig. 17A gezeigte Baumstruktur zu jener modifiziert, die in der Fig. 18A gezeigt ist.
  • Unter Rückkehr zum Schritt S21 wird das nächste Zeichen 'f' eingegeben, und es wird auf die Sequenzen First 100 und Next 101 Bezug genommen, wie in den Fig. 19A und 19B gezeigt ist. Dann wird Next[P6] = P7 erhalten. Zu diesem Zeitpunkt sind die Komponenten Next so, daß i = P7 und j = P6. Somit wird die Position des Zeichens 'f' in der Baumstruktur beim Schritt S38, der in der Fig. 16 gezeigt ist, mit jener des Zeichens 'd' getauscht. Das heißt, Next[i] = 0 wird in Next[j = P6] geschrieben, First[ω = P2] = P6 wird in Next[i = P7] geschrieben, und i (= P7) wird in First[ω = P2] geschrieben. Dadurch wird die in der Fig. 18A gezeigte Baumstruktur in jene geändert, die in der Fig. 19A gezeigt ist.
  • Nun wird eine Beschreibung einer dritten bevorzugten Ausführung der vorliegenden Erfindung angegeben. Die Fig. 8C zeigt eine Skizze der dritten bevorzugten Ausführung der vorliegenden Erfindung. Die Frequenz im Auftreten jeder Teilfolge (in anderen Worten, die Häufigkeit, mit der jede Teilfolge auftritt) wird berechnet, und die Baumstruktur wird darauf basieren modifiziert. Eine Nummer in einem jedem Zeichen beigefügten Block zeigt die Frequenz im Auftreten jeder Teilfolge. Zum Beispiel tritt, wie in der Fig. 8C-(I) gezeigt ist, die Teilfolge 'ab' 16 mal auf, die Folge 'ac' tritt dreimal auf, und die Folge 'aa' tritt neunmal auf. Gemäß der dritten Ausführung der vorliegenden Erfindung hat, wie in der Fig. 8C-(II) gezeigt ist, die Folge 'aa' eine höhere Auftrittsfrequenz wie jene der Folge 'ac'. Folglich wird die Folge 'aa' positionsmäßig mit der Folge 'ac' ausgetauscht.
  • Die Fig. 21A zeigt eine Systemstruktur der dritten bevorzugten Ausführung der vorliegenden Erfindung. In der Fig. 21A sind jene Teile, die dieselben sind wie jene, die in den vorhergehenden Figuren gezeigt sind, mit denselben Bezugszeichen versehen. Der Verzeichnisspeicher 220 hat die vorerwähnte Offen-Zerstückelungs-Tabelle 10a und eine Teilfolgen-Tabelle 10b'. Wie in der Fig. 21A gezeigt ist, hat die Teilfolgen-Tabelle 10b' einen Zählerbereich und einen Übertrag-Markierungsbereich zusätzlich zu der vorerwähnten Referenznummer (Index i) und dem Erweiterungszeichen Ext[i]. Der Zählerbereich speichert die Häufigkeit, mit der auf die entsprechende Teilfolge zugegriffen wurde. Der Übertrag-Markierungsbereich speichert eine Übertrag- Markierung, die angibt, ob der Wert des entsprechenden Zählerbereichs übergelaufen ist oder nicht (das heißt, dieser Wert größer als ein vorgegebener Grenz-Zählerwert wird).
  • Unter Bezugnahme auf die Fig. 21B wird das Verzeichnis 220 beim Schritt 201 ausgelesen, und der Zählerwert in dem Zählerbereich, der der Teilfolge entspricht, nach der gesucht wird, wird beim Schritt S204 inkrementiert. Beim nachfolgenden Schritt S205 wird bestimmt, ob die Übertrag- Markierung im entsprechenden Übertrag-Markierungsbereich EIN ist oder nicht. Wenn das Ergebnis dieser Bestimmung positiv ist, werden beim Schritt S206 die Positionen der entsprechenden Teilfolgen in der Baumstruktur miteinander ausgetauscht.
  • Die Fig. 22 ist ein Flußdiagramm des gesamten Codierverfahrens der dritten bevorzugten Ausführung der vorliegenden Erfindung. Der Prozessor 210 setzt einen Zähler (eine Sequenz) Cnt[ ] und eine Markierung Flag[ ] beim Schritt S40 auf Null zurück. Ferner setzt der Prozessor 210 eine Variable outcnt zum Zählen der Anzahl von codierten Zeichen auf Null zurück. Dann wird ein Maximalwert der Variablen outcnt auf zum Beispiel gleich 1 Kilobyte gesetzt. Danach wird eine Ausleseprozedur ausgeführt, die aus den Schritten S41 bis S45 besteht, wie in der Fig. 23 gezeigt ist.
  • Beim Schritt 41, der in der Fig. 23 gezeigt ist, wird das erste Zeichen ω eingegeben. Der Prozessor 210 gibt das nächste Zeichen K ein und inkrementiert den Wert der Variablen outcnt beim Schritt S42 um +1. Durch den von der Teilfolge ω gebildeten Index wird auf die Komponente First[ω] in der Sequenz First Bezug genommen, und beim Schritt S44-1 in die Variable i geschrieben. Beim nachfolgenden Schritt S44-2 wird der Index i mit K verglichen. Wenn bestimmt wird, daß der Index i nicht K ist, wird beim Schritt S44-3 auf die Komponente Next[i] der Sequenz Next 101 Bezug genommen. Beim nachfolgenden Schritt S44-4 wird bestimmt, ob i = 0 oder nicht. Wenn i = 0, gibt es kein Kandidatenzeichen. Wenn andererseits i nicht gleich Null ist, kehrt das Verfahren zum Schritt S44-2 zurück. Wenn beim Schritt S44-2 bestimmt wird, daß i = K, wird erkannt, daß ωK in dem Verzeichnis 220 registriert wurde, und beim Schritt S44-5 wird ein Index i in die Teilfolge ω geschrieben. Ferner wird bei diesem Schritt der Wert des Zählers Cnt[i] um 1 inkrementiert, und das Verfahren kehrt zum Schritt S42 zurück. Wenn ωK nicht in dem Verzeichnis 220 registriert wurde, wird die neue Teilfolge ωK beim in der Fig. 22 gezeigten Schritt S46 in dem Verzeichnis 220 registriert, und der Code Code(ω) wird ausgegeben.
  • Beim Schritt S48 wird bestimmt, ob der Wert der Variablen outcnt größer als der vorgegebene Wert MAX wurde, der beim Schritt S40 bestimmt wurde, oder nicht. Wenn das Ergebnis beim Schritt S48 NEIN ist, kehrt das Verfahren zum Schritt S41 zurück. Ist andererseits das Ergebnis beim Schritt S48 JA, werden beim Schritt S49 die Wege des Baums umgeordnet. Beim nachfolgenden Schritt S50 werden der Zähler Cnt[ ], die Flag[ ] und die Variable outcnt auf Null zurückgesetzt, und das Verfahren kehrt zum Schritt S41 zurück.
  • Wie oben beschrieben wurde, wird die Umordnung der Wege des Baums ausgeführt, wenn der Wert der Variablen outcnt den vorgegebenen Wert MAX übersteigt. Das Auslesen wird längs der Wege des Baums ausgeführt, und nach der längsten Teilfolge, die ein Teil der Teilfolge ist, die in Betracht gezogen wird, wird gesucht. Dann wird die oben angegebene Teilfolge mit der längsten Übereinstimmung an der Position des Baums codiert, an der sie gefunden wurde.
  • Wenn die eingegebene Teilfolge nicht identisch mit der bereits registrierten Teilfolge mit der längsten Übereinstimmung ist, wird eine neue Teilfolge registriert. Dann wird bestimmt, ob die Anzahl von Zeichen, die durch die Variable outcnt angegeben wird, einen vorgegebenen Wert MAX übersteigt oder nicht. Wenn das Ergebnis dieser Bestimmung positiv ist, wird die nächste Teilfolge ausgelesen.
  • Die Fig. 24 zeigt das Verfahren beim Schritt S49, der in der Fig. 22 gezeigt ist, im Einzelnen. Die Umordnung der Wege des Baums wird für einen Teil der Baumstruktur ausgeführt, um die Zeit zu verringern, die für die Umordnung erforderlich ist. Gemäß einer Simulation ist die durchschnittliche Tiefe der Baumstruktur gleich 3 bis 10, und es ist ausreichend, die Wege in diesem Bereich umzuordnen. Der in der Fig. 21A gezeigte Prozessor 210 initialisiert eine maximale Tiefe DepthMax beim Schritt S49-1 auf 10 und den Index beim Schritt S49-2 auf 0. Beim Schritt S49-3 wird bestimmt, ob die Komponente First[i] gleich Null ist oder nicht. Wenn das Ergebnis beim Schritt S49-3 NEIN ist, wird erkannt, das für den in Betracht gezogenen Index eine Teilfolge registriert wurde. Somit prüft der Prozessor 210 die Tiefe Depth der Teilfolge, die durch den Index i spezifiziert ist, beim Schritt S49-4. Das heißt, Next[i] wird sequentiell gefolgt, bis die Komponente von Next[i] Null wird, und die Anzahl von Zeichen in der schließlich erhaltenen Teilfolge wird vom Index i erhalten. Beim Schritt S49-5 wird die Tiefe Depth, die beim Schritt 549-4 erhalten wurde, mit der maximalen Tiefe Depthmax verglichen. Wenn Depth > Depthmax, ist der Baum zu tief und das Verfahren geht zum Schritt S49-7 weiter, ohne den Umordnungsprozeß auszuführen. Wenn andererseits das Ergebnis beim Schritt S49-5 NEIN ist, wird auf die Markierung Flag[ ] Bezug genommen, und die Sequenzen First[ ] und Next[ ] werden neu geschrieben.
  • Nun wird das Verfahren beim Schritt S49-6 unter Bezugnahme auf die Fig. 25A und 25B beschrieben. Es wird nun angenommen, daß der Baum Teilfolgen 'ar', 'ad', 'ac' und 'aa' hat, die in dieser Reihenfolge auftreten. In diesem Fall sind die jeweiligen Werte des Zählers Cnt[i] 2, 6, 3 und 5. Wenn die Markierung Flag[ ] entsprechend 0, 1, 0 und 1 ist, werden 'ad' und 'aa', die hohe Auftrittsfrequenzen haben, nach vorne geschoben, so daß die in der Fig. 25A gezeigte Tabelle umgeordnet wird, wie in der Fig. 25B gezeigt ist. Das heißt, die Komponente First[a] wird von P1 auf P2 geändert, die Komponente von Next[P2] wird auf P4 geändert, die Komponente von Next[P3] wird auf 0 geändert, und die Komponente von Next[P4] wird auf P1 geändert. Als ein Ergebnis dieser Umordnung wird den Bäumen in der Reihenfolge P2, P4, P1 und P3 gefolgt. Dann geht das Verfahren zum Schritt S49-7 weiter.
  • Wenn beim Schritt S49-3 bestimmt wird, daß First[i] = 0, wird erkannt, daß bezüglich dieses Index keine registrierte Teilfolge gibt; der Index i wird beim Schritt S49-7 um 1 inkrementiert. Beim Schritt S49-8 wird der Index i mit dem maximalen Wert Indexmax verglichen. Wenn das Ergebnis NEIN ist, kehrt das verfahren zum Schritt S49-3 zurück. Wenn andererseits das Ergebnis JA ist, wird erkannt, das alle registrierten Zeichen umgeordnet wurden, und das Verfahren endet.
  • Die vorliegende Erfindung ist nicht auf die spezifisch offenbarten Ausführungen beschränkt, und Variationen und Modifikationen können vorgenommen werden, ohne vom Umfang der beigefügten Ansprüche abzuweichen.
  • Die Modifikationen des Verzeichnisses, das in den Fig. 8A bis 8C gezeigt ist, brauchen nicht in allen drei Schichtebenen durchgeführt werden, sondern können auf genau einen Untersatz der Ebenen beschränkt sein. Um so näher eine bestimmte Ebene zur Wurzel des Baums ist, um so wirksamer ist die Anwendung der Modifikation auf diese Schicht.

Claims (14)

1. Datenkomprimierungsverfahren, enthaltend die Schritte:
a) Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Datenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angege ben ist, in einem Verzeichnis registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in einer Reihenfolge angeordnet sind, in der die registrierten Teilfolgen auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist (50, 50A, S41 - S45),
b) Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit der Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde (S28, S34, S46), und
c) Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis (60, S46),
dadurch gekennzeichnet, daß das Verfahren einen Schritt d) des Modifizierens der Liste enthält, so daß die Position einer ersten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur, wenn darauf zugegriffen wird, mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, welche zweite registrierte Teilfolge vor dem Umordnen vor der ersten registrierten Teilfolge in der Liste eingeordnet ist, welche ersten und zweiten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen (S36, S38, S49).
2. Datenkomprimierungsverfahren, enthaltend die Schritte:
a) Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Datenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angegeben ist, in einem Verzeichnis registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in einer Reihenfolge angeordnet sind, in der die registrierten Teilfolgen auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist (50, 50A, S41 - S45),
b) Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit einer Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde (S28, S34, S46), und
c) Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis (60, S46),
dadurch gekennzeichnet, daß das Verfahren die weiteren Schritte enthält
d) Aufzeichnen der Zugriffsfrequenz jeder der registrierten Teilfolgen, und
e) Modifizieren der Liste, so daß die Position einer ersten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, so daß sie in einer abnehmenden Reihenfolge der aufgezeichneten Zugriffsfrequenz umgeordnet werden, welche ersten und zweiten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen (S36, S38, S49).
3. Datenkomprimierungsverfahren nach Anspruch 1, wobei der Schritt d) das Modifizieren der Liste enthält, so daß die Position der ersten registrierten Teilfolge mit der Position der zweiten registrierten Teilfolge ausgetauscht wird, die auf einer Baum-Schichtebene identisch zu jener der ersten registrierten Teilfolge ist und die unmittelbar vor der ersten registrierten Teilfolge ist.
4. Datenkomprimierungsverfahren nach Anspruch 2, wobei der Schritt e) das Modifizieren der Liste enthält, so daß die Position der ersten registrierten Teilfolge, auf die zugegriffen werden soll, mit der Position der zweiten registrierten Teilfolge ausgetauscht wird, die auf einer Baum-Schichtebene identisch zu jener der ersten registrierten Teilfolge ist, bevor auf die registrierten Teilfolgen zugegriffen wird, die auf der besagten Baum- Schichtebene angeordnet sind.
5. Datenkomprimierungsverfahren nach Anspruch 1, wobei: auf die registrierten Teilfolgen individuell gemäß Daten zugegriffen wird, die am Anfang der Liste angeordnet sind, und der Schritt d) das Modifizieren der Liste enthält, so daß Daten, die die zweite registrierte Teilfolge angeben und die am Anfang der Liste angeordnet sind, durch Daten ersetzt werden, die die erste registrierte Teilfolge zeigen.
6. Datenkomprimierungsverfahren nach Anspruch 2 oder 4, wobei: der Schritt e) das Modifizieren der Liste auf der Basis der Zugriffsfrequenz jeder der registrierten Teilfolgen enthält.
7. Datenkomprimierungsverfahren nach Anspruch 2, 4, oder 6, wobei: das Datenkomprimierungsverfahren ferner den Schritt des Vergleichens der Frequenz mit einer vorgegebenen Grenzfrequenz enthält, und der Schritt e) den Schritt des Modifizierens der Liste enthält, wenn bestimmt ist, daß die Frequenz höher als die vorgegebene Grenzfrequenz ist.
8. Datenkomprimierungsverfahren nach Anspruch 2, 4, oder 7, wobei: der Schritt e) das Modifizieren der Liste enthält, so daß die registrierten Teilfolgen, die von einem identischen Knoten ausgehen, in einer abnehmenden Reihenfolge der Frequenz umgeordnet werden.
9. Datenkomprimierungsverfahren nach einem der vorhergehenden Ansprüche, wobei die Liste auf vorgegebenen Schichtebenen der Baumstruktur modifiziert wird.
10. Datenkomprimierungsverfahren nach einem der vorhergehenden Ansprüche, wobei das Datenkomprimierungsverfahren den Schritt des sequentiellen Auswählens von einer von Listen enthält, die jeweils für die Knoten in einer Reihenfolge vorgesehen sind, die durch Daten angegeben ist, die in einem Indexverzeichnis gespeichert sind, das in dem Verzeichnis vorgesehen ist.
11. Datenkomprimierungsverfahren nach einem der vorhergehenden Ansprüche, wobei die eingegebene Teilfolge eine Teilfolge ist, die aus einer der Referenznummern und einem Erweiterungssymbol aufgebaut ist, das auf eine Teilfolge folgt, die durch die eine der Referenznummern spezifiziert ist.
12. Datenkomprimierungsverfahren nach einem der vorhergehenden Ansprüche, wobei codierte Daten, die beim Schritt b) erhalten werden, einen LZW- oder auch Lempel- Ziv-Welch- genannten Code enthalten.
13. Datenkomprimierungsvorrichtung, enthaltend: erste Einrichtungen (210) zum Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Zeichenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angegeben ist, in einem Verzeichnis (220) registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in der Reihenfolge angeordnet sind, in der die registrierten Teilfolgen zuerst auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist,
zweite Einrichtungen (210), die mit den ersten Einrichtungen gekoppelt sind, zum Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit der Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde, und dritte Einrichtungen (210), die mit den ersten und zweiten Einrichtungen gekoppelt sind, zum Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis,
dadurch gekennzeichnet, daß die Datenkomprimierungsvorrichtung vierte Einrichtungen (210) enthält, die mit den ersten Einrichtungen gekoppelt sind, zum Modifizieren der Liste, so daß die Position einer ersten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur, nachdem darauf zugegriffen wurde, mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, welche zweite registrierte Teilfolge vor dem Umordnen vor der ersten registrierten Teilfolge in der Liste eingeordnet ist, welche ersten und zweiten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen.
14. Datenkomprimierungsvorrichtung, enthaltend: erste Einrichtungen (210) zum Bestimmen, ob eine eingegebene Teilfolge, die einem Teil einer eingegebenen Zeichenfolge entspricht, mit irgend einer einer Mehrzahl von registrierten Teilfolgen übereinstimmt oder nicht, die gemäß einer Auslesereihenfolge, die durch in einer Liste gespeicherte Daten angegeben ist, in einem Verzeichnis (220) registriert wurden, welche registrierten Teilfolgen in einer Baumstruktur in der Reihenfolge angeordnet sind, in der die registrierten Teilfolgen zuerst auftreten, und Referenznummern zugeordnet sind, welche Liste für jeden Knoten der Baumstruktur vorgesehen ist,
zweite Einrichtungen (210), die mit den ersten Einrichtungen gekoppelt sind, zum Codieren der eingegebenen Teilfolge, die eine längste Übereinstimmung mit einer der registrierten Teilfolgen erzeugt, mit einer Referenznummer, die in dem Verzeichnis registriert wurde und die der einen der registrierten Teilfolgen zugeordnet wurde, und
dritte Einrichtungen (210), die mit den ersten und zweiten Einrichtungen gekoppelt sind, zum Zuordnen einer Referenznummer zu einer Teilfolge, die durch Hinzufügen von Erweiterungsdaten zu der eingegebenen Teilfolge erhalten wurde, und Registrieren der Referenznummer in dem Verzeichnis,
dadurch gekennzeichnet, daß die Datenkomprimierungsvorrichtung vierte Einrichtungen zum Aufzeichnen der Zugriffsfrequenz der registrierten Teilfolgen und fünfte Einrichtungen (210), die mit den ersten Einrichtungen gekoppelt sind, zum Modifizieren der Liste enthält, so daß die Position einer ersten registrierten Teilfolge unter den registrierten Teilfolgen in der Baumstruktur mit der Position einer zweiten registrierten Teilfolge ausgetauscht wird, so daß sie in einer abnehmenden Reihenfolge der aufgezeichneten Zugriffsfrequenz umgeordnet werden, welche ersten und zweiten registrierten Teilfolgen von einem identischen Knoten der Baumstruktur ausgehen.
DE69123660T 1990-08-13 1991-08-09 Datenkompressionsmethode und Gerät Expired - Fee Related DE69123660T2 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2213990A JP2535655B2 (ja) 1990-08-13 1990-08-13 辞書検索方式
JP2281431A JP3012677B2 (ja) 1990-10-19 1990-10-19 Zl符号化方法
JP2281432A JP3012678B2 (ja) 1990-10-19 1990-10-19 データ圧縮方法
JP2281433A JP3012679B2 (ja) 1990-10-19 1990-10-19 データ圧縮方法

Publications (2)

Publication Number Publication Date
DE69123660D1 DE69123660D1 (de) 1997-01-30
DE69123660T2 true DE69123660T2 (de) 1997-04-17

Family

ID=27476667

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69123660T Expired - Fee Related DE69123660T2 (de) 1990-08-13 1991-08-09 Datenkompressionsmethode und Gerät

Country Status (3)

Country Link
US (1) US5150119A (de)
EP (2) EP0471518B1 (de)
DE (1) DE69123660T2 (de)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5592667A (en) * 1991-05-29 1997-01-07 Triada, Ltd. Method of storing compressed data for accelerated interrogation
US5140321A (en) * 1991-09-04 1992-08-18 Prime Computer, Inc. Data compression/decompression method and apparatus
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
JP2505980B2 (ja) * 1993-04-16 1996-06-12 インターナショナル・ビジネス・マシーンズ・コーポレイション 静的辞書作成方法及びコンピュ―タ実行システム
US5463389A (en) * 1993-09-24 1995-10-31 Motorola, Inc. Data compression method and device utilizing children arrays
US5392036A (en) * 1993-10-28 1995-02-21 Mitan Software International (1989) Ltd. Efficient optimal data recopression method and apparatus
AU1514795A (en) * 1993-12-30 1995-08-01 Connectix Corporation Lossless data compression system and method
JP3522331B2 (ja) * 1994-04-22 2004-04-26 株式会社セタ データ圧縮方法
AUPM607994A0 (en) * 1994-06-03 1994-06-30 Masters, John A data conversion technique
JP3278297B2 (ja) * 1994-07-20 2002-04-30 富士通株式会社 データ圧縮方法及びデータ復元方法並びにデータ圧縮装置及びデータ復元装置
US5608396A (en) * 1995-02-28 1997-03-04 International Business Machines Corporation Efficient Ziv-Lempel LZI data compression system using variable code fields
JP3273119B2 (ja) * 1995-09-29 2002-04-08 京セラ株式会社 データ圧縮・伸長装置
JP3276860B2 (ja) * 1996-09-02 2002-04-22 富士通株式会社 データ圧縮/復元方法
US6012057A (en) * 1997-07-30 2000-01-04 Quarterdeck Corporation High speed data searching for information in a computer system
KR19990076303A (ko) * 1998-03-31 1999-10-15 전주범 모뎀용 데이터 부호화 및 복호화 방법
US6470347B1 (en) 1999-09-01 2002-10-22 International Business Machines Corporation Method, system, program, and data structure for a dense array storing character strings
US6404362B1 (en) 1999-09-21 2002-06-11 Unisys Corporation Method and apparatus for reducing the time required for decompressing compressed data
JP3913004B2 (ja) * 2001-05-28 2007-05-09 キヤノン株式会社 データ圧縮方法及び装置及びコンピュータプログラム及び記憶媒体
US7269548B2 (en) * 2002-07-03 2007-09-11 Research In Motion Ltd System and method of creating and using compact linguistic data
US7609722B2 (en) * 2003-02-14 2009-10-27 Atheros Communications, Inc. Method and apparatus for transmitting and receiving compressed frame of data over a wireless channel
US7770091B2 (en) * 2006-06-19 2010-08-03 Monro Donald M Data compression for use in communication systems
CN100595596C (zh) * 2007-12-12 2010-03-24 北京四方继保自动化股份有限公司 电网广域测量***(wams)中动态数据压缩存储方法
US9805312B1 (en) * 2013-12-13 2017-10-31 Google Inc. Using an integerized representation for large-scale machine learning data
US10224957B1 (en) * 2017-11-27 2019-03-05 Intel Corporation Hash-based data matching enhanced with backward matching for data compression

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4597057A (en) * 1981-12-31 1986-06-24 System Development Corporation System for compressed storage of 8-bit ASCII bytes using coded strings of 4 bit nibbles
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
US4771385A (en) * 1984-11-21 1988-09-13 Nec Corporation Word recognition processing time reduction system using word length and hash technique involving head letters
US4843389A (en) * 1986-12-04 1989-06-27 International Business Machines Corp. Text compression and expansion method and apparatus
FR2608806B1 (fr) * 1986-12-23 1989-03-17 Valero Robert Procede et appareil programmable pour le transcodage de chaines de caracteres
US4899148A (en) * 1987-02-25 1990-02-06 Oki Electric Industry Co., Ltd. Data compression method
GB8719572D0 (en) * 1987-08-19 1987-09-23 Krebs M S Sigscan text retrieval system
US4881075A (en) * 1987-10-15 1989-11-14 Digital Equipment Corporation Method and apparatus for adaptive data compression
US4847619A (en) * 1987-10-19 1989-07-11 Hewlett-Packard Company Performance-based reset of data compression dictionary
US4899147A (en) * 1988-06-03 1990-02-06 Unisys Corporation Data compression/decompression apparatus with throttle, start-up and backward read controls
GB8815978D0 (en) * 1988-07-05 1988-08-10 British Telecomm Method & apparatus for encoding decoding & transmitting data in compressed form
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

Also Published As

Publication number Publication date
US5150119A (en) 1992-09-22
EP0471518B1 (de) 1996-12-18
EP0688104A3 (de) 1996-01-31
EP0471518A1 (de) 1992-02-19
EP0688104A2 (de) 1995-12-20
DE69123660D1 (de) 1997-01-30

Similar Documents

Publication Publication Date Title
DE69123660T2 (de) Datenkompressionsmethode und Gerät
DE69725215T2 (de) Verfahren und Vorrichtung zur Komprimierung und Dekomprimierung von Schrifttypen
DE68925798T2 (de) Datenverdichtung
DE19606178C2 (de) Verfahren zum Komprimieren einer Anordnung von Pixelwerten und zum Dekomprimieren einer Anordnung von Pixelwerten aus einem komprimierten Datensatz
DE68907812T2 (de) Verfahren und Vorrichtung zur Kodierung, Dekodierung und Übertragung von Daten in komprimierter Form.
DE3852341T2 (de) Zeichenverarbeitungssystem mit Funktion zur Prüfung von Rechtschreibung.
DE3788563T2 (de) Verfahren und Einrichtung um eine Datenbankadresse zu bestimmen.
DE4314741C2 (de) Dekodierer für Einheiten von Huffman-kodierten Daten
DE68924138T2 (de) Daten-kompressions/dekompressionsanordnung.
DE4340591C2 (de) Datenkompressionsverfahren unter Verwendung kleiner Wörterbücher zur Anwendung auf Netzwerkpakete
DE69026924T2 (de) Datenkomprimierungsverfahren
DE69532775T2 (de) Verfahren zur Datenkomprimierung und -Dekomprimierung und zugehöriges Datenkomprimierungs- und Dekomprimierungsgerät
DE69031031T2 (de) Bandspeicherung
DE602004010922T2 (de) Speicher und stromeffizienter mechanismus für schnelles tabellennachschlagen
DE10196890B4 (de) Verfahren zum Ausführen einer Huffman-Decodierung
DE69834695T2 (de) Verfahren und Vorrichtung zur Datenkompression
DE2208664A1 (de) Verfahren zur Decodierung eines vorsatzfreien Verdichtungscodes veränderlicher Länge
DE3485824T2 (de) Verfahren zur datenkompression.
DE2801988A1 (de) Arithmetische codierung von symbolfolgen
DE2205422A1 (de) Verfahren zur Verarbeitung verdichteter Daten
DE102008016179A1 (de) Automatische Generierung von Kompaktcodetabellen
DE102006062062B4 (de) Komprimierung von Lieddaten und Komprimierer/Dekomprimierer
DE3030255A1 (de) Verfahren zur uebermittlung von woertern und nachrichtenuebertragungssystem zu seiner durchfuehrung
DE10196847B4 (de) Ein Verfahren zum Erzeugen von Huffman-Code-Längeninformationen
DE69125424T2 (de) Vorrichtung zur variablen Längenkodierung und Vorrichtung zur variablen Längendekodierung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee