Huffman, der codiert

In der Informatik und Informationstheorie ist Huffman, der codiert, ein für die lossless Datenkompression verwendeter Wärmegewicht-Verschlüsselungsalgorithmus. Der Begriff bezieht sich auf den Gebrauch eines Codetisches der variablen Länge, für ein Quellsymbol zu verschlüsseln (wie ein Charakter in einer Datei), wo der Codetisch der variablen Länge auf eine besondere Weise abgeleitet worden ist, die auf der geschätzten Wahrscheinlichkeit des Ereignisses für jeden möglichen Wert des Quellsymbols gestützt ist. Es wurde von David A. Huffman entwickelt, während er ein Doktorstudent an MIT war, und in der 1952-Zeitung "Eine Methode für den Aufbau von Codes der Minimalen Überfülle" veröffentlicht hat.

Huffman, der codiert, verwendet eine spezifische Methode, für die Darstellung für jedes Symbol zu wählen, auf einen Präfix-Code hinauslaufend (manchmal genannt "Codes ohne Präfixe", d. h. die Bit-Schnur, die ein besonderes Symbol vertritt, ist nie ein Präfix der Bit-Schnur, die jedes andere Symbol vertritt), der die allgemeinsten Quellsymbole mit kürzeren Schnuren von Bit ausdrückt, als es für weniger allgemeine Quellsymbole verwendet wird. Huffman ist im Stande gewesen, die effizienteste Kompressionsmethode dieses Typs zu entwerfen: Keiner anderer von individuellen Quellsymbolen zu einzigartigen Schnuren von Bit kartografisch darzustellen, wird eine kleinere durchschnittliche Produktionsgröße erzeugen, wenn die wirklichen Symbol-Frequenzen mit denjenigen übereinstimmen, die verwendet sind, um den Code zu schaffen. Wie man später fand, hat eine Methode einen Code von Huffman in der geradlinigen Zeit entworfen, wenn eingegebene Wahrscheinlichkeiten (auch bekannt als Gewichte) sortiert werden.

Für eine Reihe von Symbolen mit einem gleichförmigen Wahrscheinlichkeitsvertrieb und mehreren Mitgliedern, der eine Macht zwei ist, ist Huffman, der codiert, zur einfachen binären Block-Verschlüsselung, z.B, dem ASCII Codieren gleichwertig. Huffman, der codiert, ist solch eine weit verbreitete Methode, um Präfix-Codes zu schaffen, dass der Begriff "Code von Huffman" als ein Synonym für den "Präfix-Code" weit gebraucht wird, selbst wenn solch ein Code durch den Algorithmus von Huffman nicht erzeugt wird.

Obwohl der ursprüngliche Algorithmus von Huffman für ein Symbol-für-Symbol-Codieren (d. h. ein Strom von Symbolen ohne Beziehung) mit einem bekannten Eingangswahrscheinlichkeitsvertrieb optimal ist, ist es nicht optimal, wenn die Symbol-für-Symbol-Beschränkung fallen gelassen ist, oder wenn die Wahrscheinlichkeitsmassenfunktionen, nicht identisch verteilt unbekannt oder ziemlich abhängig sind (z.B, ist "Katze" üblicher als "cta"). Andere Methoden wie das arithmetische Codieren und LZW, der häufig codiert, haben bessere Kompressionsfähigkeit: Beide dieser Methoden können eine beliebige Zahl von Symbolen für das effizientere Codieren verbinden, und sich allgemein an die wirkliche Eingangsstatistik anpassen, deren Letzterer nützlich ist, wenn eingegebene Wahrscheinlichkeiten nicht genau bekannt sind oder sich bedeutsam innerhalb des Stroms ändern. Jedoch sollten die Beschränkungen von Huffman, der codiert, nicht übertrieben werden; es kann anpassungsfähig verwendet werden, sich unbekannt, das Ändern oder kontextabhängige Wahrscheinlichkeiten einstellend. Im Fall von bekannten unabhängigen und identisch verteilten zufälligen Variablen reduziert das Kombinieren von Symbolen zusammen Wirkungslosigkeit in einem Weg, der sich optimality nähert, weil die Zahl von Symbolen Zunahmen verbunden hat.

Geschichte

