Im Moment denken nur wenige Leute darüber nach,wie funktioniert die Komprimierung? Im Vergleich zu früher ist die Verwendung eines Personal Computers viel einfacher geworden. Und praktisch jede Person, die mit dem Dateisystem arbeitet, benutzt Archive. Aber nur wenige denken darüber nach, wie sie funktionieren und nach welchem ​​Prinzip sie Dateien komprimieren. Die allererste Version dieses Prozesses waren die Huffman-Codes, und sie werden immer noch in verschiedenen populären Archivern verwendet. Viele Benutzer denken nicht einmal darüber nach, wie einfach es ist, die Datei zu komprimieren und nach welchem ​​Schema sie funktioniert. In diesem Artikel werden wir uns ansehen, wie die Komprimierung durchgeführt wird, welche Nuancen dazu beitragen, den Enkodierungsprozess zu beschleunigen und zu vereinfachen, und wir werden herausfinden, was das Prinzip des Aufbaus eines Kodierungsbaums ist.

Geschichte des Algorithmus

Der allererste Algorithmus für eine effektiveKodierung elektronischer Information war der von Huffman in der Mitte des zwanzigsten Jahrhunderts, nämlich 1952, vorgeschlagene Code. Es ist derzeit das wichtigste Grundelement der meisten Programme, die zum Komprimieren von Informationen erstellt wurden. Im Moment sind eine der beliebtesten Quellen, die diesen Code verwenden, ZIP-, ARJ-, RAR-Archive und viele andere.

Huffman-Codes
Dieser Huffman-Algorithmus wird auch fürKomprimierung von JPEG-Bildern und anderen Grafikobjekten. Nun, alle modernen Faxgeräte verwenden auch die Kodierung, die 1952 erfunden wurde. Trotz der Tatsache, dass seit der Erstellung des Codes so viel Zeit vergangen ist, wird er bis heute in den neuesten Shells und auf alten und modernen Geräten verwendet.

Das Prinzip der effizienten Codierung

Die Grundlage für den Huffman-Algorithmus ist ein Schema,Es erlaubt, die wahrscheinlichsten, am häufigsten vorkommenden Symbole durch Codes eines binären Systems zu ersetzen. Und diejenigen, die weniger häufig sind, werden durch längere Codes ersetzt. Der Übergang zu langen Huffman-Codes erfolgt erst, nachdem das System alle Mindestwerte verwendet hat. Mit dieser Technik können Sie die Länge des Codes für jedes Zeichen der ursprünglichen Nachricht als Ganzes minimieren.

Huffman-Algorithmus
Ein wichtiger Punkt ist, dass am AnfangKodierung der Wahrscheinlichkeit des Auftretens von Buchstaben sollte bereits bekannt sein. Aus ihnen wird die letzte Nachricht zusammengestellt. Basierend auf diesen Daten wird der Huffman-Codebaum konstruiert, auf dessen Basis der Prozess der Codierung von Briefen im Archiv ausgeführt wird.

Huffmans Code, Beispiel

Um den Algorithmus zu veranschaulichen, nehmen wir aneine grafische Version des Aufbaus eines Codebaums. Um diese Methode effektiv zu nutzen, lohnt es sich, die Definition einiger für das Konzept dieser Methode notwendiger Werte zu klären. Die Gruppe von Bögen und Knoten, die von Knoten zu Knoten gerichtet sind, wird üblicherweise als Graph bezeichnet. Der Baum selbst ist ein Graph mit einer Reihe bestimmter Eigenschaften:

  • in jedem Knoten kann nicht mehr als einer der Bögen eingeben;
  • einer der Knoten muss die Wurzel des Baumes sein, dh kein Bogen sollte überhaupt in ihn eintreten;
  • Wenn von der Wurzel ausgehend, sich entlang von Bögen zu bewegen, sollte dieser Prozess es erlauben, vollständig in irgendeinen der Knoten zu gelangen.

Huffman-Beispiel
Es gibt auch ein solches Konzept, das in den Codes enthalten istHuffman, wie ein Baumblatt. Es ist ein Knoten, aus dem kein Lichtbogen austreten sollte. Wenn zwei Knoten durch einen Bogen verbunden sind, dann ist einer von ihnen der Elternteil, der andere untergeordnete, abhängig davon, von welchem ​​Knoten der Bogen kommt und in welchem ​​er sich befindet. Wenn zwei Knoten denselben Elternknoten haben, werden sie üblicherweise als Bruderknoten bezeichnet. Wenn zusätzlich zu den Blättern mehrere Bögen in den Knoten vorhanden sind, wird dieser Baum als binär bezeichnet. Das ist genau der Baum von Huffman. Die Besonderheit der Knoten dieser Konstruktion ist, dass das Gewicht jedes Elternteils gleich der Summe des Gewichts aller seiner Knotenkinder ist.

