/ / Kody Huffmana: przykłady, zastosowanie

Kody Huffmana: przykłady, zastosowanie

W tej chwili niewiele osób myśliJak działa kompresja plików? W porównaniu z przeszłością korzystanie z komputera osobistego stało się znacznie łatwiejsze. A prawie każda osoba pracująca z systemem plików korzysta z archiwów. Ale niewiele osób myśli o tym, jak działają i na jakiej podstawie kompresowane są pliki. Pierwszą wersją tego procesu były kody Huffmana i są one używane do dziś w różnych popularnych archiwach. Wielu użytkowników nawet nie myśli o tym, jak łatwo jest skompresować plik i jak to działa. W tym artykule przyjrzymy się, jak zachodzi kompresja, jakie niuanse pomagają przyspieszyć i uprościć proces kodowania, a także zrozumieć, jaka jest zasada budowania drzewa kodowania.

Historia algorytmu

Pierwszy algorytm skutecznego prowadzeniakodowanie informacji elektronicznych to kod zaproponowany przez Huffmana w połowie XX wieku, a konkretnie w 1952 roku. To on jest obecnie głównym podstawowym elementem większości programów przeznaczonych do kompresji informacji. Obecnie jednymi z najpopularniejszych źródeł korzystających z tego kodu są archiwa ZIP, ARJ, RAR i wiele innych.

kody Huffmana
Ponadto ten algorytm Huffmana jest używany dokompresja obrazów JPEG i innych obiektów graficznych. Cóż, wszystkie współczesne faksy również używają kodowania, wynalezionego w 1952 roku. Pomimo tego, że od powstania kodu minęło już tyle czasu, wciąż jest on używany w najnowszych powłokach oraz na starych i nowoczesnych typach sprzętu.

Zasada wydajnego kodowania

Algorytm Huffmana oparty jest na schemaciepozwalające na zastąpienie najbardziej prawdopodobnych, najczęściej występujących znaków kodami systemu binarnego. A te, które są mniej powszechne, są zastępowane dłuższymi kodami. Przejście na długie kody Huffmana następuje dopiero po wykorzystaniu przez system wszystkich wartości minimalnych. Ta technika pozwala zminimalizować długość kodu dla każdego symbolu oryginalnej wiadomości jako całości.

algorytm Huffmana
Ważne jest to, że na początkukodowanie prawdopodobieństwa wystąpienia liter powinno być już znane. To od nich zostanie skompilowana ostateczna wiadomość. Na podstawie tych danych przeprowadzana jest budowa drzewa kodu Huffmana, na podstawie którego zostanie przeprowadzony proces kodowania liter w archiwum.

Przykład kodu Huffmana

Aby zilustrować algorytm, weźgraficzna wersja budowania drzewa kodu. Aby skutecznie wykorzystać tę metodę, warto doprecyzować definicję niektórych wartości niezbędnych do pojęcia tej metody. Zbiór wielu łuków i węzłów, które są skierowane od węzła do węzła, nazywa się grafem. Samo drzewo jest grafem z zestawem określonych właściwości:

  • każdy węzeł może zawierać nie więcej niż jeden łuk;
  • jeden z węzłów musi być korzeniem drzewa, to znaczy nie może w ogóle zawierać łuków;
  • jeśli zaczniesz poruszać się po łukach od korzenia, proces ten powinien pozwolić ci całkowicie dostać się do dowolnego węzła.

Przykład kodu Huffmana
Jest też taka koncepcja zawarta w kodeksachHuffman jak liść drzewa. Reprezentuje węzeł, z którego nie powinien wychodzić żaden łuk. Jeżeli dwa węzły są połączone łukiem, to jeden z nich jest rodzicem, a drugi dzieckiem, w zależności od tego, z którego węzła łuk wychodzi i wchodzi. Jeśli dwa węzły mają ten sam węzeł nadrzędny, nazywane są węzłami siostrzanymi. Jeśli oprócz liści węzły mają kilka łuków, to drzewo nazywa się binarnym. To jest dokładnie to, czym jest drzewo Huffmana. Cechą węzłów tej konstrukcji jest to, że waga każdego rodzica jest równa sumie wag wszystkich jego dzieci węzłów.

Algorytm budowy drzewa Huffmana

Konstrukcja kodu Huffmana odbywa się z literalfabet wejściowy. Zostanie utworzona lista tych węzłów, które są wolne w przyszłym drzewie kodu. Waga każdego węzła na tej liście musi być taka sama jak prawdopodobieństwo wystąpienia litery komunikatu odpowiadającej temu węzłowi. Jednocześnie spośród kilku wolnych węzłów przyszłego drzewa wybierany jest ten, który waży najmniej. Co więcej, jeśli minimalne wskaźniki są obserwowane w kilku węzłach, możesz dowolnie wybrać dowolną z par.

budowanie kodu Huffmana
Następnie tworzony jest rodzic.węzła, który musi ważyć tyle, ile suma tej pary węzłów. Następnie rodzic jest wysyłany na listę z wolnymi węzłami, a dzieci są usuwane. W tym przypadku łuki otrzymują odpowiednie wskaźniki, jedynki i zera. Ten proces jest powtarzany na tyle, aby pozostawić tylko jeden węzeł. Następnie cyfry binarne są zapisywane od góry do dołu.

Poprawa wydajności kompresji

W celu zwiększenia wydajności kompresji konieczne jest:konstruując drzewo kodu wykorzystuj wszystkie dane dotyczące prawdopodobieństwa wystąpienia liter w konkretnym pliku dołączonym do drzewa i nie dopuszczaj do ich rozrzucenia na dużą liczbę dokumentów tekstowych. Jeśli po raz pierwszy przejdziesz przez ten plik, możesz natychmiast obliczyć statystyki dotyczące tego, jak często znajdują się litery z obiektu, który ma być skompresowany.

Przyspiesz proces kompresji

Aby przyspieszyć algorytm, definicja literpowinna być przeprowadzona nie według prawdopodobieństwa pojawienia się danej litery, ale według częstotliwości jej występowania. Dzięki temu algorytm staje się prostszy, a praca z nim znacznie przyspieszona. Unika również operacji zmiennoprzecinkowych i dzielenia.

dynamiczny kod Huffmana
Dodatkowo pracując w tym trybie, dynamicznykod Huffmana, a właściwie sam algorytm, nie podlega żadnym zmianom. Wynika to głównie z faktu, że prawdopodobieństwa są wprost proporcjonalne do częstotliwości. Warto zwrócić szczególną uwagę na to, że ostateczna waga pliku lub tzw. root node będzie równa sumie liczby liter w obiekcie do przetworzenia.

Wniosek

Kody Huffmana - proste i ugruntowanealgorytm, który jest nadal używany przez wiele znanych programów i firm. Jego prostota i zrozumiałość pozwalają na osiągnięcie efektywnych efektów kompresji plików o dowolnej wielkości oraz znaczne ograniczenie ich przestrzeni dyskowej. Innymi słowy, algorytm Huffmana jest od dawna badanym i rozwijanym schematem, którego znaczenie nie zmniejszyło się do dziś.

kodowanie Huffmana
A dzięki możliwości zmniejszenia rozmiaru pliku,ich przesyłanie za pośrednictwem sieci lub innych środków staje się łatwiejsze, szybsze i wygodniejsze. Pracując z algorytmem, możesz skompresować absolutnie każdą informację bez szkody dla jej struktury i jakości, ale z maksymalnym efektem zmniejszenia wagi pliku. Innymi słowy, kodowanie Huffmana było i pozostaje najpopularniejszą i obecną metodą kompresji rozmiaru pliku.