Wymóg, aby kodowanie było wolne od prefiksów, skutkuje dużymi drzewami, ponieważ drzewo musi być kompletne. Czy istnieje próg, w którym niekodowane przechowywanie danych o stałej długości byłoby bardziej wydajne niż kodowanie danych?
9
Odpowiedzi:
Entropia
H(A)
tego problemu jest1.998
. Zarówno kodowanie Huffmana, jak i kodowanie o stałej długości dla tego problemu ma średnią długość słowa kodowego jako2
. I FYI kodowanie, które masz przy użyciu kodowania Huffmana jest nieprawidłowe. Kodowanie Huffmana generuje również kody podobne do stałej długości dla tego problemu. Używa chciwego podejścia. Więca
nie dostaje kodu jako,0
ale zamiast tego dostaje00
. Przerób drzewo generowane za pomocą kodowania Huffmana. Drzewo, które powinieneś zdobyć to:źródło
Introduction to Algorithms
przezCLRS
. W rozdziale, który mówigreedy algorithms
, możesz uzyskać formalny dowódHuffman algorithm
. Jest to długi dowód i wymaga cierpliwości do czytania.Kodowanie Huffmana przybliża rozkład populacji z potęgami dwóch prawdopodobieństw. Jeśli prawdziwy rozkład składa się z potęg dwóch prawdopodobieństw (a symbole wejściowe są całkowicie nieskorelowane), kodowanie Huffmana jest optymalne. Jeśli nie, możesz lepiej radzić sobie z kodowaniem zakresu. Jest jednak optymalny spośród wszystkich kodowań, które przypisują określone zestawy bitów do określonych symboli na wejściu.
źródło
Tak, zawsze jest optymalne.
Nie, nie ma progu, w którym zużywałoby mniej miejsca do korzystania z niekodowanych danych o stałej długości.
Znalazłem wiele dowodów w Internecie, ale jest wystarczająca dyskusja w artykule w Wikipedii Kodowanie Huffmana .
Obejmuje to również inne techniki, które osiągają wyższą kompresję (praca poza przestrzenią, dla której kod Huffmana jest optymalny).
źródło