आइए कहें कि मेरे पास कई ऑब्जेक्ट्स हैं जिनमें गैर-तुच्छ लंबाई (लगभग ~ 3-4 केबी) की तार शामिल हैं। स्ट्रिंग्स एक-दूसरे से अलग हैं, फिर भी एक ही समय में बहुत सारे सामान्य भाग/बाद के होते हैं। औसतन किसी भी व्यक्तिगत स्ट्रिंग का 80-90% दूसरों के साथ भी निहित होता है। डेटा को संपीड़ित करने के लिए इस विशाल अनावश्यकता का स्वचालित रूप से उपयोग करने का कोई आसान तरीका है?
आदर्श रूप से समाधान सी ++ होगा और उपयोगकर्ता के लिए पारदर्शी होगा (यानी मैं इसका उपयोग कर सकता हूं जैसे कि मैं नियमित रूप से पढ़ने के लिए केवल std :: स्ट्रिंग का उपयोग कर रहा था लेकिन संकुचित स्टोरेज से पढ़ने के बजाय)।संकुचित स्ट्रिंग स्टोरेज
उत्तर
एल्गोरिदमिक रूप से, Lempel–Ziv–Welch सभी वस्तुओं/तारों के लिए एक शब्दकोश के साथ एक अच्छी शुरुआत हो सकती है।
यदि समय के साथ बहुत से तार गतिशील रूप से बनाए जाते हैं, तो यह शब्दकोश बड़ा हो जाएगा। तो अंत में, यह केवल एक आसान और बेहतर विचार हो सकता है कि केवल LZW तारों को अलग से संपीड़ित करें। –
आरंभिक बैच लोड होने के बाद बहुत कम स्ट्रिंग बनाए जाएंगे, इसलिए मुझे वहां कोई समस्या की उम्मीद नहीं होगी ... – BuschnicK
तार के आम भागों आम कर रहे हैं, क्योंकि वे दूसरे तार से बना रहे हैं, तो आप कुछ कर्षण stlportrope
वर्ग है, जो एक std :: स्ट्रिंग की तरह पूरी दुनिया के लिए लग रहा है का उपयोग करके प्राप्त कर सकता है, लेकिन स्ट्रिंग का उपयोग करता है लिखने पर प्रति के साथ पेड़ प्रतिनिधित्व कि उन दोनों को बहुत अंतरिक्ष कुशल (आम सबस्ट्रिंग साझा कर रहे हैं) और आवेषण और नष्टकरण (लॉग (एन)) में बहुत अच्छा बना देता है
रस्सी उपयोग कब करें:
- आप कर रहे हैं एक टेम्पलेट इंजन। दस्तावेज़ उदाहरण टेम्पलेट में अलग-अलग डेटा को प्रतिस्थापित करके टेम्पलेट से बनाए जाते हैं, और फिर भविष्य के उपयोगों के लिए कैश किए जाते हैं। भाग जो टेम्पलेट्स और उदाहरणों के लिए आम हैं, केवल एक बार संग्रहीत किए जाते हैं और उदाहरणों, आवेषण और डिलीटों में साझा किए जाते हैं।
रस्सी का उपयोग करने के लिए नहीं है:
- आप अपने आवेदन (डिस्क से, या एक नेटवर्क पर) के डोमेन से बाहर के कई दस्तावेज लोड हो रहा है और संशोधन के बिना उन्हें प्रयोग कर रहे हैं। रस्सी तारों को साझा नहीं करती है अगर उन्हें एक रस्सी से दूसरे में कॉपी नहीं किया जाता है। यदि आप आम सबस्ट्रिंग्स को खोजने के लिए काम करने के लिए सक्षम हो सकते हैं, तो रस्सी का उपयोग अभी भी आपके अंतिम प्रतिनिधित्व में सुधार के लिए किया जा सकता है।
मुझे लगता है कि यह लिखने पर प्रतिलिपि से अधिक है। मुझे लगता है कि डेटा स्ट्रिंग के पेड़ में संग्रहीत है, न कि एक संगत स्मृति क्षेत्र में। –
यह कॉपी-ऑन-राइट संयुक्त है जो उसी एल्गोरिदमिक लागत पर तारों को प्रीपेड करने की क्षमता के साथ जोड़ता है। –
मुझे लगता है कि मैं आपके दूसरे मामले में फिट हूं: मेरे तार मेरे द्वारा नियंत्रित नहीं हैं और मैं उन्हें डेटाबेस से प्राप्त करता हूं। – BuschnicK
आप huffman coding कार्यान्वयन का उपयोग नहीं कर सकते हैं, इसके अलावा भाषाओं में ज़िप एल्गोरिदम भी हैं (जैसे सी # और जावा) और आप उनका उपयोग कर सकते हैं।
यदि आप सुनिश्चित करते हैं कि 80-90% सभी में दोहराया गया है, तो सभी शब्दों का एक शब्दकोश बनाएं, फिर प्रत्येक स्ट्रिंग को शब्दकोष शब्द की स्थिति संग्रहित करने के लिए, इसका मतलब बड़े आकार (10000 यानी) का थोड़ा सरणी है और चिह्नित करें संबंधित स्थिति bits[i]
से 1
यदि वर्तमान स्ट्रिंग में words[i]
मौजूद है। लगता है कि प्रत्येक शब्द की लंबाई 5 वर्ण है तो संक्षिप्त नाम 1/5 आकार लेता है।
जैसा कि @ सईद ने उल्लेख किया है, एक सरल हफमैन कोडिंग यहां अच्छा प्रदर्शन करेगा।
शब्दकोश में कोई आवश्यकता नहीं है, यदि आम शब्द apriori (आपने उल्लेख किया है कि यह एक HTML है) है। बस कई HTML फ़ाइलों से सांख्यिकीय डेटा का उपयोग करके एक हफमैन तालिका का प्रीकंप्यूट करें (ध्यान दें कि आप एक ही प्रतीक से पूरे टैग को एन्कोड कर सकते हैं, और आपके पास जितने चाहें उतने प्रतीक हो सकते हैं)।
- 1. पायथन - संकुचित Ascii स्ट्रिंग
- 2. संकुचित
- 3. विंडोज़ एज़ूर स्टोरेज एमुलेटर कनेक्शन स्ट्रिंग?
- 4. जीएई स्टोरेज कुंजी बनाम स्ट्रिंग आईडी
- 5. मैं पायथन में एक स्ट्रिंग को संकुचित कैसे करूं?
- 6. बाइनरी डेटा संकुचित बेस 64
- 7. LINEBREAK संकुचित जब पर्यावरण
- 8. स्थानीय स्टोरेज
- 9. स्थानीय स्टोरेज
- 10. संकुचित बूटस्ट्रैप, पहला तत्व दिखाएं
- 11. जेएसटी नोड विस्तार/संकुचित करें
- 12. होवर पर बूटस्ट्रैप संकुचित accordion
- 13. log4j: संक्षिप्त नाम संकुचित करें
- 14. आरडीबीएमएस का उपयोग स्टोरेज सोर्सिंग स्टोरेज
- 15. सत्र का दायरा स्टोरेज और लोकल स्टोरेज
- 16. संकुचित इलाज के रूप में iterable
- 17. सीएसवी फ़ाइल में स्टोरेज के लिए जावा एस्केपिंग स्ट्रिंग
- 18. क्लाउड स्टोरेज
- 19. एमएसआईएसडीएन स्टोरेज
- 20. आंतरिक स्टोरेज
- 21. टेक्स्टमैट में सभी को संकुचित करें
- 22. पीएल/एसक्यूएल डेवलपर के लिए संकुचित क्षेत्र
- 23. Jquery Accordion सभी को संकुचित करें सभी
- 24. कुछ समूह को संकुचित करें jqGrid
- 25. संदर्भित gzip संकुचित सीएसएस और HTML/JSPs
- 26. अधिसूचना विस्तार और संकुचित करें एंड्रॉइड
- 27. समूह को संकुचित करें/विस्तृत करें
- 28. ट्विटर बूटस्ट्रैप संकुचित समूह केवल फोन पर
- 29. टिप्पणियों को संकुचित करें और vim/gvim
- 30. SystemFontFamilies को संकुचित करते समय combobox
स्ट्रिंग्स में सामान्य सब-अनुक्रम कैसे होते हैं। क्या यह डेटा के दोहराए गए संपादन या संयोग के कारण है? – SingleNegationElimination
सीएसएस के समर्थन के बिना स्थिर एचटीएमएल की कल्पना करो। आपके पास बहुत सी अनावश्यक एचटीएमएल है और वास्तविक जानकारी वाले बहुत ही कम बदलते हिस्सों हैं। – BuschnicK
1 जीबी रैम 100,000 असंपीड़ित ब्लब्स के आकार 3-4 केबी के क्रम में होगा। क्या आपको वास्तव में कम फिट करने की ज़रूरत है? – SingleNegationElimination