Uyarlanabilir Huffman kodlaması nasıl çalışır?


10

Huffman kodlama, veri sıkıştırma için kullanılan entropi kodlamada yaygın olarak kullanılan bir yöntemdir . Bir sinyalin istatistikleri hakkında tam bilgiye sahip olduğumuzu varsayar. Ancak, akış ortamı ile kullanılan ve muhtemelen sinyalin istatistikleri hakkında her şeyi bilemeyen Huffman kodlama sürümleri vardır. Bu uyarlanabilir Huffman kodlayıcılar nasıl çalışır?


1
Örnek uygulama dahil Wikipedia makalesini okudunuz mu? en.wikipedia.org/wiki/Adaptive_Huffman_coding#Vitter_algorithm Daha spesifik bir sorunuz mu var?
endolith

Yanıtlar:


7

Wikipedia makalesi dikkate değer uygulamalar birini, Vitter algoritması kullanılarak adaptif Huffman kodlama işleminin oldukça iyi bir açıklaması vardır. Belirttiğiniz gibi, standart bir Huffman kodlayıcı, giriş dizisinin olasılık kütle işlevine erişebilir; bu, en olası sembol değerleri için verimli kodlamalar oluşturmak için kullanır. Örneğin, dosya tabanlı veri sıkıştırmanın prototip örneğinde, bu olasılık dağılımı, her bir sembol değerinin tekrarlama sayısını sayarak giriş sırasının histogramı ile hesaplanabilir (semboller, örneğin 1 baytlık diziler olabilir). Bu histogram, bunun gibi bir Huffman ağacı oluşturmak için kullanılır (Wikipedia makalesinden alınmıştır):

Huffman Ağacı Örneği

Ağaç, ağırlık azalması veya giriş dizisinde meydana gelme olasılığı ile düzenlenir; üstteki yaprak düğümleri en olası sembolleri temsil eder, bu nedenle sıkıştırılmış veri akışında en kısa gösterimleri alır. Ağaç daha sonra sıkıştırılmış verilerle birlikte kaydedilir ve daha sonra dekompresör tarafından daha sonra (sıkıştırılmamış) giriş dizisini yeniden oluşturmak için kullanılır. Erken entropi kod uygulamalarından biri olarak, standart Huffman kodlaması oldukça basittir.


Uyarlanabilir Huffman kodlayıcının yapısı oldukça benzerdir; her bir giriş sembolü değeri için verimli kodlamalar seçmek üzere giriş dizisinin istatistiklerinin benzer bir ağaç tabanlı gösterimini kullanır. Temel fark, algoritmanın bir akış uygulaması olarak, girdinin olasılık kütle fonksiyonu hakkında önceden bilgi sahibi olmamasıdır ; dizinin istatistikleri anında tahmin edilmelidir. Biri aynı Huffman kodlama şemasını kullanacaksa, bu, sıkıştırılmış akıştaki her sembolün kodlamasını oluşturmak için kullanılan ağacın, girdi akışı işlenirken dinamik olarak oluşturulması ve korunması gerektiği anlamına gelir.

Vitter algoritması bunu başarmanın bir yoludur; her giriş sembolü işlendiğinde, ağaç güncellenir ve ağaç aşağı doğru hareket ederken sembol oluşum olasılığını azaltma özelliği korunur. Algoritma, ağacın zaman içinde nasıl güncellendiği ve elde edilen sıkıştırılmış verilerin çıkış akışında nasıl kodlandığına ilişkin bir dizi kural tanımlar. Giriş dizisi tüketildikçe, ağacın yapısı girişin olasılık dağılımının daha doğru bir tanımını temsil etmelidir. Standart Huffman kodlama yaklaşımının aksine, dekompresörün kod çözme için kullanılacak statik bir ağacı yoktur; dekompresyon işlemi sırasında aynı ağaç bakım fonksiyonlarını sürekli olarak yerine getirmelidir.

Özetle : Adaptif Huffman kodlayıcı standart algoritmaya çok benzer şekilde çalışır; ancak, tüm girdi dizisinin istatistiklerinin (Huffman ağacı) statik bir ölçümü yerine, her bir sembolü kodlamak (ve kodunu çözmek) için dizinin olasılık dağılımının dinamik, kümülatif (yani ilk sembolden geçerli sembole) tahmini kullanılır . Standart Huffman kodlama yaklaşımının aksine, uyarlanabilir Huffman algoritması hem enkoder hem de kod çözücüde bu istatistiksel analizi gerektirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.