-
Hintergrund der Erfindung
-
1. Gebiet der Erfindung
-
Die vorliegende Erfindung betrifft ein Computerprogrammprodukt, ein System, ein Verfahren und eine Datenstruktur zum Erzeugen eines Code-Alphabets von Symbolen, um Codewörter für Wörter zu erzeugen, die mit einem Programm verwendet werden.
-
2. Beschreibung des einschlägigen Stands der Technik
-
Zu einer Datenverdichtung gehört ein Umwandeln von Symbolen, einschließlich Datensymbolen und Steuersymbolen, in einem Eingabedatenstrom in einen verdichteten Ausgabedatenstrom, der weniger Daten aufweist als der Eingabedatenstrom. Steuersymbole werden in den verdichteten Datenstrom verschlüsselt und stellen Entschlüsselungsanweisungen bereit, um eine Aufhebung der Verdichtung zu gestatten und können durch das Anwendungsprogramm erstellt werden, das Daten verdichtet. Beispiele für Steuersymbole, die von der Anwendung erstellt werden, enthalten ein Datensatzende-Steuersignal, eine Dateimarkierung und eine Datendateigrenze. Es gibt weitere Ereignisse oder Steuerelemente, die durch die Verdichtungseinheit bestimmt werden, wie beispielsweise wann zu einem vorgegebenen Verdichtungsschema gewechselt werden soll und wann der Protokollpuffer zurückgesetzt werden soll, der zum Ausführen einer Verdichtung in einem vorgegebenen Schema verwendet wird. Die Verdichtungseinheit kann entscheiden, einen Zugriffspunkt zu erstellen, an dem eine Verdichtung beginnt, wobei ein zurückgesetzter Protokollpuffer ein bestimmtes Schema verwendet, nachdem eine Datendateigrenze angetroffen wurde.
-
Ein Typ einer Verschlüsselungstechnik, die Huffman-Codierung, stellt einen verlustfreien Verdichtungsalgorithmus bereit, der eine Codetabelle von Symbolen von variabler Länge zum Verschlüsseln von Quellensymbolen verwendet, wobei die Codetabelle von variabler Länge auf der Grundlage der geschätzten Wahrscheinlichkeit eines Vorkommens für jeden möglichen Quellensymbolwert abgeleitet wurde, um Verschlüsselungen der Quellensymbole zu erzeugen.
-
Ein Algorithmus für fließende verlustfreie Datenverdichtung (Streaming Lossless Data Compression – SLDC) empfängt einen Eingabedatenstrom von Steuersymbolen und Datensymbolen und wandelt Zeichenfolgen von aufeinander folgenden Bytes von Datensymbolen in Kopierzeiger und Literaldatensymbole um, die weniger Bits als die Datensymbole in dem Eingabedatenstrom aufweisen. Der SLDC-Algorithmus wird zum Verdichten und Aufheben der Verdichtung von Daten in Linear Tape-Open-(LTO)Magnetbandkassetten verwendet. Details des SLDC-Algorithmus werden in der Veröffentlichung des Standards ECMA-321 „Streaming Lossless Data Compression Algorithm – (SLDC)” beschrieben, datiert vom 1. Juni 2001.
-
Der SDLC-Algorithmus gibt ein Literaldatensymbol in den verdichteten Datenstrom aus, wenn keine aufeinander folgenden Bytes nach einem Datenbyte in dem Protokollpuffer vorhanden sind, sodass das Literaldatenbyte unverdichtet ausgegeben wird. Der SLDC-Algorithmus gibt ein Kopierzeigersymbol in den Aufgabedatenstrom aus, um mehrere aufeinander folgende Datenbytes darzustellen, die einer selben Anzahl von aufeinander folgenden Datenbytes in dem Protokollpuffer entsprechen. Das Kopierzeigersymbol enthält ein Bit, das angibt, dass das Symbol ein Kopierzeiger ist, ein Übereinstimmungszählerfeld, das die Anzahl übereinstimmender aufeinander folgender Bytes angibt, und ein Verschiebungsfeld, das eine absolute Arbeitsspeicheradresse mit dem Protokollpuffereintrag angibt, der das erste Byte der übereinstimmenden aufeinander folgenden Bytes enthält.
-
Daher besteht beim Stand der Technik ein Bedarf, Techniken zum Erzeugen von Code-Alphabeten von Symbolen bereitzustellen, die zum Darstellen von Wörterwerten in einem Programm verwendet werden, einschließlich Verdichtungsprogrammen, aber nicht darauf beschränkt.
-
Kurzdarstellung der Erfindung
-
Bereitgestellt werden ein Computerprogrammprodukt, ein System und ein Verfahren zum Erzeugen eines Code-Alphabets zur Verwendung durch ein genutztes Programm zum Bestimmen von Codewörtern für Wörter mit einer Länge von b Bits, die in einem Datenverarbeitungssystem verwendet werden, wobei die Codewörter eine durchschnittliche Codewortlänge haben, die kleiner als b ist. Ein erstes Code-Alphabet wird erzeugt, das eine erste Anzahl von Symbolen hat, die Verschlüsselungen der Wörter von variabler Länge bereitstellen, wobei eine erste durchschnittliche Codewortlänge der Codewörter, die unter Verwendung der Symbole in dem ersten Code-Alphabet erzeugt werden, kleiner ist als die Codewortlänge (b) der Wörter. Die Symbole in dem ersten Code-Alphabet werden in eine zweite Anzahl von Gruppen der Symbole in dem ersten Code-Alphabet zusammengeführt, wobei die zweite Anzahl kleiner als die erste Anzahl ist. Ein zweites Code-Alphabet wird erzeugt, das die zweite Anzahl von Symbolen aufweist, wobei eine zweite durchschnittliche Codewortlänge der Codewörter, die unter Verwendung der Symbole in dem zweiten Code-Alphabet erzeugt wurden, kleiner ist als die Codewortlänge (b) der Wörter, und wobei das zweite Code-Alphabet das Code-Alphabet aufweist, das von dem genutzten Programm verwendet wird.
-
Kurzbeschreibung der Zeichnungen
-
1 veranschaulicht eine Ausführungsform einer Datenverarbeitungsumgebung.
-
2 veranschaulicht eine Umsetzung eines Kopierzeigersymbols nach dem Stand der Technik.
-
3 veranschaulicht eine Ausführungsform einer Verschiebungszähler-Codetabelle von variabler Länge.
-
4a und 4b veranschaulichen eine Ausführungsform von Operationen zum Erzeugen eines ersten Code-Alphabets und eines zweiten Code-Alphabets.
-
5 und 6 veranschaulichen Ausführungsformen von Operationen zum Zusammenführen von Symbolen von einem ersten Code-Alphabet, die zum Erzeugen eines zweiten Code-Alphabets verwendet werden sollen.
-
7 veranschaulicht ein Beispiel einer Verteilung einer Häufigkeit des Vorkommens von 214 relativen Verschiebungszählerwerten.
-
8a und 8b veranschaulichen Entropie- und durchschnittliche Codewortlängen-(Average Codeword Lenght – ACL)Werte für verschiedene Huffman-Codierungen, die verschiedene Anzahlen von zusammengeführten relativen Verschiebungszählerwerten verwenden.
-
9a und 9b veranschaulichen eine Wahrscheinlichkeitsverteilung des Vorkommens von Wörtern für Symbole, wobei jeweils 128 Werte und 32 Werte zum Zusammenführen ausgewählt werden.
-
10 veranschaulicht ein Beispiel einer Huffman-Codierung von relativen Verschiebungswerten in einem Protokollpuffer, die während Verdichtungsoperationen auftreten.
-
11 und 13 veranschaulichen Beispiele für Symbole aus einem ersten Code-Alphabet, indem auf der Grundlage der Verteilung in 7 128 Werte ausgewählt werden, die zusammengeführt werden sollen.
-
12 und 14 veranschaulichen ein Beispiel für ein Gruppieren von jeweils aufeinander folgenden Symbolen von den Symbolen in 11 und 13 in 18 Gruppen, um ein zweites Code-Alphabet zu bilden, das weniger Symbole hat als jeweils das erste Code-Alphabet von 11 und 13.
-
15 veranschaulicht eine Computerarchitektur, in der beschriebene Ausführungsformen umgesetzt werden können.
-
Ausführliche Beschreibung
-
Beschriebene Ausführungsformen stellen Techniken zum Erzeugen eines ersten Code-Alphabets von Symbolen aus einer Worthäufigkeitsverteilung bereit, wobei die Symbole einer Gruppe von Wörtern zugeordnet sind, und wobei die Codewörter, die durch die Symbole in dem ersten Code-Alphabet erzeugt werden, eine durchschnittliche Codewortlänge haben, die kleiner als die Länge der Gruppe von Wörtern ist. Symbole aus dem ersten Code-Alphabet werden in Gruppen zusammengeführt, um ein zweites Code-Alphabet zu bilden, das ein Symbol für jede der Gruppen von zusammengeführten Symbolen aus dem ersten Code-Alphabet hat. Das zweite Code-Alphabet hat weniger Symbole als das erste Code-Alphabet, und eine durchschnittliche Codewortlänge ist kleiner als die Länge der Wörter in der Gruppe. Auf diese Weise lässt sich das zweite Code-Alphabet leichter umsetzen und verwenden als das erste Code-Alphabet, da es weniger Symbole hat, aber eine durchschnittliche Codewortlänge besitzt, die im Wesentlichen derjenigen des ersten Code-Alphabets ähnlich ist, sodass weniger Symbole ohne Verlust bei der Verdichtung bereitgestellt werden.
-
1 stellt eine Ausführungsform einer Datenverarbeitungsumgebung bereit, um ein Code-Alphabet zu erzeugen, das in einem Programm zum Erzeugen von Codewörtern für Wörter verwendet werden soll, die von dem Programm verwendet werden, wobei die erzeugten Codewörter eine durchschnittliche Länge haben, die kleiner als die Länge der Wörter ist. Ein System 2 enthält einen Prozessor 4 und einen Arbeitsspeicher 6. Der Arbeitsspeicher 6 enthält einen Code-Alphabet-Generator 8 zum Erzeugen eines Code-Alphabets für eine Gruppe von N Wörtern mit einer Länge b. Der Code-Alphabet-Generator 8 verarbeitet eine Worthäufigkeitsverteilung 10, eine durchschnittliche Codewortlängen-(ACL)Funktion 12, eine erste Code-Alphabet-Häufigkeitsverteilung 14 und eine zweite Code-Alphabet-Häufigkeitsverteilung 16, die verwendet werden sollen, wenn ein erstes Code-Alphabet 18 und ein zweites Code-Alphabet 20 erzeugt werden. Das zweite Code-Alphabet stellt eine Zuordnung von Symbolen zu den N möglichen Wörtern bereit, um Codewörter zu erzeugen, die eine durchschnittliche Codewortlänge haben, die kleiner als die Wortlänge b ist. Das zweite Code-Alphabet 20 kann in einem genutzten Programm 22 enthalten sein, wobei das genutzte Programm 22 das zweite Code-Alphabet 20 zum Erzeugen von Codewörtern verwendet, die für eines der N Wörter verwendet werden sollen, die zur Verwendung durch das Programm 22 ausgewählt wurden.
-
In einer Ausführungsform kann das genutzte Programm 22 ein Verdichtungsprogramm aufweisen, wie beispielsweise ein SLDC-Programm, das einen Eingabedatenstrom verarbeitet, der in einen Ausgabedatenstrom verdichtet werden soll. In Verdichtungstechniken wie beispielsweise mittels SDLC kann eine Vielzahl von Bytes in dem Eingabedatenstrom durch einen Kopierzeiger ersetzt werden, der einen Speicherort in einem Protokollpuffer angibt, an dem eine Vielzahl von Bytes beginnt mit einer Vielzahl von Bytes in dem Eingabedatenstrom übereinzustimmen. Der Protokollpuffer speichert eingehende Dateneinheiten zur Verdichtung und Aufhebung der Verdichtung, wobei während der Verdichtung Eingabedateneinheiten durch einen Kopierzeiger ersetzt werden, der auf aufeinander folgende, vorher verarbeitete Dateneinheiten (z. B. Bytes) in dem Protokollpuffer verweist.
-
2 stellt eine Ausführungsform eines Kopierzeigersymbols 30 mit einer Kopierzeigermarkierung 32 bereit, wie beispielsweise ein Bit mit einem Wert von 1, die das Symbol 30 als einen Kopierzeiger identifiziert, eine Übereinstimmungszähler-Verschlüsselung 34, die eine Verschlüsselung einer Anzahl von Dateneinheiten (z. B. Bytes) in dem Eingabedatenstrom aufweist, die in dem Ausgabedatenstrom durch den Kopierzeiger 30 ersetzt werden, und eine Verschiebungszähler-Verschlüsselung 36, die eine Verschlüsselung eines relativen Speicherorts in dem Protokollpuffer aufweist, an dem die aufeinander folgenden Dateneinheiten beginnen. Die in 2 gezeigten Felder können in einer anderen als der gezeigten Reihenfolge ausgegeben werden. Die Verschiebungszähler-Verschlüsselung 36 kann aus dem zweiten Code-Alphabet 20 bestimmt werden.
-
3 veranschaulicht ein Beispiel einer Huffman-codierten Tabelle 50, die eine Umsetzung des zweiten Code-Alphabets 20 bereitstellt, wenn der Protokollpuffer 16 Kilobyte (KB) beträgt. Die Codierungen aus der Tabelle 50 sind in der Verschiebungszähler-Verschlüsselung 36 des Kopierzeigers enthalten, der einen von den 214 Speicherorten in dem Protokollpuffer angibt, an dem sich die übereinstimmenden Bytes befinden. Die Tabelle 50 stellt verschiedene Verschlüsselungen des relativen Verschiebungszählers in den Protokollpuffer für verschiedene Bereiche von Verschiebungszählern bereit. In der Tabelle 50 hat ein Eintrag 52 einen ersten Präfixwert von 3 Bit, der angibt, dass ein nächster folgender von 8 Bit einen relativen Verschiebungszähler von 0 bis 255 in dem Protokollpuffer angibt; ein Eintrag 54 hat einen zweiten Präfixwert von vier Bit, der angibt, dass ein nächster folgender von 8 Bit einen relativen Verschiebungszähler von 256 bis 511 in dem Protokollpuffer angibt; ein Eintrag 56 hat einen dritten Präfixwert von vier Bit, der angibt, dass ein nächster folgender von 9 Bit einen relativen Verschiebungszähler von 512 bis 1023 in dem Protokollpuffer angibt; ein Eintrag 58 hat einen vierten Präfixwert von drei Bit, der angibt, dass ein nächster folgender von 10 Bit einen relativen Verschiebungszähler von 1024 bis 2047 in dem Protokollpuffer angibt; ein Eintrag 60 hat einen fünften Präfixwert von drei Bit, der angibt, dass ein nächster folgender von 11 Bit einen relativen Verschiebungszähler von 2048 bis 4095 in dem Protokollpuffer angibt; ein Eintrag 62 hat einen sechsten Präfixwert von zwei Bit, der angibt, dass ein nächster folgender von 12 Bit einen relativen Verschiebungszähler von 4096 bis 8191 in dem Protokollpuffer angibt; und ein Eintrag 64 hat einen siebten Präfixwert von 2 Bit, der angibt, dass ein nächster folgender von 13 Bit eine relativen Verschiebungszähler von 8192 bis 16383 in dem Protokollpuffer angibt.
-
4a und
4b veranschaulichen eine Ausführungsform von Operationen, die durch den Code-Alphabet-Generator
8 ausgeführt werden, um das zweite Code-Alphabet
20 zu erzeugen, das in das genutzte Programm
22 aufgenommen werden soll. Nach einem Starten (am Block
100) einer Operation zum Erzeugen einer Code-Alphabet-Tabelle für ein Programm
22 für Wörter mit einer Länge von b Bit, die in dem Programm
22 verwendet werden, verarbeitet der Code-Alphabet-Generator
8 (am Block
102) die Worthäufigkeitsverteilung
10 der N möglichen Wörter, wobei N = 2
b. Die Worthäufigkeitsverteilung
10 kann Paare (i,
f 0 / i ) aufweisen, wobei i = 1, 2, ..., N und die Häufigkeit für das i-te Wort
f 0 / i ist. Wahrscheinlichkeitswerte
p 0 / i können aus den Häufigkeiten
f 0 / i aus der Worthäufigkeitsverteilung
10 gemäß der nachstehenden Gleichung (1) berechnet werden:
-
Die Häufigkeiten f 0 / i können durch gemessene Vorkommen des i-ten Worts während Operationen des Programms 22 berechnet werden. In einer Ausführungsform kann die Worthäufigkeitsverteilung 10 dergestalt sein, dass niedrigere Wortwerte häufiger von dem Programm 22 verwendet werden als höherwertige Wörter. Die Worthäufigkeitsverteilung 10 kann während einer Erstellung zum Erzeugen des zweiten Code-Alphabets 18 erzeugt werden, das in das genutzte Programm 22 aufgenommen werden soll, das zur Verwendung verteilt wird. Alternativ können die Verteilung 10 und weitere Operationen der 4a und 4b in einem Programm ausgeführt werden, das an Kundenstandorten genutzt wird, um eine Echtzeit-Erzeugung der Code-Alphabete bereitzustellen, die mit dem Programm 22 verwendet werden sollen.
-
7 veranschaulicht ein Beispiel einer Worthäufigkeitsverteilung 10 des Vorkommens von relativen Verschiebungszählern, die in den Kopierzeigern 30 (2) in einem verdichteten Ausgabedatenstrom während Verdichtungsoperationen verwendet werden, um Speicherorte in dem Protokollpuffer anzugeben, der aufeinander folgende Bytes aufweist, die mit aufeinander folgenden Bytes in dem Eingabedatenstrom übereinstimmen. In 7 haben niedrigerwertige Wörter, die frühere Speicherorte in dem Protokollpuffer darstellen, d. h. kleinere Verschiebungswerte, häufiger übereinstimmende Zeichenfolgen als höherwertige Wörter, die spätere Speicherorte in dem Protokollpuffer bzw. höhere Verschiebungswerte in dem Protokollpuffer darstellen.
-
Der Code-Alphabet-Generator 8 berechnet (am Block 104) die ACL-Funktion 12. Diese ACL-Funktion 12 weist durchschnittliche Codewortlängen (ACLs) von Code-Alphabet-Symbolen zu verschiedenen Anzahlen von zusammengeführten oder gruppierten Wörtern auf der Grundlage der Worthäufigkeitsverteilung 10 zu. 8a und 8b zeigen, dass, wenn die Anzahl von zusammengeführten Wörtern zunimmt, d. h. die Anzahl von Wörtern, die jedem Symbol zugeordnet sind, zunimmt oder sich die Anzahl von Symbolen verringert, die Entropie oder durchschnittliche Codewortlänge zunimmt, wobei sie sich der Anzahl von Bits annähert. Die in 8a und 8b gezeigte ACL-Funktion 12 vergleicht die durchschnittliche Codewortlänge mit dem Logarithmus log2 der Anzahl von zusammengeführten/gruppierten Wörtern. In alternativen Ausführungsformen könnte K als der x-Achsen-Wert in 8b anstelle von log2(K) ausgewählt werden.
-
In Umsetzungen der Huffman-Codierung können die durchschnittlichen Codewortlängenwerte für verschiedene Anzahlen von zusammengeführten oder gruppierten Wörtern für ein Symbol, ausdrückt als K, unter Verwendung einer Entropiegleichung berechnet werden, wie beispielweise der nachstehenden Entropiegleichung (2):
-
Der Ausdruck log
2K in der Formel der vorgenannten Entropiegleichung (2) steht für die Anzahl von Bits, die erforderlich sind, um die K Wörter darzustellen, die zusammengeführt wurden, um für ein Symbol in dem Alphabet gruppiert zu werden. Die Variable M
1 entspricht N/K, was die Anzahl von Symbolen in dem ersten Code-Alphabet
18 angibt, denen die N Wörter zugeordnet sind. Die Wahrscheinlichkeit
p 1 / i drückt die Wahrscheinlichkeit des Vorkommens der K Wörter aus, die dem i-ten Symbol zugeordnet sind, wobei
f 1 / i die Häufigkeit des Vorkommens der K Wörter ist, die dem i-ten Symbol in dem ersten Code-Alphabet
18 zugeordnet sind. Die Wahrscheinlichkeit der Vorkommen
(p 1 / i) von verschiedenen Symbolen in dem ersten Code-Alphabet wird gemäß der nachstehenden Gleichung (3) berechnet:
-
Der Wert M1 oder die Anzahl von Symbolen für ein Huffman-Codierungsalphabet wird aus der Gruppe von Wahrscheinlichkeitswerten p 1 / i , i = 1, 2, ..., M1 erzeugt. Ein Huffman-Code-Baum kann in einem ersten Schritt unter Verwendung des Huffman-Algorithmus erzeugt werden. Der Huffman-Code-Baum ist im Allgemeinen nicht eindeutig, weil die Kennzeichnung der Verzweigungen an internen Knoten in dem Huffman-Baum im Allgemeinen nicht eindeutig angegeben ist. Wenn zum Beispiel ein binärer Huffman-Baum S interne Knoten hat, gibt es 2S mögliche Huffman-Bäume. Jedem Huffman-Baum können dann viele Huffman-Codes zugeordnet werden. Daher ist der Huffman-Code, der durch den Huffman-Algorithmus erzeugt wird, im Allgemeinen nicht eindeutig angegeben. Die Entropie entspricht der durchschnittlichen Codewortlänge eines Huffman-Alphabets von Symbolen, wobei K Wörter zusammengeführt werden oder jedem Symbol zugeordnet sind.
-
8a und 8b veranschaulichen ein Beispiel der ACL-Funktion 12, die die Entropie in der Y-Achse zeigt, die gemäß den vorgenannten Gleichungen (2) und (3) für verschiedene Werte des Logarithmus log2 der Anzahl von zusammengeführten Wörtern (K) berechnet wird. Zum Beispiel zeigt der Pfeil 30 in 8a auf einen Wert von 128 zusammengeführten Wörtern für jedes Symbol, der eine durchschnittliche Codewortlänge zwischen 13.1 und 13.2 bereitstellt, die kleiner als die Anzahl von Bits (b) der Wörter ist. 8b stellt eine erweiterte Ansicht von 8a bereit und zeigt auch eine Linie 32, die eine durchschnittliche Codewortlänge für Huffman-Codes mit Symbolen aufweist, die 32, 64, 128, 256 Wörtern (K) zugeordnet sind. Diese Kurve in 8b ist eine Funktion, die wie folgt erhalten wird. Für jedes K (x-Wert) wird eine neue Verteilung aus der Verteilung von Häufigkeiten erzeugt, wie in 7 gezeigt, indem K aufeinander folgende relative Verschiebungswerte in einen zusammengeführt werden. Die ACL (y-Wert) wird zu dieser neuen Verteilung zugehörig berechnet. Für jeden Punkt in 8b werden K Wörter in der Worthäufigkeitsverteilung 10 zusammengeführt, und anschließend wird eine erste Code-Alphabet-Häufigkeitsverteilung 14 berechnet und ein entsprechender Huffman-Code wird erstellt (es gibt viele Huffman-Codes, aber sie haben alle dieselbe ACL). Die ACL des entsprechenden Huffman-Codes wird dann berechnet. In 8b wurde dies viermal für K = 32, K = 64, K = 128 und K = 256 ausgeführt, d. h. vier neue Verteilungen und entsprechende Entropiewerte wurden berechnet.
-
Nach dem Erzeugen der ACL-Funktion 12 erhält der Code-Alphabet-Generator 8 (am Block 106) eine Auswahl aus einer von den Anzahlen von zusammengeführten Wörtern (K) auf der Grundlage der erzeugten ACL-Funktion 12. Ein Benutzer kann K als einen Kompromiss auswählen zwischen einem erforderlichen Maximieren der Anzahl von zusammengeführten Wörtern (K) und einem Minimieren der durchschnittlichen Codewortlänge. Der Kompromiss tritt auf, weil Verringerungen der Anzahl von zusammengeführten Wörtern die ACL verringert, sodass die Auswahl von K auf der Grundlage eines Kompromisses zwischen einem hohen Verdichtungsverhältnis, für das eine kleinere ACL erforderlich ist, und der Umsetzung der Anzahl von zusammengeführten Wörtern K beruht, wofür eine größere Anzahl von zusammengeführten Wörtern erwünscht ist, eine größere Anzahl von zusammengeführten Wörtern aber die unerwünschte Auswirkung hat, die ACL zu vergrößern. Alternativ kann der Code-Alphabet-Symbolgenerator 8 ein Programm verwenden, um eine Anzahl von Wörtern zu bestimmen, die als Teil des Kompromisses zwischen der durchschnittlichen Codewortlänge und der Anzahl von zusammengeführten Wörtern zusammengeführt werden sollen, um die Anzahl von Symbolen zu verringern, die für das Alphabet erzeugt werden.
-
Der Code-Alphabet-Generator 8 erzeugt dann (am Block 108) eine erste Code-Alphabet-Häufigkeitsverteilung 14 von Häufigkeiten oder Wahrscheinlichkeiten für Symbole, die zu Gruppen von K aufeinander folgenden Wörtern zugeordnet werden. Die Häufigkeit/Wahrscheinlichkeit jeder Gruppe von K aufeinander folgenden Wörtern, die einem Symbol zugeordnet werden, weist eine Summe der Häufigkeiten/Wahrscheinlichkeiten der K Wörter in der Gruppe gemäß der Worthäufigkeitsverteilung 10 auf. In bestimmten Ausführungsformen kann die erste Code-Alphabet-Häufigkeitsverteilung 14 Paare von (i, f 1 / i ) aufweisen, wobei i = 1, 2 ... M1, wobei M1 = N/K ist für jedes der i Symbole für das erste Code-Alphabet 18. Die Wahrscheinlichkeiten der ersten Code-Alphabet-Häufigkeitsverteilung 14 können gemäß der vorgenannten Gleichung (3) berechnet werden.
-
9a und 9b veranschaulichen Beispiele der ersten Code-Alphabet-Häufigkeitsverteilung 14 für Werte von 128 von K (zusammengeführten Wörtern) in 9a und 32 in 9b. Diese Wahrscheinlichkeiten in diesen Verteilungen werden verwendet, um ein Huffman-Alphabet für das erste Code-Alphabet 18 zu erzeugen, das eine durchschnittliche Codewortlänge bereitstellt, die kleiner als die Länge der Wörter (b) ist, die verdichtet werden. Zum Beispiel zeigt 9a, dass die Huffman-Verschlüsselung für K = 128 eine durchschnittliche Codewortlänge (ACL) von 13,195070 hat, und 9b zeigt, dass die Huffman-Verschlüsselung für K = 32 eine ACL von 13,189745 hat.
-
Der Code-Alphabet-Generator 8 erzeugt dann (am Block 110) ein erstes Code-Alphabet 18 mit einer ersten Anzahl von Symbolen (M1 = N/K) mit den Symbolwahrscheinlichkeiten aus der ersten Code-Alphabet-Häufigkeitsverteilung 14. In bestimmten Ausführungsformen, wie beispielsweise Huffman-Codierungen, die aus der Verteilung 14 erzeugt wurden, stellen die Symbole Verschlüsselungen von variabler Länge der Gruppe von Wörtern bereit. Jedes Symbol in dem ersten Code-Alphabet 18 ist den Wörtern in einer der Gruppen zugeordnet und hat eine Häufigkeit der Gruppe von Wörtern, denen das Symbol zugeordnet ist. Eine erste durchschnittliche Codewortlänge der Codewörter, die unter Verwendung der Symbole in dem ersten Code-Alphabet erzeugt werden, ist kleiner als die Codewortlänge (b) der N Verschiebungswerte, um unter Verwendung der Codewörter eine Verdichtung bereitzustellen.
-
Zum Verringern der Anzahl von Symbolen in dem ersten Code-Alphabet 18 führt der Code-Alphabet-Generator 8 (am Block 112) die Symbole in dem ersten Code-Alphabet 18 in eine zweite Anzahl von Gruppen (M2) der Symbole in dem ersten Code-Alphabet 18 zusammen, wobei M2 < M1. Der Code-Alphabet-Symbolgenerator 8 erzeugt dann (am Block 114) eine zweite Code-Alphabet-Häufigkeitsverteilung 16 von Häufigkeiten der zusammengeführten zweiten Anzahl von Gruppen (M2) der Symbole in dem ersten Code-Alphabet 18, wobei die Häufigkeit von jeder der zusammengeführten zweiten Anzahl von Gruppen eine Summe der Häufigkeiten der Wörter aufweist, die den Symbolen des ersten Code-Alphabets 18 zugewiesen sind, die in die Gruppe zusammengeführt wurden.
-
In einer Ausführungsform kann die zweite Code-Alphabet-Häufigkeitsverteilung
16 Gruppen von Paaren (i,
f 2 / i ) haben, wobei i = 1, 2, ..., M
2 ist, wobei die Häufigkeit
(f 2 / i) der Symbole in dem zweiten Code-Alphabet
20, das den gruppierten Symbolen des ersten Code-Alphabets
18 entspricht, gemäß der nachstehenden Gleichung (4) berechnet werden kann:
-
Die Gruppe von Wahrscheinlichkeitswerten
p 2 / i für die gruppierten Symbole aus dem ersten Code-Alphabet
18, die Symbolen in dem zweiten Code-Alphabet
20 zugeordnet werden, können gemäß der nachstehenden Gleichung (5) berechnet werden:
-
Der Code-Alphabet-Generator 8 erzeugt (am Block 116) ein zweites Code-Alphabet 20 mit der zweiten Anzahl (M2) von Symbolen, die durch die zweite Code-Alphabet-Häufigkeitsverteilung 16 definiert werden, wobei jedes Symbol in dem zweiten Code-Alphabet 20 den Wörtern in einer der zweiten Anzahl von Gruppen zugeordnet ist und eine Häufigkeit oder Wahrscheinlichkeit der Gruppe von Wörtern hat, zu denen das Symbol zugeordnet ist. Eine zweite durchschnittliche Codewortlänge der Codewörter, die unter Verwendung der Symbole in dem zweiten Code-Alphabet 20 erzeugt wurden, ist vorzugsweise kleiner als die Codewortlänge (b) der N Verschiebungswerte und im Wesentlichen ähnlich der ersten durchschnittlichen Codewortlänge, die durch das erste Code-Alphabet 18 erzeugt wurde.
-
Mit den Operationen der 4a und 4b wird das zweite Code-Alphabet 20 so erzeugt, dass es weniger Symbole als das erste Code-Alphabet 18 hat, wobei ein wünschenswerteres Alphabet bereitgestellt wird, weil es weniger Zeilen zum Umsetzen in dem Programm 22 erfordert. In bestimmten Ausführungsformen ist die durchschnittliche Codewortlänge des zweiten Code-Alphabets 20 dieselbe Länge wie die durchschnittliche Codewortlänge des ersten Code-Alphabets 18, um eine wirkungsvollere Gruppe von weniger Symbolen mit derselben Verdichtung, Entropie und/oder durchschnittlichen Codewortlänge bereitzustellen. 10 veranschaulicht ein Beispiel eines zweiten Huffman-Code-Alphabets 20, das Symbole in der Form von Huffman-Codes für relative Verschiebungswerte in einem Protokollpuffer bereitstellt.
-
5 veranschaulicht eine Ausführungsform von Operationen zum Ausführen des Zusammenführens von Symbolen im Schritt 112 in 4a, indem Symbole aus dem ersten Code-Alphabet 18 in Gruppen zusammengeführt werden, die Symbole gleicher Länge erzeugen. Nach einem Starten (am Block 120) der Operation zum Zusammenführen von Symbolen in der zweiten Anzahl von Gruppen (M2) bildet der Code-Alphabet-Generator 8 (am Block 122) mindestens eine Gruppe von 2n aufeinander folgenden Code-Alphabet-Symbolen gleicher Länge, wobei n für jede Gruppe von 2n aufeinander folgenden Code-Alphabet-Symbolen von einer Länge ein beliebiger nicht-negativer ganzzahliger Wert ist. Symbole gleicher Länge werden zusammengeführt, indem Gruppen von 2n Symbolen für die niedrigstmöglichen Werte von n möglichen gebildet werden, sodass die Symbole zu verschiedener 2n Anzahl von Symbolen zugewiesen werden.
-
11 veranschaulicht ein Beispiel eines ersten Code-Alphabets 18, das unter Verwendung der Huffman-Codierung durch den Code-Alphabet-Generator 8 für relative Verschiebungswerte in einen Protokollpuffer mit einer Länge (b) von 14 erzeugt wird, wobei K auf 128 gesetzt wird, um 128 der Wörter (relativen Verschiebungswerte) zusammenzuführen, um eine Huffman-Codierung des ersten Code-Alphabets 18 zu erzeugen. Jedes der 128 Symbole in 11 würde zu 128 (214/128) verschiedenen der möglichen Verschiebungswerte zugeordnet. Die 128 Symbole werden aufeinander folgenden relativen Verschiebungswerten zugeordnet, wobei die Symbole, die eine kürzeste Länge haben, aufeinander folgenden relativen Verschiebungswerten zugeordnet werden, d. h. Wörtern mit einer höheren Wahrscheinlichkeit durch das Programm 22 verwendet/ausgewählt zu werden. Auf diese Weise werden kürzere Symbole häufiger vorkommenden Wörtern zugeordnet, und längere Symbole werden weniger häufig vorkommenden Wörtern zugeordnet.
-
12 veranschaulicht ein Beispiel, wie die Symbole in 11 am Block 122 in 5 in Gruppen von 2n Symbolen von gleicher Länge zusammengeführt werden, wobei n eine beliebige nicht-negative Ganzzahl ist. Der Code-Alphabet-Generator 8 startet an dem niedrigstmöglichen Wert von n, um damit zu beginnen, Gruppen von 2n zusammengeführten aufeinander folgenden Symbolen zu bilden, wobei die aufeinander folgenden Symbole zu Wörtern zugeordnet werden, die in der Reihenfolge gemäß der Wahrscheinlichkeit ihres Vorkommens angeordnet sind, wenn sie durch das Programm 22 verwendet werden, wie beispielsweise ein Verdichtungsprogramm. Somit weisen die Gruppen von zusammengeführten aufeinander folgenden Symbolen von einer selben Länge eine zunehmende Anzahl von zusammengeführten Symbolen auf, wenn n für die Symbole von gleicher Länge zunimmt, die in Gruppen zusammengeführt sind. Aus den zusammengeführten Gruppen von Symbolen, insgesamt 18, wird ein zweites Huffman-Code-Alphabet 20 erzeugt, um 18 Symbole zu erzeugen, ein Symbol für jede Gruppe, sodass jedes Symbol den Wörtern (z. B. relativen Verschiebungswerten) zugeordnet wird, für die die Symbole in der Gruppe zusammengeführt wurden, für die das Symbol erzeugt wird. Auf diese Weise behält das zweite Code-Alphabet 20, das durch Zusammenführen von Symbolen aus dem ersten Code-Alphabet 18 gebildet wird, im Wesentlichen dieselbe durchschnittliche Codewortlänge mit weniger Symbolen bei, wodurch eine verbesserte Umsetzung des Code-Alphabets bereitgestellt wird.
-
6 veranschaulicht eine alternative Ausführungsform für ein Zusammenführen von Symbolen aus dem ersten Code-Alphabet 18 in weniger Gruppen, indem Symbole von verschiedener Länge gruppiert werden, was am Block 112 in 4a ausgeführt wird. Nach einem Starten (am Block 130) der Operation zum Zusammenführen von Symbolen in der zweiten Anzahl von Gruppen (M2) bildet der Code-Alphabet-Generator 8 (am Block 132) jede Gruppe so, dass sie aufeinander folgende Symbole in dem ersten Code-Alphabet 18 haben, wobei mindestens eine der Gruppen von Symbolen aus dem ersten Code-Alphabet mindestens zwei der aufeinander folgenden Symbole in dem ersten Code-Alphabet von verschiedener Länge aufweist. Gruppen von 2n Symbolen werden gebildet, beginnend ab 0 bis zu einem Wert, bis alle der ersten Code-Alphabet-Symbole in Gruppen von 2n Symbolen gebildet sind.
-
In bestimmten Ausführungsformen können Symbole von ungleicher Länge so zusammengeführt werden, dass ein Ungleichartigkeitsmaß klein ist. Das Ungleichartigkeitsmaß wird gemäß der Gleichung (6) definiert:
wobei z(j) = 0, wenn das
f 1 / j entsprechende Symbol aus dem ersten Code-Alphabet
18 sich unter den Symbolen mit der häufigsten Länge in einer Partition i mit n
i Codewörtern befindet, andernfalls z(j) = 1.
-
Der Wert h(i) wird gemäß der nachstehenden Gleichung (7) berechnet:
-
Um Gruppen von Symbolen von ungleicher Länge zu bilden, identifiziert der Code-Alphabet-Generator 8 in jeder Gruppe von Symbolen die häufigste Länge, die den Symbolen zugehörig ist. Wenn zwei oder mehr Längen in einer Gruppe die größte Häufigkeit haben, wird die größte Länge als die häufigste Länge in einer Gruppe ausgewählt. Der Code-Alphabet-Generator 8 summiert insgesamt relative Häufigkeiten aller Codewörter in einer Partition, wobei die Codewörter mit der häufigsten Länge ausgeschlossen werden, um die Ungleichartigkeit einer Gruppe von Symbolen zu erhalten. Danach summiert der Code-Alphabet-Generator 8 gesamte Ungleichartigkeiten aller Gruppen, die dem ersten Code-Alphabet zugrunde liegen, um die Ungleichartigkeit des zugrundeliegenden ersten Code-Alphabets 18 zu erhalten, gezeigt in 13.
-
13 veranschaulicht ein Beispiel eines ersten Code-Alphabets von 128 Symbolen, wobei das Anordnen in einer Reihenfolge der Symbole, die gemäß der Wahrscheinlichkeit oder Häufigkeit des Vorkommens der Wörter angeordnet sind, denen die Symbole zugeordnet sind, Symbole von ungleicher Länge zwischen Symbolen gleicher Länge enthält. 14 veranschaulicht ein Beispiel, wie die Symbole in 13 gruppiert werden, um Gruppen von Symbolen von ungleicher Länge zu haben, wie beispielsweise in den Gruppen 11 und 12.
-
Die beschriebenen Ausführungsformen stellen Techniken zum Erzeugen eines Code-Alphabet-Symbols durch Zusammenführen von Symbolen aus einem ersten Code-Alphabet bereit, um eine weitere Verringerung der Anzahl von Code-Alphabet-Symbolen bereitzustellen, die zur Verwendung für die Verschlüsselung benötigt werden, jedoch gleichzeitig im Wesentlichen dieselbe durchschnittliche Codewortlänge beibehalten.
-
Schlussfolgerung
-
Die beschriebenen Operationen können als ein Verfahren, eine Vorrichtung oder ein Computerprogrammprodukt unter Verwendung von standardmäßigen Programmier- und/oder Entwicklungstechniken umgesetzt werden, um Software, Firmware, Hardware oder beliebige Kombinationen davon zu erzeugen. Dementsprechend können Aspekte der Ausführungsformen die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (einschließlich Firmware, residente Software, Mikrocode usw.) oder einer Ausführungsform annehmen, die Software- und Hardware-Aspekte kombiniert, auf die alle hierin allgemein als „Schaltung”, „Modul” oder „System” Bezug genommen werden kann. Des Weiteren können Aspekte der Ausführungsformen die Form eines Computerprogrammprodukts annehmen, das in einem oder in mehreren computerlesbaren Medien mit einem darin ausgeführten computerlesbaren Programmcode ausgeführt ist.
-
Jede Kombination von einem oder mehreren computerlesbaren Medien kann verwendet werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann zum Beispiel ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine derartige Vorrichtung oder Einheit oder jede geeignete Kombination aus dem Vorgenannten sein, es ist aber nicht darauf beschränkt. Zu spezielleren Beispielen (eine nicht erschöpfende Liste) für das computerlesbare Speichermedium würde Folgendes zählen: eine elektrische Verbindung mit einer oder mehreren Leitungen, eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein tragbarer CD-ROM, eine optische Speichereinheit, eine Magnetspeichereinheit oder jede geeignete Kombination des Vorgenannten. In dem Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes konkrete Medium sein, das ein Programm enthalten oder speichern kann, das von oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Anweisungsausführung verwendet werden kann.
-
Ein computerlesbares Signalmedium kann ein verbreitetes Datensignal mit einem darin verkörperten computerlesbaren Programmcode enthalten, zum Beispiel im Basisband oder als Teil einer Trägerwelle. Ein derartiges verbreitetes Signal kann jede einer Vielfalt von Formen annehmen, einschließlich elektromagnetisch, optisch oder jede geeignete Kombination davon, es ist aber nicht darauf beschränkt. Ein computerlesbares Signalmedium kann jedes computerlesbare Medium sein, das kein computerlesbares Speichermedium ist und das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Anweisungsausführung übertragen, verbreiten oder transportieren kann.
-
In einem computerlesbaren Medium verkörperter Programmcode kann unter Verwendung jedes geeigneten Mediums übertragen werden, einschließlich drahtlos, drahtgebunden, über ein Lichtwellenleiterkabel, HF usw. oder eine geeignete Kombination des Vorgenannten, er ist aber nicht darauf beschränkt.
-
Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Erfindung kann in jeder Kombination von einer oder mehreren Programmiersprachen geschrieben werden, einschließlich einer objektorientierten Programmiersprache wie Java, Smalltalk, C++ oder dergleichen und herkömmlichen prozeduralen Programmiersprachen wie der Programmiersprache „C” oder ähnlichen Programmiersprachen. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In dem letzteren Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über jeden Typ von Netzwerk verbunden sein, einschließlich ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann zu einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Nutzung eines Internet-Dienstanbieters).
-
Aspekte der vorliegenden Erfindung werden im Vorgenannten unter Bezugnahme auf Veranschaulichungen des Ablaufplans und/oder der Blockschaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block in den Ablaufplanveranschaulichungen und/oder den Blockschaubildern und Kombinationen von Blöcken in den Ablaufplanveranschaulichungen und/oder den Blockschaubildern durch Computerprogrammanweisungen umgesetzt werden können. Diese Computerprogrammanweisungen können für einen Prozessor eines Mehrzweckcomputers, eines Spezialcomputers oder andere Vorrichtungen, die programmierbare Daten verarbeiten, bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder andere Vorrichtungen, die programmierbare Daten verarbeiten, ausgeführt werden, Mittel zum Umsetzen der Funktionen/Handlungen erstellen, die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaubilds angegeben sind.
-
Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert werden, das einen Computer, eine andere Vorrichtung, die programmierbare Daten verarbeitet, oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Weise funktionieren, sodass die in dem computerlesbaren Medium gespeicherten Anweisungen einen Herstellungsgegenstand erzeugen, einschließlich Anweisungen, die die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaubilds angegebene Funktion/Handlung umsetzen.
-
Die Computerprogrammanweisungen können auch auf einen Computer, eine andere Vorrichtung, die programmierbare Daten verarbeitet, oder andere Einheiten geladen werden, um die Ausführung einer Serie von Arbeitsschritten auf dem Computer, einer anderen Vorrichtung, die programmierbare Daten ausführt, oder anderen Einheiten zu veranlassen, um einen über den Computer umgesetzten Prozess zu erzeugen, sodass die Anweisungen, die auf dem Computer oder einer anderen programmierbaren Vorrichtung ausgeführt werden, Prozesse zum Umsetzen der Funktionen/Handlungen bereitstellen, die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaubilds angegeben sind.
-
15 veranschaulicht eine Ausführungsform einer Computerarchitektur 600, die in dem System 2 in 1 umgesetzt werden kann. Die Architektur 600 kann einen Prozessor 602 (z. B. einen Mikroprozessor), einen Arbeitsspeicher 604 (z. B. eine flüchtige Arbeitsspeichereinheit) und einen Speicher 606 (z. B. einen nicht-flüchtigen Speicher wie Magnetplattenlaufwerke, optische Plattenlaufwerke, ein Bandlaufwerk usw.) enthalten. Der Speicher 606 kann eine interne Speichereinheit oder einen angeschlossenen oder über ein Netz zugänglichen Speicher aufweisen. Programme einschließlich eines Betriebssystems 608 und des Code-Alphabet-Generators 8 und des genutzten Programms 22 in dem Speicher 606 werden in den Arbeitsspeicher 604 geladen und durch den Prozessor 602 ausgeführt. Der Arbeitsspeicher 604 kann ferner die Verteilungen 10, 14, 16, die Funktion 12 und die Alphabete 18 und 20 enthalten. Die Architektur enthält ferner eine Netzwerkkarte 610, um einen Datenaustausch mit einem Netzwerk zu ermöglichen. Eine Eingabeeinheit 612 wird zum Bereitstellen einer Benutzereingabe in den Prozessor 602 verwendet und kann eine Tastatur, eine Maus, einen Stift, ein Mikrofon, einen Touchscreen-Monitor oder einen beliebigen anderen Aktivierungs- oder Eingabemechanismus nach dem bekannten Stand der Technik enthalten. Eine Ausgabeeinheit 614 ist fähig, von dem Prozessor 602 oder von einer anderen Komponente wie einem Bildschirm, Drucker, Speicher usw. übertragene Informationen wiederzugeben.
-
Die Begriffe „eine Ausführungsform”, „Ausführungsform”, „Ausführungsformen”, „die Ausführungsform”, „die Ausführungsformen”, „eine oder mehrere Ausführungsformen”, „einige Ausführungsformen” und „irgendeine Ausführungsform” bedeuten „eine oder mehrere (aber nicht alle) Ausführungsformen der vorliegenden Erfindung(en)”, sofern nicht ausdrücklich anders angegeben.
-
Die Begriffe „einschließlich”, „aufweisend”, „mit” und Variationen davon bedeuten „einschließlich, aber nicht darauf beschränkt”, sofern nicht ausdrücklich anders angegeben.
-
Die Aufzählungsliste von Elementen bedeutet nicht, dass irgendwelche oder alle der Elemente sich gegenseitig ausschließen, sofern nicht ausdrücklich anders angegeben.
-
Die Begriffe „ein”, „eine” und „der, die, das” bedeuten ”ein oder mehrere”, sofern nicht ausdrücklich anders angegeben.
-
Einheiten, die miteinander in Datenübertragung stehen, müssen sich nicht in einer kontinuierlichen Datenübertragung befinden, sofern nicht ausdrücklich anders angegeben. Außerdem können Einheiten, die miteinander in Datenübertragung stehen, Daten direkt oder indirekt über eine oder mehrere Vermittlungen übertragen.
-
Eine Beschreibung einer Ausführungsform mit mehreren Komponenten, die miteinander in Datenübertragung stehen, bedeutet nicht, dass alle derartigen Komponenten erforderlich sind. Im Gegenteil wird eine Vielfalt von optionalen Komponenten beschrieben, um die große Vielfalt möglicher Ausführungsformen der vorliegenden Erfindung zu veranschaulichen.
-
Obwohl ferner Prozessschritte, Verfahrensschritte, Algorithmen oder dergleichen in einer fortlaufenden Reihenfolge beschrieben sein können, können derartige Prozesse, Verfahren und Algorithmen so konfiguriert sein, dass sie in alternativen Reihenfolgen arbeiten. Mit anderen Worten, jede Abfolge oder Reihenfolge von Schritten, die beschrieben sein können, gibt nicht notwendigerweise eine Anforderung an, dass die Schritte in dieser Reihenfolge ausgeführt werden müssen. Die hierin beschriebenen Schritte von Prozessen können in jeder durchführbaren Reihenfolge ausgeführt werden. Ferner können einige Schritte gleichzeitig ausgeführt werden.
-
Wenn eine einzelne Einheit oder ein einzelner Gegenstand hierin beschrieben wird, ist problemlos offenkundig, dass mehr als eine Einheit/ein Gegenstand (gleichgültig, ob sie zusammenwirken) anstelle einer einzelnen Einheit/eines einzelnen Gegenstands verwendet werden kann. Desgleichen ist problemlos offenkundig, dass dort, wo mehr als eine Einheit oder ein Gegenstand hierin beschrieben wird (gleichgültig, ob sie zusammenwirken), eine einzelne Einheit/ein einzelner Gegenstand anstelle der mehr als einen Einheit oder des mehr als einen Gegenstands anstelle der gezeigten Anzahl von Einheiten oder Programmen verwendet werden kann. Die Funktionalität und/oder die Merkmale einer Einheit können alternativ durch eine oder mehrere andere Einheiten verkörpert werden, die hierin nicht ausdrücklich als mit einer derartigen Funktionalität/derartigen Merkmalen beschrieben sind. Somit müssen weitere Ausführungsformen der vorliegenden Erfindung die Einheit selbst nicht enthalten.
-
Die veranschaulichten Operationen der 4a, 4b, 5 und 6 zeigen bestimmte Ereignisse, die in einer bestimmten Reihenfolge auftreten. In alternativen Ausführungsformen können bestimmte Operationen in einer anderen Reihenfolge ausgeführt, modifiziert oder entfernt werden. Des Weiteren können Schritte zu der oben beschriebenen Logik hinzugefügt werden und trotzdem den beschriebenen Ausführungsformen entsprechen. Ferner können hierin beschriebene Operationen nacheinander auftreten, oder bestimmte Operationen können parallel verarbeitet werden. Außerdem können Operationen ferner von einer einzelnen Verarbeitungseinheit oder von verteilten Verarbeitungseinheiten ausgeführt werden.
-
Die vorhergehende Beschreibung von verschiedenen Ausführungsformen der Erfindung wurde zu Veranschaulichungs- und Beschreibungszwecken erstellt. Sie soll nicht erschöpfend sein oder die Erfindung genau auf die offenbarte Form einschränken. Viele Modifizierungen und Variationen sind angesichts der vorstehenden Lehre möglich. Der Schutzumfang der Erfindung soll nicht durch diese ausführliche Beschreibung eingeschränkt werden, sondern stattdessen durch die Ansprüche im Anhang. Die vorgenannte Spezifikation, die vorgenannten Beispiele und Daten stellen eine vollständige Beschreibung der Herstellung und Verwendung der Zusammensetzung der Erfindung bereit. Da viele Ausführungsformen der Erfindung ohne Abweichen von dem Schutzumfang der Erfindung erstellt werden können, betrifft die Erfindung die hierin im Anhang befindlichen Ansprüche.