2009-09-09 22 views
8

ज़िप संपीड़न के पीछे अवधारणा क्या है? मैं रिक्त स्थान इत्यादि को हटाने की अवधारणा को समझ सकता हूं, लेकिन शायद यह कहने के लिए कुछ जोड़ा जाना चाहिए कि डिकंप्रेशन के दौरान उस खाली स्थान को कितना/कहाँ जोड़ा जाना चाहिए?ज़िप संपीड़न के पीछे अवधारणा क्या है?

बाइट्स की धारा को संपीड़ित करने के लिए मूल प्रक्रिया क्या है?

+2

मेरे लिए ध्वनि आप की तरह wikip जाने की जरूरत edia और कुछ पढ़ना। – skaffman

+7

आसान! बाइनरी में कनवर्ट करें और शून्य –

+0

http://www.howstuffworks.com/file-compression.htm –

उत्तर

24

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

एक बार जब आप चरित्र पेड़ के आधार पर फ़ाइलों को एन्कोड/डीकोड करने के लिए इन पेड़ों का उपयोग करने पर एक संभाल लेते हैं, तो कल्पना करें कि आप शब्द आवृत्ति पर काम करना शुरू करें - "वे" को 4 अक्षरों के अनुक्रम के रूप में एन्कोड करने के बजाय, इसे क्यों न मानें इसकी आवृत्ति के कारण एक ही चरित्र होने के कारण, इसे हफमैन पेड़ में अपना पत्ता सौंपा जा सकता है। यह ज़िप और अन्य हानि रहित प्रकार संपीड़न के आधार पर कम या कम है - वे एक फ़ाइल में सामान्य "शब्द" (बाइट्स के अनुक्रम) की तलाश करते हैं (केवल 1 बाइट के अनुक्रम सहित यदि सामान्य हो) और उन्हें एन्कोड करने के लिए पेड़ का उपयोग करें। ज़िप फ़ाइल को तब पेड़ की जानकारी (प्रत्येक अनुक्रम की एक प्रति और यह दिखाई देने वाली संख्या) को पेड़ को पुनर्निर्मित करने की अनुमति देने के लिए और शेष फ़ाइल को डीकोड करने की आवश्यकता होती है।

अप का पालन करें:

बेहतर मूल सवाल का जवाब करने के लिए, क्षतिरहित संपीड़न के पीछे विचार यह खाली जगह को दूर करने के लिए, लेकिन redundent जानकारी निकालने के लिए इतना नहीं है।

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

+2

विकी/Google को ओपी भेजने के बजाय आगे पढ़ने के लिंक के साथ उत्तर का सारांश प्रदान करने का शानदार तरीका। – EBGreen

+0

अधिक बुनियादी संपीड़न शायद आरएलई संपीड़न है, लेकिन यह अधिक उन्नत प्रकारों के बारे में ज्यादा जानकारी नहीं देता है। –

+1

अतिरिक्त संसाधन के रूप में, आप एक लिंक जोड़ सकते हैं या सुरक्षा का उल्लेख कर सकते हैं! पॉडकास्ट। एपिसोड # 205 में, स्टीव गिब्सन ने कंपर्सन सिद्धांत पर चर्चा की और यह समय के साथ कैसे विकसित हुआ। यहां ट्रांसक्रिप्ट का एक लिंक दिया गया है: http://www.grc.com/sn/sn-205.txt – EBGreen

0

संपीड़न के बीच की अवधारणा है मूल रूप से सांख्यिकीय। यदि आपके पास बाइट्स की एक श्रृंखला है, तो अभ्यास में बाइट एन एक्स एक्स का मौका पिछले बाइट्स 0..एन -1 के मूल्य वितरण पर निर्भर करता है। संपीड़न के बिना, आप प्रत्येक संभावित मूल्य एक्स के लिए 8 बिट आवंटित करते हैं। संपीड़न के साथ, प्रत्येक मान एक्स के लिए आवंटित बाइट्स की मात्रा अनुमानित मौका पी (एन, एक्स) पर निर्भर करती है।

उदाहरण के लिए, अनुक्रम "aaaa" दिया गया है, एक संपीड़न एल्गोरिदम पी (5, ए) और निम्न मानों को पी (5, बी) के लिए उच्च मान असाइन कर सकता है। जब पी (एक्स) उच्च होता है, तो एक्स को आवंटित बिटस्ट्रिंग छोटा होगा, जब पी (एक्स) कम लंबी बिटस्ट्रिंग का उपयोग किया जाता है। इस तरह, यदि पी (एन, एक्स) एक अच्छा अनुमान है तो औसत बिटस्ट्रिंग 8 बिट से कम होगी।

6

मूल अवधारणा यह है कि प्रत्येक बाइट का प्रतिनिधित्व करने के लिए आठ बिट्स का उपयोग करने के बजाय, आप बार-बार बाइट्स या बाइट्स के अनुक्रमों के लिए छोटे प्रतिनिधित्व का उपयोग करते हैं।

उदाहरण के लिए, यदि आपकी फ़ाइल बाइट 0x41 की पूरी तरह से होते हैं, तो (A) बार-बार सोलह गुना, तो बजाय 8 बिट अनुक्रम के रूप में यह प्रतिनिधित्व करने के 01000001 यह 1-बिट अनुक्रम 0 को छोटा। फिर फ़ाइल का प्रतिनिधित्व 0000000000000000 (सोलह 0 एस) द्वारा किया जा सकता है।तो बाइट 0x41 की फ़ाइल बार-बार बार-बार प्रदर्शित की जा सकती है जिसमें बाइट 0x00 दो बार दोहराया गया है।

तो क्या हम यहाँ है कि इस फाइल के लिए (0x41 दोहराया सोलह गुना) बिट्स 01000001 बिट 0 से अधिक किसी भी अतिरिक्त जानकारी देने के नहीं है। तो, इस मामले में, हम एक छोटे से प्रतिनिधित्व प्राप्त करने के लिए बाहरी बिट्स फेंक देते हैं।

संपीड़न के पीछे यह मुख्य विचार है।

एक और उदाहरण के रूप में, आठ बाइट पैटर्न

0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 

पर विचार करने और अब यह 2048 बार दोहराएँ। ऊपर दिए गए दृष्टिकोण का पालन करने का एक तरीका है तीन बिट्स का उपयोग करके बाइट्स का प्रतिनिधित्व करना।

000 0x41 
001 0x42 
010 0x43 
011 0x44 
100 0x45 
101 0x46 
110 0x47 
111 0x48 

अब हम 00000101 00111001 01110111 से ऊपर बाइट पैटर्न का प्रतिनिधित्व कर सकते दोहराया 2048 बार (इस तीन बाइट पैटर्न 0x05 0x39 0x77 है)।

लेकिन एक और भी बेहतर दृष्टिकोण एक बिट 0 द्वारा बाइट पैटर्न

0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 

प्रतिनिधित्व करने के लिए है। फिर हम उपरोक्त बाइट पैटर्न का प्रतिनिधित्व 0 द्वारा 2048 बार दोहरा सकते हैं जो बाइट 0x00 बार-बार 256 बार बन जाता है। अब हम केवल और शब्दकोश

0 -> 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 

और बाइट पैटर्न 0x00 दोहराया 256 बार स्टोर करने के लिए की जरूरत है हम करने के लिए 16,384 बाइट्स से फ़ाइल संकुचित (शब्दकोश सापेक्ष) 256 बाइट्स।

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

उदाहरण के लिए देखें:

  1. Data compression
  2. Run length encoding
  3. Huffman compression
  4. Shannon-Fano coding
  5. LZW
संबंधित मुद्दे