Algorithmus zum Konstruieren eines Baumes nach Huffman

Die Konstruktion des Huffman-Codes besteht aus Buchstabendes eingegebenen Alphabets. Eine Liste der Knoten, die in der zukünftigen Codebaumstruktur frei sind, wird erstellt. Das Gewicht jedes Knotens in dieser Liste sollte mit der Wahrscheinlichkeit des Auftretens des Buchstabens der Nachricht übereinstimmen, die diesem Knoten entspricht. In diesem Fall wird unter den wenigen freien Knoten des zukünftigen Baums derjenige gewählt, der am wenigsten belastet. Wenn gleichzeitig die minimalen Indikatoren in mehreren Knoten beobachtet werden, ist es möglich, jedes der Paare frei zu wählen.

Huffman-Code-Konstruktion
Dann die Erstellung des ElternteilsKnoten, der so viel wiegen soll, wie die Summe dieses Knotenpaars wiegt. Danach wird das übergeordnete Element mit freien Knoten an die Liste gesendet, und die untergeordneten Elemente werden gelöscht. Gleichzeitig erhalten die Bögen entsprechende Indizes, Einsen und Nullen. Dieser Vorgang wird genau so lange wiederholt, bis nur noch ein Knoten übrig ist. Danach werden Binärzahlen von oben nach unten geschrieben.

Verbesserung der Kompressionseffizienz

Um die Kompressionseffizienz zu erhöhen, ist es notwendig,die Zeit für den Aufbau eines Codebaums, um alle Daten bezüglich der Wahrscheinlichkeit zu verwenden, dass Buchstaben in einer bestimmten Datei erscheinen, die an einen Baum angehängt ist, und nicht zulassen, dass sie über eine große Anzahl von Textdokumenten verstreut sind. Wenn Sie diese Datei zum ersten Mal durchgehen, können Sie sofort die Statistik berechnen, wie oft Buchstaben von einem zu komprimierenden Objekt auftreten.

Beschleunigung des Komprimierungsprozesses

Um den Algorithmus zu beschleunigen, die Definition von BuchstabenEs ist nötig, nicht nach den Kennziffern der Wahrscheinlichkeit des Entstehens dieses oder jenes Briefes, und nach der Frequenz seines Erscheinens durchzuführen. Dank dessen wird der Algorithmus einfacher und die Arbeit damit wird erheblich beschleunigt. Dies vermeidet auch die Operationen, die mit Fließkommas und Division verbunden sind.

dynamischer Huffman-Code
Darüber hinaus arbeitet in diesem Modus dynamischDer Huffman-Code bzw. der Algorithmus selbst unterliegt keinen Änderungen. Dies liegt hauptsächlich an der Tatsache, dass die Wahrscheinlichkeiten den Frequenzen direkt proportional sind. Es lohnt sich, besonders darauf zu achten, dass das Endgewicht der Datei oder der sogenannte Wurzelknoten gleich der Summe der Anzahl der Buchstaben im zu bearbeitenden Objekt ist.

Fazit

Huffmans Codes - einfach und altbewährtAlgorithmus, der immer noch von vielen bekannten Programmen und Firmen verwendet wird. Seine Einfachheit und Klarheit erlaubt, effektive Ergebnisse der Komprimierung von Dateien beliebiger Volumes zu erzielen und den von ihnen belegten Speicherplatz auf der Speicherplatte erheblich zu reduzieren. Mit anderen Worten, der Huffman-Algorithmus ist ein lange untersuchtes und gut durchdachtes Schema, dessen Relevanz bis heute nicht abnimmt.

Huffman-Code-Codierung
Und dank der Fähigkeit, die Größe von Dateien zu reduzieren,ihre Übertragung durch das Netzwerk oder auf andere Weise wird einfacher, schneller und bequemer. Wenn Sie mit dem Algorithmus arbeiten, können Sie absolut jede Information komprimieren, ohne deren Struktur und Qualität zu beeinträchtigen, aber mit dem maximalen Effekt, das Gewicht der Datei zu reduzieren. Mit anderen Worten, die Huffman-Code-Codierung war und bleibt die populärste und effektivste Methode zur Komprimierung von Dateigrößen.