1951 wurde David A. Huffman und seinen MIT Informationstheorie-Klassenkameraden die Wahl einer Begriff-Zeitung oder einer Endprüfung gegeben. Der Professor, Robert M. Fano, hat eine Begriff-Zeitung auf dem Problem zugeteilt, den effizientesten binären Code zu finden. Huffman, unfähig, irgendwelche Codes zu beweisen, waren am effizientesten, ist im Begriff gewesen, aufzugeben und anzufangen, für das Finale zu studieren, als er auf die Idee gestoßen ist, einen frequenzsortierten binären Baum zu verwenden, und schnell diese Methode das effizienteste bewiesen hat.

Dabei hat der Student seinen Professor übertroffen, der mit dem Informationstheorie-Erfinder Claude Shannon gearbeitet hatte, um einen ähnlichen Code zu entwickeln. Huffman hat den Hauptfehler des suboptimalen Shannons-Fanos vermieden, der codiert, indem er den Baum von von unten nach oben statt von der Spitze unten gebaut hat.

Problem-Definition

Informelle Beschreibung

Gegeben: Eine Reihe von Symbolen und ihre Gewichte (gewöhnlich proportional zu Wahrscheinlichkeiten).

Finden Sie: Ein binärer Code ohne Präfixe (eine Reihe von Kennwörtern) mit der minimalen erwarteten Kennwort-Länge (gleichwertig, ein Baum mit der minimalen belasteten Pfad-Länge von der Wurzel).

Formalisierte Beschreibung

Eingang.

Alphabet, das das Symbol-Alphabet der Größe ist.

Satz, der der Satz der (positiven) Symbol-Gewichte (gewöhnlich proportional zu Wahrscheinlichkeiten) ist, d. h.

Produktion.

Code, der der Satz von (binären) Kennwörtern ist, wo das Kennwort dafür ist.

Absicht.

Lassen Sie, die belastete Pfad-Länge des Codes zu sein. Bedingung: für jeden Code.

Proben

Für jeden Code, der biunique ist, bedeutend, dass der Code einzigartig decodeable ist, ist die Summe der Wahrscheinlichkeitsbudgets über alle Symbole immer weniger als oder gleich einem. In diesem Beispiel ist die Summe einer ausschließlich gleich; infolgedessen wird der Code ein ganzer Code genannt. Wenn das nicht der Fall ist, können Sie immer einen gleichwertigen Code ableiten, indem Sie Extrasymbole (mit verbundenen ungültigen Wahrscheinlichkeiten) hinzufügen, um den Code abgeschlossen zu machen, während Sie ihn biunique halten.

Wie definiert, durch Shannon (1948) ist der Informationsinhalt h (in Bit) jedes Symbols mit der nichtungültigen Wahrscheinlichkeit

:

Das Wärmegewicht H (in Bit) ist die belastete Summe, über alle Symbole mit der Nichtnullwahrscheinlichkeit w vom Informationsinhalt jedes Symbols:

:

(Zeichen: Ein Symbol mit der Nullwahrscheinlichkeit hat Nullbeitrag zum Wärmegewicht, da So für die Einfachheit Symbole mit der Nullwahrscheinlichkeit aus der Formel oben ausgeschlossen werden können.)

Demzufolge der Quelle von Shannon, die Lehrsatz codiert, ist das Wärmegewicht ein Maß der kleinsten Kennwort-Länge, die für das gegebene Alphabet mit verbundenen Gewichten theoretisch möglich ist. In diesem Beispiel ist die Kennwort-Länge des gewogenen Mittelwertes 2.25 Bit pro Symbol, die nur ein bisschen größer sind als das berechnete Wärmegewicht von 2.205 Bit pro Symbol. So nicht nur ist dieser im Sinn optimale Code, dass kein anderer ausführbarer Code besser leistet, aber es ist sehr der theoretischen von Shannon gegründeten Grenze nah.

Bemerken Sie, dass, im Allgemeinen, ein Code von Huffman nicht einzigartig zu sein braucht, aber es ist immer eine der Codeminderung.

Grundlegende Technik

Kompression

Die Standardweise, ein aus 4 Symbolen gemachtes Signal zu vertreten, ist durch das Verwenden von 2 Bit/Symbol, aber das Wärmegewicht der Quelle ist 1.74 Bit/Symbol. Wenn dieser Code von Huffman verwendet wird, um das Signal zu vertreten, dann wird die durchschnittliche Länge zu 1.85 Bit/Symbol gesenkt; es ist noch von der theoretischen Grenze weit, weil die Wahrscheinlichkeiten der Symbole von negativen Mächten zwei verschieden sind.]]

