// Tunstall Kodlama – değişken uzunluktan sabit uzunluğa optimal sıkıştırma
Değişken uzunluklu dizileri sabit uzunluklu kodlara eşler.
Sözlük, sembollerin olasılık dağılımına göre oluşturulur.
Sabit uzunluklu kodlar basit ve hızlı kod çözme sağlar.
Tunstall kodlama, sabit uzunluklu ikili kodlara eşlenen değişken uzunluklu dizilerden oluşan bir sözlük oluşturur. Önce tekil sembollerle başlanır, ardından en yüksek olasılığa sahip dizi seçilerek alfabedeki her sembol eklenip genişletilir. Böylece daha olası dizilerin kendi kod sözcüklerine sahip olduğu optimal bir değişken‑den‑sabite kod elde edilir.
Metin: 'aabaa', P(a)=0.8, P(b)=0.2 Sözlük oluşturma (3 bitlik kodlar): Başlangıç: a, b 'a' genişlet: aa, ab aa genişlet: aaa, aab ab genişlet: aba, abb Nihai sözlük (8 kod): aaa → 000 aab → 001 aba → 010 abb → 011 aa → 100 ab → 101 a → 110 b → 111 Kodlama: 'aabaa' → 001 100 (aab + aa)
Tunstall kodlama, girdinin uzunluğunun değişken, çıktının ise sabit olduğu bir entropi kodlama yöntemidir. Huffman (sabit→değişken) kodlamasından farklı olarak Tunstall, değişken uzunluklu kaynak dizilerini sabit uzunluklu kod sözcüklerine eşler ve sabit bit oranı gerektiren uygulamalar için idealdir.
Huffman: sabit giriş → değişken çıkış (ör. 'a' → '0', 'b' → '10'). Tunstall: değişken giriş → sabit çıkış (ör. 'aa' → '000', 'ab' → '001'). Tunstall donanım ve senkronizasyon açısından daha elverişlidir, ancak genellikle biraz daha düşük sıkıştırma oranı elde eder.
Önce tekil sembollerle başlanır. Sonra şu adımlar tekrarlanır: 1) en yüksek olasılığa sahip dizi bulunur, 2) bu dizi kaldırılır ve tüm tek sembollü genişletmeler eklenir, 3) istenen sözlük boyutuna (n bitlik kod için 2^n) ulaşılana kadar devam edilir.
Tunstall kodlama; konuşma sıkıştırma, görüntü kodlama ve sabit çıkış hızının gerekli olduğu diğer durumlarda kullanılır. Özellikle değişken uzunluklu kodların zamanlamayı zorlaştırdığı donanım uygulamaları ve gerçek zamanlı sistemlerde değerlidir.