अनुकूली हफमैन कोडिंग कैसे काम करती है?


10

हफ़मैन कोडिंग एन्ट्रापी कोडिंग का एक व्यापक रूप से उपयोग किया जाने वाला तरीका है जो डेटा संपीड़न के लिए उपयोग किया जाता है। यह मानता है कि हमें सिग्नल के आँकड़ों की पूरी जानकारी है। हालांकि, हफ़मैन कोडिंग के संस्करण हैं जो स्ट्रीमिंग मीडिया के साथ उपयोग किए जाते हैं और संभवतः सिग्नल के आँकड़ों के बारे में सब कुछ नहीं जान सकते हैं। ये अनुकूली हफ़मैन एनकोडर कैसे काम करते हैं?


1
क्या आपने उदाहरण कार्यान्वयन सहित विकिपीडिया लेख पढ़ा है? en.wikipedia.org/wiki/Adaptive_Huffman_coding#Vitter_algorithm क्या आपके पास अधिक विशिष्ट प्रश्न है?
एंडोलिथ

जवाबों:


7

विकिपीडिया लेख अनुकूली Huffman कोडिंग प्रक्रिया उल्लेखनीय कार्यान्वयन में से एक, Vitter कलन विधि का उपयोग की एक बहुत अच्छा विवरण नहीं है। जैसा कि आपने उल्लेख किया है, एक मानक हफ़मैन कोडर के पास इसके इनपुट अनुक्रम की प्रायिकता द्रव्यमान फ़ंक्शन तक पहुंच है, जिसका उपयोग यह सबसे संभावित प्रतीक मानों के लिए कुशल एन्कोडिंग के निर्माण के लिए करता है। फ़ाइल-आधारित डेटा संपीड़न के प्रोटोटाइप उदाहरण में, उदाहरण के लिए, इस संभाव्यता वितरण की गणना इनपुट अनुक्रम को हिस्टोग्राम करके की जा सकती है, प्रत्येक प्रतीक मूल्य की घटनाओं की संख्या की गिनती (उदाहरण के लिए 1-बाइट अनुक्रम हो सकते हैं)। इस हिस्टोग्राम का उपयोग हफमैन पेड़ को उत्पन्न करने के लिए किया जाता है, जैसे यह (विकिपीडिया लेख से लिया गया):

हफमैन पेड़ उदाहरण

पेड़ को घटते वजन, या इनपुट अनुक्रम में घटना की संभावना द्वारा व्यवस्थित किया जाता है; शीर्ष पर लीफ नोड्स सबसे संभावित प्रतीकों का प्रतिनिधित्व करते हैं, जो इसलिए संपीड़ित डेटा स्ट्रीम में सबसे कम प्रतिनिधित्व प्राप्त करते हैं। पेड़ को संपीड़ित डेटा के साथ सहेजा जाता है और बाद में डिकम्प्रेसर द्वारा बाद में (असम्पीडित) इनपुट फिर से पुनर्जीवित करने के लिए उपयोग किया जाता है। प्रारंभिक एन्ट्रापी कोड कार्यान्वयन में से एक के रूप में, मानक हफ़मैन कोडिंग काफी सीधा है।


अनुकूली हफ़मैन कोडर की संरचना काफी समान है; यह प्रत्येक इनपुट प्रतीक मूल्य के लिए कुशल एन्कोडिंग का चयन करने के लिए इनपुट अनुक्रम के आँकड़ों के समान ट्री-आधारित प्रतिनिधित्व का उपयोग करता है। मुख्य अंतर यह है कि, एल्गोरिथ्म के स्ट्रीमिंग कार्यान्वयन के रूप में, इनपुट की प्रायिकता मास फ़ंक्शन का कोई पूर्व ज्ञान उपलब्ध नहीं है; मक्खी पर अनुक्रम के आँकड़ों का अनुमान होना चाहिए। यदि एक ही हफ़मैन एन्कोडिंग योजना का उपयोग करना है, तो इसका मतलब है कि संपीड़ित स्ट्रीम में प्रत्येक प्रतीक के एन्कोडिंग को उत्पन्न करने के लिए उपयोग किए जाने वाले पेड़ को इनपुट स्ट्रीम संसाधित होने पर गतिशील रूप से बनाया और बनाए रखा जाना चाहिए।

विटर एल्गोरिथ्म इसे पूरा करने का एक तरीका है; जैसा कि प्रत्येक इनपुट प्रतीक को संसाधित किया जाता है, पेड़ को अपडेट किया जाता है, जिससे आप पेड़ से नीचे जाते हैं, प्रतीक घटना की संभावना कम हो जाती है। एल्गोरिथ्म नियमों का एक सेट परिभाषित करता है कि समय के साथ पेड़ को कैसे अपडेट किया जाता है, और परिणामस्वरूप संपीड़ित डेटा आउटपुट स्ट्रीम में एन्कोड किया गया है। जैसा कि इनपुट अनुक्रम का उपभोग किया जाता है, पेड़ की संरचना को इनपुट की संभावना वितरण के अधिक से अधिक सटीक विवरण का प्रतिनिधित्व करना चाहिए। मानक हफ़मैन कोडिंग दृष्टिकोण के विपरीत, डिकम्प्रेसर के पास डिकोडिंग के लिए उपयोग करने के लिए एक स्थिर पेड़ नहीं है; यह विघटन प्रक्रिया के दौरान एक ही पेड़-रखरखाव कार्यों को लगातार करना चाहिए।

सारांश में : अनुकूली हफ़मैन कोडर मानक एल्गोरिथ्म के समान संचालित होता है; हालाँकि, पूरे इनपुट अनुक्रम के आँकड़ों (हफ़मैन के पेड़) के एक स्थिर माप के बजाय, एक गतिशील, संचयी (यानी पहले प्रतीक से वर्तमान चिह्न तक) अनुक्रम की संभाव्यता वितरण का अनुमान प्रत्येक प्रतीक को एन्कोड (और डिकोड) करने के लिए उपयोग किया जाता है । मानक हफ़मैन कोडिंग दृष्टिकोण के विपरीत, अनुकूली हफ़मैन एल्गोरिथ्म को एनकोडर और डिकोडर दोनों पर इस सांख्यिकीय विश्लेषण की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.