Die Technik arbeitet durch das Schaffen eines binären Baums von Knoten. Diese können in einer regelmäßigen Reihe versorgt werden, deren Größe von der Zahl von Symbolen abhängt. Ein Knoten kann entweder ein Blatt-Knoten oder ein innerer Knoten sein. Am Anfang sind alle Knoten Blatt-Knoten, die das Symbol selbst, das Gewicht (Frequenz des Äußeren) des Symbols und fakultativ, eine Verbindung zu einem Elternteilknoten enthalten, der es leicht macht, den Code zu lesen, der (rückwärts) von einem Blatt-Knoten anfängt. Innere Knoten enthalten Symbol-Gewicht, Verbindungen zu zwei Kinderknoten und die fakultative Verbindung zu einem Elternteilknoten. Als eine allgemeine Tagung vertritt Bit '0' im Anschluss an das linke Kind und beißt '1' vertritt im Anschluss an das richtige Kind. Ein beendeter Baum hat bis zu Blatt-Knoten und inneren Knoten. Ein Baum von Huffman, der unbenutzte Symbole weglässt, erzeugt die optimalsten Codelängen.

Der Prozess beginnt im Wesentlichen mit den Blatt-Knoten, die die Wahrscheinlichkeiten des Symbols enthalten, das sie vertreten, dann wird ein neuer Knoten, dessen Kinder die 2 Knoten mit der kleinsten Wahrscheinlichkeit sind, geschaffen, solch, dass die Wahrscheinlichkeit des neuen Knotens der Summe der Wahrscheinlichkeit der Kinder gleich ist. Mit den vorherigen 2 Knoten, die in einen Knoten (so das nicht Betrachten von ihnen mehr), und mit dem neuen Knoten verschmolzen sind, der jetzt wird betrachtet, wird das Verfahren wiederholt, bis nur ein Knoten, der Baum von Huffman bleibt.

Der einfachste Baualgorithmus verwendet eine Vorzugswarteschlange, wo der Knoten mit der niedrigsten Wahrscheinlichkeit höchster Vorrang gegeben wird:

  1. Schaffen Sie einen Blatt-Knoten für jedes Symbol und fügen Sie es zur Vorzugswarteschlange hinzu.
  2. Während es mehr als einen Knoten in der Warteschlange gibt:
  3. Entfernen Sie die zwei Knoten vom höchsten Vorrang (niedrigste Wahrscheinlichkeit) von der Warteschlange
  4. Schaffen Sie einen neuen inneren Knoten mit diesen zwei Knoten als Kinder und mit der der Summe der Wahrscheinlichkeiten der zwei Knoten gleichen Wahrscheinlichkeit.
  5. Fügen Sie den neuen Knoten zur Warteschlange hinzu.
  6. Der restliche Knoten ist der Wurzelknoten, und der Baum ist abgeschlossen.

Da effiziente Vorzugswarteschlange-Datenstrukturen O verlangen (loggen Sie n) Zeit pro Einfügung und ein Baum mit N-Blättern haben 2n1 Knoten, dieser Algorithmus funktioniert in O (n loggen n) Zeit, wo n die Zahl von Symbolen ist.

Wenn die Symbole durch die Wahrscheinlichkeit sortiert werden, gibt es einen geradlinig-maligen (O (n)) Methode, einen Baum von Huffman mit zwei Warteschlangen, die erste zu schaffen, die die anfänglichen Gewichte (zusammen mit Zeigestöcken zu den verbundenen Blättern) und verbundenen Gewichte (zusammen mit Zeigestöcken zu den Bäumen) enthält, hinter der zweiten Warteschlange gestellt werden. Das versichert, dass das niedrigste Gewicht immer an der Front von einer der zwei Warteschlangen behalten wird:

  1. Fangen Sie mit so vielen Blättern an, wie es Symbole gibt.
  2. Reihen Sie alle Blatt-Knoten in die erste Warteschlange ein (durch die Wahrscheinlichkeit in der zunehmenden Ordnung, so dass der am wenigsten wahrscheinliche Artikel im Kopf der Warteschlange ist).
  3. Während es mehr als einen Knoten in den Warteschlangen gibt:
  4. Entfernen Sie die zwei Knoten mit dem niedrigsten Gewicht, indem Sie die Vorderseiten von beiden Warteschlangen untersuchen.
  5. Schaffen Sie einen neuen inneren Knoten, mit den zwei gerade entfernten Knoten als Kinder (kann jeder Knoten irgendein Kind sein), und die Summe ihrer Gewichte als das neue Gewicht.
  6. Reihen Sie den neuen Knoten in die Hinterseite der zweiten Warteschlange ein.
  7. Der restliche Knoten ist der Wurzelknoten; der Baum ist jetzt erzeugt worden.

