चलो छोटी सी बात को देखें, जो कई मामलों में कठोर हो सकती है:
यह भंडार था:
- सीमा में तत्वों की संख्या ( ३१ बिट्स के साथ), चूंकि जावा सूची में केवल २^31 - १ तत्व ही सीमित हैं.
- प्रत्येक सूची के लिए 1 बिट द्वारा पालन करें, यह सूचित करने के लिए कि तत्व सेट में मौजूद है या नहीं ।
यह वह कार्यान्वयन है जो कि डिवेंट छवि के पहले संस्करण को भंडारित करता है, ताकि डाटा बांट कर सहेजे जाने वाले अंश को जमा करे और शिंग्रास के अंदर ले जाएँ.
हालांकि यह कम से कम करने के लिए तत्वों की संख्या कम हो जाने के लिए, वे कुल का एक बहुत छोटा सा भाग बन जाते हैं, जिस में छोटे एनकोडिंग काफी बेहतर हो सकता है.
अब यह लक्ष्य है कि उस मामूली एनकोडिंग को सुधारने का लक्ष्य रखें, यह देखने के लिए कि क्या इस्तेमाल किए गए बिट्स की संख्या के संदर्भ में एक ज़्यादा संपीडित एनकोडिंग प्राप्त किया जा सकता है या नहीं ।
पहला कदम : जब सेट में तत्वों की संख्या सीमा के आकार से बहुत छोटी होती है, तो हम इस बात पर विचार कर सकते हैं कि वे कहाँ हैं ।
इस मामले में, प्रयोग होता:
- सीमा में तत्वों की संख्या के लिए 31 बिट्स.
- सेट में मौजूद तत्वों की संख्या के लिए 31 बिट्स.
- 31 बिट्स * सेट में मौजूद तत्वों की संख्या.
दूसरा तरीका .. हम प्रत्येक भंडारित तत्व की संख्या बेहतर करते हैं:
- सीमा में तत्वों की संख्या के लिए 31 बिट्स. सीमा में सबसे बड़े तत्व की संख्या (e) एन. ए. हिसाब किया जाएगा.
- जमा करने के लिए 5 बिट्स एन. ए. ___तो, यदि सीमा के तत्वों की संख्या १०23 थी, तो इन ५ बिट्स में १० व्यक्ति जमा किए जाएँगे ।
- एन. ए. बिट्स, सेट में तत्वों की संख्या स्टोर करने के लिए.
- एन. ए. सेट में मौजूद तत्वों की संख्या बिट्स *.
खैर, छोटे से हम एक बेहतर एनकोडिंग के करीब हो रहे हैं...
तृतीय एप्रेशन .. हम जानते हैं कि अगर हम बढ़ते क्रम में सेट की तरह, डेल्टा ( निरंतर तत्वों के बीच) शायद कम बिट्स के साथ दर्ज किया जा सकता है सीमा के पूर्ण तत्व से कम बिट्स के साथ:
- सीमा में तत्वों की संख्या के लिए 31 बिट्स.
- हम एक तत्व को दर्ज करने के लिए सबसे छोटे संख्या Bebelelm की गणना करते हैं.डेल्टा्स की सूची की हम भी गणना करते हैं (जब सेट में तत्वों की अलग- अलग- अलग- अलग- अलग- अलग तत्वों की सूची).और अंत में, हम भी गणना एनमुल्सडीए
- जमा करने के लिए 5 बिट्स एन. ए. ___
- जमा करने के लिए 5 बिट्स एनमुल्सडीए ___
- एन. ए. बिट्स, सेट में तत्वों की संख्या स्टोर करने के लिए.
- एनमुल्सडीए सेट में तत्वों की संख्या बिट्स *.
ठीक है, ऐसा लगता है कि हम पहले से ही सहसा एनकोडिंग पहुँच रहे हैं, है ना?
चलो जारी रखते हैं...
चौथा एग्रिमेशन .. हम इस बात पर ध्यान केंद्रित करते हैं कि छोटे डेल्टा की एक बहुत बड़ी संख्या हो सकती है, और शायद कुछ बड़े लोग हैं, कि ई तोड़ने एनमुल्सडीए एस.
इन परिस्थितियों में, हम एक ई मिल सकता है अ- धातु अधिकतम मान से छोटा है हमममुला `%s', जो बदले में कम है या समान है एन. ए. एस.
लेकिन कैसे हम एक डेल्टा तत्व है कि ई से अधिक अ- धातु है ना?
खैर... क्योंकि डेल्टा 0 कभी नहीं होगा (कोई दोहराया तत्वों सेट में नहीं हैं), हम मूल्य 0 का उपयोग कर सकते हैं यह सूचित करने के लिए कि यह एक विशेष मूल्य है.
और कि 0 डेल्टा के मूल्य के बाद पीछा किया जाएगा, लेकिन इस बार D के साथ दर्ज किया जाएगा हमममुला एस.आकाश की कुल संख्या की गणना ऐसे की जा सकती है:
- सीमा में तत्वों की संख्या के लिए 31 बिट्स. हम छोटे से छोटे की गणना करते हैं एन. ए. एक तत्व सहेजने में समर्थ होने के लिए. हम डेल्टा की सूची की गणना में लगातार तत्वों के सेट के बीच अंतरों की सूची (सूची) की गणना करते हैं.
- 31 बिट्स, सेट में तत्वों की संख्या स्टोर करने के लिए.
- जमा करने के लिए 5 बिट्स अ- धातु ___
- जमा करने के लिए 5 बिट्स हमममुला ___
- अ- धातु सेट में तत्वों की संख्या बिट्स *.
- हमममुला बिट्स * डेल्टा की संख्या जो इससे ज्यादा है अ- धातु ___
क्या हम पहले से ही अनुकूलित एनकोडिंग तक पहुँच चुके हैं?
पांचवां एग्रोमेशन ठीक है... क्योंकि हम पहले से ही यह सब तय कर चुके हैं...हम सहज स्थिति के बारे में सोच सकते हैं...क्या यह संभव है कि एक ही एल्गोरिथ्म के साथ सेट के अवयव का एनकोडिंग अधिक संपीडित परिणाम उत्पन्न करेगा?
एक और सेट के रूप में नियत, मूल सेट से अलग किए गए समूह के रूप में समझा जाता है, जिसका मूल सेट में पूरी सीमा है ।
यही वजह है कि मूल सेट में जितने भी पहलू रह जाते थे, उनमें से कोई भी मूल स्थान में नहीं रह सकता था ।
इसलिए हम मूल सेट को प्राप्त कर सकते हैं, और इस वजह से उस व्यक्ति को सुरक्षित रख सकते हैं ।
स्पष्ट अनुप्रयोग एक सेट है कि सीमा के सभी तत्वों को एक, या कुछ में...
ठीक है... अगर हम केवल पीछे रखे हैं (संग्रेजी सेट), यह एक बहुत छोटे आकार में रखा जा सकता है, है ना?
इस केस में एनकोडिंग इस तरह हो सकता है:
- सीमा में तत्वों की संख्या के लिए 31 बिट्स. हम छोटे से छोटे की गणना करते हैं एन. ए. अवयव सहेजने के लिए. हम डेल्टा्स की सूची की भी गणना करते हैं (अंग्रेड में तत्वों की सूची).
- 1 थोड़ा - सा स्टोर करने के लिए, चाहे हम मूल सेट जमा करें या फिर मेल - जोल रखते हों ।यह अतिरिक्त सा है.
- 31 बिट्स, सेट में तत्वों की संख्या स्टोर करने के लिए.
- जमा करने के लिए 5 बिट्स अ- धातु ___
- जमा करने के लिए 5 बिट्स हमममुला ___
- अ- धातु सेट में तत्वों की संख्या बिट्स *.
- हमममुला बिट्स * डेल्टा की संख्या जो इससे ज्यादा है अ- धातु , जहां वे प्रकट पदों में.
ठीक है... अब हम बात कर रहे हैं.
तो यही कारण है कि मैं फँस गया... लेकिन मुझे पता है कि अगर उन सभी चमत्कार किया जा सकता है, क्या अन्य पैटर्नों के लिए देख कर नहीं किया जा सकता, या बस एक बेकार या 7z की तरह...
यही कारण है कि अगली बार के लिए वापस बर्नर पर इंतजार करना होगा...