// Tunstall कोडिंग – परिवर्तनीय से नियत लंबाई का इष्टतम संपीड़न
परिवर्तनीय लंबाई अनुक्रमों को नियत लंबाई कोड में मैप करता है।
शब्दकोश प्रतीकों के प्रायिकता वितरण से बनाया जाता है।
नियत लंबाई कोड सरल और तेज़ डिकोडिंग की अनुमति देते हैं।
Tunstall कोडिंग परिवर्तनीय लंबाई वाले अनुक्रमों का एक शब्दकोश बनाती है जिन्हें नियत लंबाई बाइनरी कोड पर मैप किया जाता है। यह एकल प्रतीकों से शुरू करती है और प्रत्येक चरण में उच्चतम प्रायिकता वाले अनुक्रम को चुनकर उसमें वर्णमाला के सभी प्रतीक जोड़कर विस्तारित करती है। परिणाम एक इष्टतम परिवर्तनीय-से-नियत लंबाई कोड होता है जहाँ अधिक संभावित अनुक्रमों को अपने अलग कोडवर्ड मिलते हैं।
टेक्स्ट: 'aabaa' जहाँ P(a)=0.8, P(b)=0.2 डिक्शनरी निर्माण (3-बिट कोड): प्रारंभ: a, b 'a' का विस्तार: aa, ab aa का विस्तार: aaa, aab ab का विस्तार: aba, abb अंतिम डिक्शनरी (8 कोड): aaa → 000 aab → 001 aba → 010 abb → 011 aa → 100 ab → 101 a → 110 b → 111 एन्कोडिंग: 'aabaa' → 001 100 (aab + aa)
Tunstall कोडिंग एक एंट्रोपी एन्कोडिंग विधि है जिसमें इनपुट की लंबाई परिवर्तनीय और आउटपुट की लंबाई नियत होती है। Huffman (नियत से परिवर्तनीय) के विपरीत, Tunstall परिवर्तनीय लंबाई वाले स्रोत अनुक्रमों को नियत लंबाई कोडवर्ड पर मैप करता है, जिससे यह उन अनुप्रयोगों के लिए आदर्श बनता है जिन्हें स्थिर बिटरेट की आवश्यकता होती है।
Huffman: स्थिर इनपुट → परिवर्तनीय आउटपुट (जैसे 'a' → '0', 'b' → '10'). Tunstall: परिवर्तनीय इनपुट → नियत आउटपुट (जैसे 'aa' → '000', 'ab' → '001'). Tunstall हार्डवेयर और सिंक्रनाइज़ेशन के लिए बेहतर है, लेकिन आमतौर पर संपीड़न अनुपात थोड़ा कम होता है।
एकल प्रतीकों से शुरू करें। बार‑बार: 1) सबसे अधिक प्रायिकता वाले अनुक्रम को खोजें, 2) उसे हटाएँ और उसके सभी एक‑प्रतीक विस्तार जोड़ें, 3) तब तक जारी रखें जब तक वांछित डिक्शनरी आकार (n-बिट कोड के लिए 2^n) प्राप्त न हो जाए।
Tunstall कोडिंग का उपयोग वॉइस कॉम्प्रेशन, इमेज कोडिंग और ऐसी स्थितियों में होता है जहाँ नियत आउटपुट दर आवश्यक हो। यह विशेष रूप से हार्डवेयर इम्प्लीमेंटेशन और रीयल‑टाइम सिस्टम में उपयोगी है जहाँ परिवर्तनीय लंबाई वाले कोड टाइमिंग को जटिल बना देते हैं।