Obwohl dieser Algorithmus "schneller" mit der Kompliziertheit klug scheinen kann als der vorherige Algorithmus mit einer Vorzugswarteschlange, ist das nicht wirklich der Fall, weil die Symbole durch die Wahrscheinlichkeit im Voraus, ein Prozess sortiert werden müssen, der O nimmt (n loggen n), Zeit an sich.

In vielen Fällen ist Zeitkompliziertheit in der Wahl des Algorithmus hier nicht sehr wichtig, da n hier die Zahl von Symbolen im Alphabet ist, das normalerweise eine sehr kleine Zahl (im Vergleich zur Länge der Nachricht ist, die zu verschlüsseln ist); wohingegen Kompliziertheitsanalyse das Verhalten betrifft, wenn n wächst, um sehr groß zu sein.

Es ist allgemein vorteilhaft, um die Abweichung der Kennwort-Länge zu minimieren. Zum Beispiel, ein Nachrichtenpuffer Empfang von Huffman-verschlüsselten Daten muss eventuell größer sein, um sich mit besonders langen Symbolen zu befassen, wenn der Baum besonders unausgeglichen ist. Um Abweichung zu minimieren, brechen Sie einfach Bande zwischen Warteschlangen, indem Sie den Artikel in der ersten Warteschlange wählen. Diese Modifizierung wird den mathematischen optimality des Huffmans behalten, der codiert, während sowohl Minderungsabweichung als auch Minderung der Länge des längsten Charakters codieren.

Hier ist ein Beispiel mit der französischen unterworfenen Schnur "j'aime aller sur le bord de l'eau les jeudis ou les jours verschlechtert":

Dekompression

Im Allgemeinen ist der Prozess der Dekompression einfach eine Sache, den Strom von Präfix-Codes zu individuellen Byte-Werten, gewöhnlich durch das Überqueren des Baumknotens von Huffman durch den Knoten zu übersetzen, weil jedes Bit vom Eingangsstrom gelesen wird (einen Blatt-Knoten erreichend, notwendigerweise begrenzt die Suche nach diesem besonderen Byte-Wert). Bevor das jedoch stattfinden kann, muss der Baum von Huffman irgendwie wieder aufgebaut werden. Im einfachsten Fall, wo Charakter-Frequenzen ziemlich voraussagbar sind, kann der Baum vorgebaut (und sogar statistisch auf jedem Kompressionszyklus angepasst werden), und hat so jedes Mal auf Kosten mindestens eines Maßes der Kompressionsleistungsfähigkeit wiederverwendet. Sonst muss die Information, um den Baum wieder aufzubauen, a priori gesandt werden. Eine naive Annäherung könnte zu prepend die Frequenzzählung jedes Charakters zum Kompressionsstrom sein. Leider konnten sich die Gemeinkosten in solch einem Fall auf mehrere Kilobytes belaufen, so hat diese Methode wenig praktischen Nutzen. Wenn die Daten mit der kanonischen Verschlüsselung zusammengepresst werden, kann das Kompressionsmodell mit gerade Bit der Information genau wieder aufgebaut werden (wo die Zahl von Bit pro Symbol ist). Eine andere Methode ist zu einfach prepend der Baum von Huffman stückweise zum Produktionsstrom. Zum Beispiel annehmend, dass der Wert von 0 einen Elternteilknoten und 1 ein Blatt-Knoten vertritt, wann auch immer auf den Letzteren gestoßen wird, liest die Baumbauroutine einfach die folgenden 8 Bit, um den Charakter-Wert dieses besonderen Blattes zu bestimmen. Der Prozess geht rekursiv weiter, bis der letzte Blatt-Knoten erreicht wird; an diesem Punkt wird der Baum von Huffman so treu wieder aufgebaut. Das Oberverwenden solch einer Methode erstreckt sich von ungefähr 2 bis 320 Bytes (das Annehmen eines 8-Bit-Alphabetes). Viele andere Techniken sind ebenso möglich. Jedenfalls, da die komprimierten Daten unbenutzte "schleifende Bit" der decompressor einschließen können, muss im Stande sein zu bestimmen, wenn man aufhört, Produktion zu erzeugen. Das kann entweder durch das Übertragen der Länge der dekomprimierten Daten zusammen mit dem Kompressionsmodell oder durch das Definieren eines speziellen Codesymbols vollbracht werden, um das Ende des Eingangs zu bedeuten (die letzte Methode kann Codelänge optimality, jedoch nachteilig betreffen).

