यह सर्वविदित है कि हफ़मैन कोड को समय में गणना करने के लिए सबसे खराब स्थिति इष्टतम एल्गोरिदम है । यह दो orthogonal तरीकों में सुधार किया गया है:
इष्टतम उपसर्ग मुक्त कोड (जैसे आकार के तेजी से गणना की जा सकती है, तो अलग आवृत्तियों के सेट छोटा है ): प्रकार आवृत्तियों [मुनरो और Spira, 1976] ताकि के छोटे मूल्य का लाभ लेने के लिए उपयोग कर , और गणना हल किए गए आवृत्तियों से रैखिक समय में हफमैन वृक्ष। यह में एक समाधान देता हैσ हे ( एन एलजी σ )
वहाँ एक है बराबर कोड जहां गणना करने के लिए एल्गोरिथ्म है अलग कूटशब्द लंबाई की संख्या [बेलाल और Elmasry]।के
क्या की वर्तमान सर्वोत्तम जटिलता में सुधार करने के लिए उन तकनीकों को संयोजित करने का कोई तरीका है ?
STACS 2006 से परिणाम गलत लग रहे , Elmasry arXiv पर प्रकाशित 2010 में (http://arxiv.org/abs/cs/0509015) एक संस्करण की घोषणा - अवर्गीकृत इनपुट पर संचालन और - सॉर्ट किए गए इनपुट पर ऑपरेशन
मैं प्लानर उत्तल पतवार, जहां में एल्गोरिदम कंप्यूटिंग की जटिलता के साथ एक सादृश्य देख (क्रमित आधारित, के रूप में Huffman के कोड के लिए एल्गोरिथ्म) और में (उपहार रैपिंग) Kirkpatrick और Seidel के एल्गोरिथ्म द्वारा O (n \ lg h) में अंकित किया गया था (बाद में उदाहरण ) की जटिलता के साथ इष्टतम साबित हुआ ।) Prefix Free कोड के मामले में। बनाम जटिलता , या यहां तक कि O (nH (n_1, \ ldots, n_k) के साथ एक एल्गोरिथ्म की संभावना का सुझाव देता है जहां लंबाई के कोडवर्ड की संख्या है एक कोड लंबाई n_i प्रतीकों को कवर अंक को कवर उत्तल पतवार के एक छोर की सादृश्य का उपयोग कर ।
एक सरल उदाहरण से पता चलता है कि आवृत्तियों के (गोल) लॉगरिदमिक मानों को छांटना (रैखिक समय में the शब्द रैम मॉडल) रैखिक समय में एक इष्टतम उपसर्ग मुक्त कोड नहीं देता है:
- के लिए , और
- इसलिए लॉग सॉर्टिंग ऑर्डर नहीं बदलता है
- अभी तक तीन कोड बिट्स में से दो कोड इष्टतम से अधिक हैं।
एक और दिलचस्प सवाल यह होगा कि जब बड़ा होगा तो जटिलता कम हो जाएगी , यानी सभी कोड अलग-अलग लंबाई के होंगे:
- उदाहरण के लिए जब आवृत्तियाँ सभी भिन्न लॉग मान हैं। इस स्थिति में कोई व्यक्ति RAM शब्द में रैखिक समय में आवृत्तियों को क्रमबद्ध कर सकता है , और हफ़मैन कोड को रैखिक समय में गणना कर सकता है (क्योंकि उनके लॉग मानों को सॉर्ट करना मानों को सॉर्ट करने के लिए पर्याप्त है), जिसके परिणामस्वरूप समग्र रैखिक समय होता है बेलाल और एल्माश्री के एल्गोरिथ्म से से बहुत बेहतर ।