गज़िप का अधिकतम संपीड़न अनुपात क्या है?


49

सबसे बड़ा आकार क्या है एक gzip (उदाहरण के लिए 10kb कहें) को विघटित किया जा सकता है?

जवाबों:


88

यह बहुत डेटा संपीड़ित होने पर निर्भर करता है। शून्य से भरी 1Gb फ़ाइल के साथ एक त्वरित परीक्षण ~ 120Kb का एक संकुचित आकार देता है, इसलिए आपकी 10Kb फ़ाइल संभवतः ~ 85Mbytes में विस्तारित हो सकती है।

उदाहरण के लिए, यदि डेटा में कम अतिरेक है, तो संग्रह में एक प्रारूप में छवियां होती हैं जो मूल रूप से संपीड़ित होती हैं (gif, jpg, png, ...), तो gzip आगे और अधिक संपीड़न नहीं जोड़ सकती है। प्रोग्राम निष्पादन योग्य जैसे द्विआधारी फ़ाइलों के लिए आप 2: 1 संपीड़न तक देख सकते हैं, सादे पाठ के लिए, HTML या अन्य मार्कअप 3: 1 या 4: 1 या अधिक संभावना नहीं है। आप कुछ मामलों में 10: 1 देख सकते हैं, लेकिन ~ 8700: 1 एक एकल प्रतीक के साथ भरी हुई फ़ाइल के साथ देखा जाता है, ऐसा कुछ है जिसे आप समान रूप से कृत्रिम परिस्थितियों में नहीं देख सकते हैं।

आप जांच सकते हैं कि एक गज़िप फ़ाइल को अनपैक करने से कितना डेटा होगा, वास्तव में डिस्क के साथ इसकी असम्पीडित सामग्री को लिखने के बिना, gunzip -c file.gz | wc --bytes- यह फ़ाइल को अनकैप्ड करेगा, लेकिन परिणाम को स्टोर नहीं करेगा, बल्कि उन्हें पास करने के बजाय wcबाइट्स की संख्या को गिनेगा। फिर उन्हें त्याग दें। यदि संपीड़ित सामग्री एक टार फ़ाइल है जिसमें कई छोटी फाइलें होती हैं, तो आप पा सकते हैं कि पूरे संग्रह को अनपैक करने के लिए विशेष रूप से अधिक डिस्क स्थान की आवश्यकता होती है, लेकिन ज्यादातर परिस्थितियों में, पाइपिंग gunzipआउटपुट से लौटी हुई गिनती wcआपकी आवश्यकता के अनुसार सटीक होने वाली है।


मैंने देखा है कि 10x तक HTML का विस्तार (निश्चित रूप से x3 और x4 सबसे आम था!) ​​.... शायद उन लोगों के लिए बहुत अधिक अनावश्यक डेटा जो विस्फोट कर रहे थे + 8x। मुझे लगता है कि प्रश्न में जो पृष्ठ था वह एक php जानकारी पृष्ठ था।
लाश

दोहरावदार मार्कअप, जैसा कि आउटपुट में देखा जाता है phpinfo(), बहुत अच्छी तरह से संपीड़ित करता है। उस आउटपुट में तकनीकी जानकारी में प्राकृतिक भाषा के औसत भाग की तुलना में अधिक प्रत्यक्ष पुनरावृत्ति होती है, और वर्णमाला वितरण संभवतः कम चिकना होता है जो हफ़मैन चरण को बेहतर परिणाम प्राप्त करने में मदद कर सकता है।
डेविड स्पिललेट

यह उत्तर जानबूझकर दुर्भावनापूर्ण संपीड़ित डेटा के लिए खाता नहीं है । एक 10KB के आसपास एक दुर्भावनापूर्ण ज़िप फ़ाइल को शिल्प कर सकता है जो कि 4GB से अधिक विस्तार कर सकता है।
डेविड श्वार्ट्ज

उस पैमाने के ज़िप बम नेस्टेड अभिलेखागार पर भरोसा करते हैं, हालांकि, एक मानव फ़ाइल को खोलना के रूप में आप लंबे समय से पहले कुछ अजीब देखा होगा। हालांकि उन्हें स्वचालित स्कैनर्स (मेल सेवाओं और इसके बाद) के खिलाफ एक प्रभावी DoS हमले के रूप में इस्तेमाल किया जा सकता है।
डेविड स्पिललेट

1
@DavidSpillett: नेस्टेड जिप बम पेटाबाइट रेंज में आकार में विस्तार करते हैं। यही मैं बात नहीं कर रहा हूं। एक विशिष्ट ज़िप बम की केवल एक परत को देखें।
डेविड श्वार्ट्ज

10