Haupteigenschaften

Die verwendeten Wahrscheinlichkeiten können allgemeine für das Anwendungsgebiet sein, die auf der durchschnittlichen Erfahrung basieren, oder sie die wirklichen Frequenzen sein können, die im Text gefunden sind, der wird zusammenpresst.

(Diese Schwankung verlangt, dass ein Frequenztisch oder anderer Hinweis betreffs der Verschlüsselung mit dem komprimierten Text versorgt werden müssen; Durchführungen verwenden verschiedene Tricks, um Tische effizient zu versorgen.)

Huffman, der codiert, ist optimal, wenn die Wahrscheinlichkeit jedes Eingangssymbols eine negative Macht zwei ist. Präfix-Codes neigen dazu, Wirkungslosigkeit auf kleinen Alphabeten zu haben, wo Wahrscheinlichkeiten häufig zwischen diesen optimalen Punkten fallen. Wenn er "Blockiert", oder die Alphabet-Größe ausbreitet, indem er vielfache Symbole in "Wörter" von festen oder variabler Länge bevor gruppiert, hilft Huffman, der codiert, sowohl diese Wirkungslosigkeit zu reduzieren als auch statistische Abhängigkeiten zwischen Eingangssymbolen innerhalb der Gruppe (als im Fall vom Text der natürlichen Sprache) auszunutzen. Der Grenzfall für Huffman, der codiert, kann geschehen, wenn die Wahrscheinlichkeit eines Symbols 2 = 0.5 zu weit geht, die obere Grenze der Wirkungslosigkeit unbegrenzt machend. Diese Situationen antworten häufig gut auf eine Form, genannt Verschlüsselung der Lauf-Länge zu blockieren; für den einfachen Fall von Prozessen von Bernoulli ist das Codieren von Golomb ein nachweisbar optimaler Code der Lauf-Länge.

Das arithmetische Codieren erzeugt einige Gewinne über Huffman, der codiert, obwohl das arithmetische Codieren höhere rechenbetonte Kompliziertheit hat. Außerdem war das arithmetische Codieren historisch ein Thema von einer Sorge über offene Probleme. Jedoch, bezüglich der Mitte 2010, sind verschiedene wohl bekannte wirksame Techniken für das arithmetische Codieren ins öffentliche Gebiet gegangen, weil die frühen Patente abgelaufen sind.

Schwankungen

Viele Schwankungen von Huffman, der codiert, bestehen, von denen einige einen Huffman ähnlichen Algorithmus verwenden, und von dem andere optimale Präfix-Codes (während finden, zum Beispiel verschiedene Beschränkungen der Produktion stellend). Bemerken Sie, dass, im letzten Fall, die Methode nicht Huffman ähnlich zu sein braucht, und tatsächlich polynomische Zeit nicht sogar zu sein braucht. Eine erschöpfende Liste von Papieren auf Huffman, der codiert und seinen Schwankungen, wird durch den "Code und die Syntaxanalyse-Bäume für die Lossless Quellverschlüsselung" http://scholar.google.com/scholar?hl=en&lr=&cluster=6556734736002074338. gegeben

n-stufiger Huffman, der codiert

Der n-stufige Huffman' Algorithmus verwendet {0, 1..., n  1} Alphabet, um Nachricht zu verschlüsseln und einen n-stufigen Baum zu bauen. Diese Annäherung wurde von Huffman in seiner ursprünglichen Zeitung betrachtet. Derselbe Algorithmus gilt bezüglich des binären (n ist 2 gleich) Codes, außer dass die n am wenigsten wahrscheinlichen Symbole zusammen statt gerade der am wenigsten wahrscheinlichen 2 genommen werden. Bemerken Sie, dass für den n, der größer ist als 2, nicht alle Sätze von Quellwörtern einen n-stufigen Baum für Huffman richtig bilden können, der codiert. In diesem Fall müssen zusätzliche 0-Wahrscheinlichkeiten-Platz-Halter hinzugefügt werden. Das ist, weil der Baum einen n 1 Auftragnehmer bilden muss; für die Binärcodierung ist das 2 bis 1 Auftragnehmer, und jeder große Satz kann solch einen Auftragnehmer bilden. Wenn die Zahl von Quellwörtern zu 1 modulo n-1 kongruent ist, dann wird der Satz von Quellwörtern einen richtigen Baum von Huffman bilden.

