a
( हेडर , "ए" , एन )a
na + lgnएa + lg( एन )nG ( lg)( एन )पी/ एन)पी ≥ 1
एलजीnnएnए + १अ + २एnए + १nअ + २n
चूंकि दृश्यता अवलोकन के लिए संपीड़न अनुपात लंबाई के व्युत्क्रम अनुपात के करीब है, यहां मेरे कार्यान्वयन में छोटी लंबाई के लिए डेटा है (यह bzip2 लाइब्रेरी के संस्करण पर निर्भर हो सकता है, क्योंकि कुछ इनपुट को संपीड़ित करने के कई तरीके हैं। )। पहला कॉलम a
's की संख्या को दर्शाता है , दूसरा कॉलम संपीड़ित आउटपुट की लंबाई है।
1–3 37
4–99 39
100–115 37
116–258 39
259–354 45
355 43
356 40
357–370 41
371–498 43
499–513 41
514–609 45
610 43
611 41
613–625 42
626–753 44
754–764 42
765 40
766–767 41
768 42
769–864 45
…
Bzip2 कहीं अधिक जटिल है जो एक साधारण रन-लंबाई एन्कोडिंग है। यह चरणों की एक श्रृंखला में काम करता है, और पहला चरण एक रन-लंबाई एन्कोडिंग चरण है , लेकिन एक निश्चित आकार सीमा के साथ। पहला चरण निम्नानुसार काम करता है: यदि एक बाइट को कम से कम 4 बार दोहराया जाता है, तो 4 बाइट के बाद बाइट्स को मिटाए गए बाइट्स की पुनरावृत्ति गिनती का संकेत देता है। उदाहरण के लिए, ( बाइट मान 3 के साथ वर्ण कहाँ है) में aaaaaaa
तब्दील हो जाता है; में तब्दील हो जाता है , और इसी तरह। चूंकि केवल 256 अलग-अलग बाइट मान हैं, केवल अनुक्रम जहां बाइट को 259 बार दोहराया जाता है, इस तरह से एन्कोड किया जा सकता है; अधिक होने पर, एक नया क्रम शुरू होता है। इसके अलावा, संदर्भ कार्यान्वयन 252 की पुनरावृत्ति गणना पर रुकता है, जो 256 बाइट्स की एक स्ट्रिंग को एन्कोड करता है।aaaa\d{3}
\d{003}
aaaa
aaaa\d{0}
एn1 ≤ एन ≤ 34 ≤ एन ≤ 258aaaa\d{252}
\d{252}
दोहराने की गिनती है, मैंने जाँच नहीं की है) खुद को दोहराया है और इसलिए बाद के चरणों द्वारा संकुचित किया गया है।
aaaa\374aa
n = 258a
n = 100ए101aaaa\d{97}
a
aaaaa
n = 101a
A
68 ≤ n ≤ 83
इस उदाहरण का मेरा विश्लेषण संपूर्ण है। अन्य प्रभावों को समझने के लिए, आपको परिवर्तन के अन्य चरणों का अध्ययन करना होगा: मैं ज्यादातर 9. चरण 1 के बाद बंद हो गया। मुझे आशा है कि इससे आपको पता चल जाएगा कि संपीड़न अनुपात थोड़ा तड़का हुआ है और नीरस रूप से भिन्न नहीं है। यदि आप वास्तव में हर विवरण का पता लगाना चाहते हैं, तो मैं मौजूदा कार्यान्वयन को लागू करने और इसे डिबगर के साथ देखने की सलाह देता हूं।
अधिकांश भाग के लिए, संपीड़न एल्गोरिथ्म को डिज़ाइन करते समय ऐसे मिनट भिन्नता मुख्य ध्यान केंद्रित नहीं करते हैं: कई सामान्य परिदृश्यों में, जैसे कि सामान्य-उद्देश्य या मीडिया संपीड़न एल्गोरिदम, कुछ बाइट्स का अंतर अप्रासंगिक है। संपीड़न स्थानीय स्तर पर हर बिट को निचोड़ने की कोशिश करता है, और इस तरह से श्रृंखला परिवर्तन की कोशिश करता है जैसे कि अक्सर लाभ कम होता है और शायद ही कभी हारता है। कम-बैंडविड्थ संचार के लिए डिज़ाइन किए गए विशेष प्रयोजन संचार प्रोटोकॉल जैसी गैर-परिस्थितियां हैं, जहां हर बिट मायने रखती है। एक अन्य स्थिति जहां सटीक आउटपुट लंबाई मायने रखती है जब संपीड़ित पाठ एन्क्रिप्ट किया गया है: जब एक विरोधी पाठ के भाग को संपीड़ित और एन्क्रिप्ट किया जा सकता है, तो सिफरटेक्स्ट की लंबाई पर भिन्नता संकुचित-और-एन्क्रिप्ट किए गए पाठ के भाग को प्रकट कर सकती है। विरोधी; HTTPS पर CRIME शोषण ।