आमतौर पर आपको 95% से अधिक संपीड़न नहीं मिलता है (ताकि 10kB gzipped डेटा ~ 200kB तक कम हो जाएगा), लेकिन विशेष रूप से तैयार की गई फाइलें हैं जो तेजी से विस्तार करती हैं। के लिए देखो 42.zip, यह (अर्थहीन) डेटा के कुछ पेटाबाइट्स को विघटित करता है।


4
विकिपीडिया का कहना है कि 42.zip "16 के सेट में नेस्टेड ज़िप फ़ाइलों की पांच परतें" है, इसलिए यह विघटन (केवल पुनरावर्ती अपघटन के लिए) के लिए एक वैध उदाहरण नहीं है।
TGR

5
वास्तव में, 42.zip विशेष रूप से उन उपकरणों के लिए एक खतरा है जो स्वचालित रूप से ज़िप फ़ाइलों को पुनरावर्ती स्कैन करते हैं, उदाहरण के लिए वायरस स्कैनर।
थोमसट्रेटर

4
वह ज़िप है,
गज़िप

8

Https://stackoverflow.com/a/16794960/293815 से उद्धृत शब्दशः

अपस्फीति प्रारूप का अधिकतम संपीड़न अनुपात 1032: 1 है। ऐसा इसलिए है क्योंकि सबसे लंबे समय तक चलने वाले इनकोडिंग को 258 बाइट्स कहा जा सकता है। प्रत्येक ऐसे रन के लिए कम से कम दो बिट्स की आवश्यकता होती है (लंबाई कोड के लिए एक बिट और दूरी कोड के लिए एक बिट), इसलिए 4 * 258 = 1032 असम्पीडित बाइट्स प्रति एक संपीड़ित बाइट को एन्कोड किया जा सकता है।

आप gzip के परिणाम को कम करके अधिक संपीड़न प्राप्त कर सकते हैं। आम तौर पर यह संपीड़न में सुधार नहीं करता है, लेकिन बहुत लंबे समय तक चलता है।

वैसे, डिफ्लेट द्वारा उपयोग किया जाने वाला LZ77 दृष्टिकोण रन-लेंथ एन्कोडिंग की तुलना में अधिक सामान्य है। केवल एक लंबाई के बजाय, एक लंबाई / दूरी जोड़ी का उपयोग किया जाता है। यह कुछ दूरी से एक स्ट्रिंग को कॉपी करने की अनुमति देता है, या बाइट की नकल करता है जैसे कि एक की दूरी के लिए रन-लंबाई में, या तीन की दूरी के साथ बाइट्स के ट्रिपल की नकल करते हुए, आदि।


6

किसी भी संपीड़न एल्गोरिदम का संपीड़न अनुपात डेटा के संकुचित होने (उस डेटा की लंबाई के अलावा) का एक कार्य होगा।

यहाँ मैक्सकॉम पर एक विश्लेषण है ,
जैसे नमूनों में से एक को देखो,

कई फ़ाइल संपीड़न बेंचमार्क परीक्षणों का सारांश

फ़ाइल प्रकार: एकाधिक फ़ाइल प्रकार (कुल में 46)  
# इस परीक्षण में फ़ाइलों को संपीड़ित करने के लिए: 510  
कुल फ़ाइल आकार (बाइट्स): 316.355.757 
औसत फ़ाइल आकार (बाइट्स): 620,305
सबसे बड़ी फ़ाइल (बाइट्स): 18,403,071
सबसे छोटी फ़ाइल (बाइट्स): 3,554

4

केवल एक प्रतीक वाली एक बहुत बड़ी फ़ाइल बहुत अच्छी तरह से संपीड़ित होगी।


4

फ़ाइल में 10 एमबी शून्य, gzip -9 से 10217 तक संपीड़ित। इसलिए अधिकतम अनुपात लगभग 1000x है।


1

आपके प्रश्न का उत्तर, इनपुट पर निर्भर करता है। आपको यह अंदाजा लगाने के लिए कि छह मिनट के वीडियो को कंप्रेशन कैसे किया जाता है।

https://www.youtube.com/watch?v=ZdooBTdW5bM

आपको इससे क्या मिलना चाहिए कि संपीड़न दर प्रत्येक वर्ण की आवृत्ति पर निर्भर करती है, इस प्रकार कोई अधिकतम अधिकतम दर नहीं है, यह इनपुट पर निर्भर करता है, अंग्रेजी पाठ के लिए यह लगभग 65 प्रतिशत है।


1
सुपर उपयोगकर्ता में आपका स्वागत है! कृपया संदर्भ लिंक (एस) से उत्तर के आवश्यक भागों को उद्धृत करें, क्योंकि लिंक लिंक किए गए पृष्ठ बदलने पर उत्तर अमान्य हो सकता है।
DavidPostill

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