Anpassungsfähiger Huffman, der codiert

Eine Schwankung hat gerufen anpassungsfähiger Huffman, der codiert, schließt das Rechnen der Wahrscheinlichkeiten ein, die dynamisch auf neuen wirklichen Frequenzen in der Folge von Quellsymbolen und dem Ändern der Codierbaumstruktur gestützt sind, um die aktualisierten Wahrscheinlichkeitsschätzungen zu vergleichen. Es ist in der Praxis sehr selten, weil die Kosten, den Baum zu aktualisieren, es langsamer machen als das optimierte anpassungsfähige arithmetische Codieren, das flexibler ist und eine bessere Kompression hat.

Schablone-Algorithmus von Huffman

Meistenteils vertreten die Gewichte, die in Durchführungen von Huffman verwendet sind, der codiert, numerische Wahrscheinlichkeiten, aber der Algorithmus, der oben gegeben ist, verlangt das nicht; es verlangt nur, dass die Gewichte einen völlig bestellten auswechselbaren monoid bilden, eine Weise bedeutend, Gewichte zu bestellen und sie hinzuzufügen. Der Schablone-Algorithmus von Huffman ermöglicht, jede Art von Gewichten (Kosten, Frequenzen, Paare von Gewichten, nichtnumerischen Gewichten) und eine von vielen sich verbindenden Methoden (nicht nur Hinzufügung) zu verwenden. Solche Algorithmen können andere Minimierungsprobleme, wie Minderung, ein Problem beheben, das zuerst auf das Stromkreis-Design http://citeseer.ist.psu.edu/context/665634/0. angewandt ist

Länge-beschränkter Huffman, der codiert

Länge-beschränkter Huffman, der codiert, ist eine Variante, wo die Absicht noch ist, eine minimale belastete Pfad-Länge zu erreichen, aber es gibt eine zusätzliche Beschränkung, dass die Länge jedes Kennwortes weniger als eine gegebene Konstante sein muss. Der Algorithmus der Paket-Verflechtung behebt dieses Problem mit einer einfachen gierigen Annäherung, die dem sehr ähnlich ist, das durch den Algorithmus von Huffman verwendet ist. Seine Zeitkompliziertheit ist, wo die maximale Länge eines Kennwortes ist. Wie man bekannt, behebt kein Algorithmus dieses Problem in der geradlinigen oder linearithmic Zeit verschieden von den vorsortierten und unsortierten herkömmlichen Problemen von Huffman beziehungsweise.

Huffman, der mit ungleichen Brief-Kosten codiert

Im Standard Huffman, der Problem codiert, wird es angenommen, dass jedes Symbol im Satz, von dem die Codewörter gebaut werden, gleiche Kosten hat, um zu übersenden: Ein Codewort, dessen Länge N Ziffern ist, wird immer Kosten von N haben, egal wie viele jener Ziffern 0s sind, wie viele 1s usw. sind. Wenn das Arbeiten unter dieser Annahme, die Minderung der Gesamtkosten der Nachricht und die Minderung der Gesamtzahl von Ziffern dasselbe Ding sind.

Huffman, der mit ungleichen Brief-Kosten codiert, ist die Generalisation, in der diese Annahme wahr nicht mehr angenommen wird: Die Briefe des Verschlüsselungsalphabetes können ungleichförmige Längen wegen Eigenschaften des Übertragungsmediums haben. Ein Beispiel ist das Verschlüsselungsalphabet des Morsezeichen-Codes, wo eine 'Spur' länger nimmt, um zu senden, als ein 'Punkt', und deshalb die Kosten einer Spur in der Übertragungszeit höher sind. Die Absicht ist noch, die Kennwort-Länge des gewogenen Mittelwertes zu minimieren, aber es ist gerade nicht mehr genügend, die Zahl von durch die Nachricht verwendeten Symbolen zu minimieren. Wie man bekannt, löst kein Algorithmus das auf dieselbe Weise oder mit derselben Leistungsfähigkeit wie herkömmlicher Huffman, der codiert.

Optimale alphabetische binäre Bäume (Das Hu-Essen-Codieren)

