Python-Algorithmus-Design – Huffman-Codierung

1. Huffman-Baum

Fügen Sie hier eine Bildbeschreibung ein

Das obige Bild ist ein Huffman-Baum, der auf der Grundlage der Buchstabenhäufigkeit erstellt wurde, die in „Dies ist ein Beispiel für einen Huffman-Baum“ erhalten wurde.

2. Huffman-Codierung

Im Laufe der Jahre hat sich die Huffman-Codierung in der statistischen Datenkomprimierung sehr weiterentwickelt, und es sollte beachtet werden, dass der Hauptgrund möglicherweise darin liegt, dass die arithmetische Codierung der Idee der patentierten

Huffman-Codierung und einer von Samuel Morse (Samuel Morse) sehr ähnlich ist dass es eine spärliche Darstellung der Daten erzeugt,

aber im Gegensatz zu Morsecodes haben Huffman-Codes ein eindeutiges Präfix, das Trennzeichen überflüssig macht und der resultierende Code nur eine Möglichkeit hat, sie zu dekodieren. Sein Nachteil besteht jedoch darin, dass jeder Fehler in einem Bit leicht den Rest der Nachricht zerstören kann

3. Implementierung des Python-Algorithmus


from collections import Counter

def find_min(freq):
    item = min(freq, key=lambda i: i[0])
    freq.remove(item)
    return item
def print_codes(tree, prefix=''):
    if isinstance(tree, tuple):
        print_codes(tree[0], prefix + '0')
        print_codes(tree[1], prefix + '1')
    else:
        print(tree, prefix)
def huffman_codes(text):
    freq = [(i, x) for x, i in Counter(text).items()]
    while len(freq) > 1:
        li, lx = find_min(freq)
        ri, rx = find_min(freq)
        freq.append((li + ri, (lx, rx)))
    print_codes(freq.pop()[1])


huffman_codes('The reason why Mr. chen can succeed is that  he is not only handsome but also wise')

Hinweis :

  • Die Methode min() gibt den Mindestwert des angegebenen Parameters zurück, der eine Sequenz sein kann

  • Die Lambda-Funktion wird auch als anonyme Funktion bezeichnet. Durch die Verwendung von Lambda kann der Prozess der Funktionsdefinition eingespart und der Code rationalisiert werden.

  • isinstance(object, classinfo) Funktion zur Beurteilung, ob ein Objekt ein bekannter Typ ist, ähnlich wie
    type(). Wobei „object“ das Instanzobjekt darstellt und „classinfo“ den direkten oder indirekten Klassennamen, den Basistyp () oder ein daraus zusammengesetztes Tupel darstellt. Tupel repräsentiert ein Tupel. Der Rückgabewert ist vom Typ Bool

  • Der Zähler wird zum Zählen verwendet. Der Aufruf gibt ein Objekt zurück, dessen Schlüssel ein Listenwert und dessen Wert die spezifische Zahl des Werts ist. Die Funktion items() gibt ein durchlaufbares Array von (Schlüssel, Wert)-Tupeln in einer Liste zurück.

Das Ausgabeergebnis
Fügen Sie hier eine Bildbeschreibung ein

ist in der Abbildung dargestellt. Die Huffman-Codierung kann jeden Buchstaben ersetzen, der in binärer Form erscheint, sodass die Informationen verschlüsselt werden können

4. Autoreninformationen

Autor: Xiaohongs Angelroutine, Ziel: Programmieren interessanter machen!

Konzentrieren Sie sich auf Algorithmen, Reptilien, Spieleentwicklung, Datenanalyse, Verarbeitung natürlicher Sprache, KI usw. und freuen Sie sich auf Ihre Aufmerksamkeit. Lassen Sie uns gemeinsam wachsen und programmieren!

Urheberrechtshinweis: Dieser Artikel verbietet Plagiate und Nachdrucke und Verstöße müssen untersucht werden!

Supongo que te gusta

Origin blog.csdn.net/qq_44000141/article/details/130309289
Recomendado
Clasificación