Im Standard Huffman, der Problem codiert, wird es angenommen, dass jedes Kennwort jedem Eingangssymbol entsprechen kann. In der alphabetischen Version muss die alphabetische Ordnung von Eingängen und Produktionen identisch sein. So zum Beispiel konnte Code nicht zugeteilt werden, aber sollte stattdessen zugeteilt werden entweder oder. Das ist auch bekannt als das Hu-Essen-Problem, nach den Autoren des Papiers, das die erste linearithmic Lösung dieses optimalen binären alphabetischen Problems präsentiert, das einige Ähnlichkeiten zum Algorithmus von Huffman, hat, aber ist nicht eine Schwankung dieses Algorithmus. Diese optimalen alphabetischen binären Bäume werden häufig als binäre Suchbäume verwendet.

Der kanonische Code von Huffman

Wenn Gewichte entsprechend den alphabetisch bestellten Eingängen in der numerischen Ordnung sind, hat der Code von Huffman dieselben Längen wie der optimale alphabetische Code, der davon gefunden werden kann, diese Längen zu berechnen, Hu-Essen machend, das unnötig codiert. Der Code, der sich numerisch (wieder-) ergibt, wird bestellter Eingang manchmal den kanonischen Code von Huffman genannt und ist häufig der Code verwendet in der Praxis wegen der Bequemlichkeit der Verschlüsselung/Entzifferung. Die Technik, um diesen Code zu finden, wird manchmal Huffman-Shannon-Fano genannt, der codiert, da es wie Huffman optimal ist, der codiert, aber alphabetisch in der Gewicht-Wahrscheinlichkeit wie Shannon-Fano, der codiert. Der Code von Huffman-Shannon-Fano entsprechend dem Beispiel ist, der, dieselben Kennwort-Längen wie die ursprüngliche Lösung habend, auch optimal ist.

Anwendungen

Das arithmetische Codieren kann als eine Generalisation von Huffman angesehen werden, der im Sinn codiert, dass sie dieselbe Produktion erzeugen, wenn jedes Symbol eine Wahrscheinlichkeit der Form 1/2 hat; insbesondere neigt es dazu, bedeutsam bessere Kompression für kleine Alphabet-Größen anzubieten. Huffman, der dennoch codiert, bleibt im breiten Gebrauch wegen seiner Einfachheit und der hohen Geschwindigkeit. Intuitiv kann das arithmetische Codieren bessere Kompression anbieten als Huffman, der codiert, weil seine "Codewörter" effektiv Bit-Längen der nichtganzen Zahl haben können, wohingegen Codewörter in Huffman, der codiert, nur eine Zahl der ganzen Zahl von Bit haben können. Deshalb gibt es eine Wirkungslosigkeit in Huffman, der codiert, wo ein Codewort der Länge k nur optimal ein Symbol der Wahrscheinlichkeit 1/2 vergleicht und andere Wahrscheinlichkeiten als optimal nicht vertreten werden; wohingegen die Codewortlänge im arithmetischen Codieren gemacht werden kann, die wahre Wahrscheinlichkeit des Symbols genau zu vergleichen.

Huffman, der heute codiert, wird häufig als ein "Zurückende" zu einigen anderen Kompressionsmethoden verwendet.

DEFLATIONIEREN SIE (der Algorithmus von PKZIP) und Multimedia codecs wie JPEG, und MP3 haben ein Vorderende-Modell und quantization, der von Huffman gefolgt ist, der (oder variable Länge Codes ohne Präfixe mit einer ähnlichen Struktur, obwohl vielleicht nicht notwendigerweise codiert, entworfen durch das Verwenden des Algorithmus von Huffman).

Siehe auch

Zeichen

  • D.A. Huffman, "Eine Methode für den Aufbau von Codes der Minimalen Überfülle", Verhandlungen des I.R.E. September 1952, Seiten 1098-1102. Der ursprüngliche Artikel von Huffman.
  • Ken Huffman. Profil: David A. Huffman, Wissenschaftlicher Amerikaner, September 1991, Seiten 54-58
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest und Clifford Stein. Einführung in Algorithmen, die Zweite Ausgabe. MIT Presse und McGraw-Hügel, 2001. Internationale Standardbuchnummer 0-262-03293-7. Abschnitt 16.3, Seiten 385-392.

Links


H. J. Heinz Company / Dichter lipoprotein
Impressum & Datenschutz